Dela via


Läsa och skriva rumsliga data

I följande tabell visas de rumsliga filformat som stöds för läs- och skrivåtgärder med spatial I/O-modulen.

Dataformat Lästa Skriv
GeoJSON
GeoRSS
GML
GPX
KML
KMZ
Spatial CSV
Välkänd text

I de här nästa avsnitten beskrivs alla olika verktyg för att läsa och skriva rumsliga data med hjälp av modulen Spatial I/O.

Läsa rumsliga data

Funktionen atlas.io.read är den huvudsakliga funktion som används för att läsa vanliga rumsliga dataformat som KML-, GPX-, GeoRSS-, GeoJSON- och CSV-filer med rumsliga data. Den här funktionen kan också läsa komprimerade versioner av dessa format, som en zip-fil eller en KMZ-fil. KMZ-filformatet är en komprimerad version av KML som också kan innehålla tillgångar som bilder. Läsfunktionen kan också ta in en URL som pekar på en fil i något av dessa format. URL:er ska finnas på en CORS-aktiverad slutpunkt, eller så ska en proxytjänst anges i läsalternativen. Proxytjänsten används för att läsa in resurser på domäner som inte är CORS-aktiverade. Läsfunktionen returnerar ett löfte om att lägga till bildikonerna på kartan och bearbetar data asynkront för att minimera påverkan på användargränssnittstråden.

När du läser en komprimerad fil, antingen som en zip eller en KMZ, när den har packats upp letar den efter den första giltiga filen. Till exempel doc.kml eller en fil med ett annat giltigt tillägg, till exempel: .kml, .xml, geojson, .json, .csv, .tsv eller .txt. Sedan läses bilder som refereras till i KML- och GeoRSS-filer in för att säkerställa att de är tillgängliga. Otillgängliga bilddata kan läsa in en alternativ återställningsbild eller tas bort från formatmallarna. Bilder som extraheras från KMZ-filer konverteras till data-URI:er.

Resultatet från läsfunktionen är ett SpatialDataSet objekt. Det här objektet utökar klassen GeoJSON FeatureCollection. Det kan enkelt skickas till en DataSource as-is för att återge dess funktioner på en karta. Den SpatialDataSet innehåller inte bara funktionsinformation, utan kan även innehålla KML-marköverlägg, bearbetningsmått och annan information som beskrivs i följande tabell.

Egenskapsnamn Type Beskrivning
bbox BoundingBox Avgränsningsruta för alla data i datauppsättningen.
features Feature[] GeoJSON-funktioner i datauppsättningen.
groundOverlays (atlas.layer.ImageLayer | atlas.layers.OgcMapLayer)[] En matris med KML GroundOverlays.
icons Poststräng<, sträng> En uppsättning ikon-URL:er. Key = icon name, Value = URL.
egenskaper någon Egenskapsinformation som tillhandahålls på dokumentnivå för en rumslig datauppsättning.
stats SpatialDataSetStats Statistik om innehållet och bearbetningstiden för en rumslig datauppsättning.
type 'FeatureCollection' Skrivskyddat GeoJSON-typvärde.

Exempel på läsning av rumsliga data

Exemplet Load spatial data (Läs in rumsliga data ) visar hur du läser en rumslig datauppsättning och återger den på kartan med hjälp av SimpleDataLayer klassen . Koden använder en GPX-fil som pekas på av en URL. Källkoden för det här exemplet finns i Läsa in källkod för rumsliga data.

En skärmbild som visar fästrutnätet på kartan. En skärmbild som visar en detaljerad beskrivning av snaprutnätet i kartexemplet.

Nästa koddemo visar hur du läser och läser in KML, eller KMZ, på kartan. KML kan innehålla marköverlägg, som är i form av en ImageLayer eller OgcMapLayer. Dessa överlägg måste läggas till på kartan separat från funktionerna. Om datauppsättningen dessutom har anpassade ikoner måste dessa ikoner läsas in till mappningsresurserna innan funktionerna läses in.

Exemplet läs in KML på kartan visar hur du läser in KML- eller KMZ-filer på kartan. Källkoden för det här exemplet finns i Läsa in KML på kart källkoden.

En skärmbild som visar en karta med ett KML-marköverlägg.

Du kan också ange en proxytjänst för åtkomst till tillgångar mellan domäner som inte har CORS aktiverat. Läsfunktionen försöker komma åt filer på en annan domän med CORS först. Första gången den inte kan komma åt någon resurs på en annan domän med CORS begär den bara fler filer om en proxytjänst tillhandahålls. Läsfunktionen lägger till fil-URL:en i slutet av den angivna proxy-URL:en. Det här kodfragmentet visar hur du skickar en proxytjänst till läsfunktionen:

//Read a file from a URL or pass in a raw data as a string.
atlas.io.read('https://nonCorsDomain.example.com/mySuperCoolData.xml', {
    //Provide a proxy service
    proxyService: window.location.origin + '/YourCorsEnabledProxyService.ashx?url='
}).then(async r => {
    if (r) {
        // Some code goes here . . .
    }
});

Följande kodfragment visar hur du läser en avgränsad fil och återger den på kartan. I det här fallet använder koden en CSV-fil som har spatiala datakolumner. Du måste lägga till en referens till Azure Maps Spatial IO-modulen.

<!-- Add reference to the Azure Maps Spatial IO module. -->
<script src="https://atlas.microsoft.com/sdk/javascript/spatial/0/atlas-spatial.min.js"></script>

<script>
    var datasource, delimitedFileUrl = "Chicago_Police_Stations.csv";
    // Download CSV file (delimitedFileUrl) from:
    // https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Static/data/SpatialCSV/Chicago_Police_Stations.csv

    function GetMap() {

        //Instantiate a map object
        var map = new atlas.Map("myMap", {
            center: [-87.628899, 41.874693],
            zoom: 9,
            view: "Auto",
            // Replace <Your Azure Maps Subscription Key> with your Azure Maps subscription key. https://aka.ms/am-primaryKey
            authOptions: {
                authType: 'subscriptionKey',
                subscriptionKey: '{Your-Azure-Maps-Subscription-key}'
            }
        });
    
    //Wait until the map resources are ready.
      map.events.add('ready', function () {
        
        //Create a data source and add it to the map.
        datasource = new atlas.source.DataSource();
        map.sources.add(datasource);
        
        //Add a simple data layer for rendering the data.
        layer = new atlas.layer.SimpleDataLayer(datasource);
        map.layers.add(layer);
        
        //Read a CSV file from a URL or pass in a raw string.
        atlas.io.read(delimitedFileUrl).then(r => {
            if (r) {
                
                //Add the feature data to the data source.
                datasource.add(r);
                
                //If bounding box information is known for data, set the map view to it.
                if (r.bbox) {
                    map.setCamera({
                        bounds: r.bbox,
                        padding: 50
                    });
                }
            }
          });
        });
      }
</script>

En skärmbild som visar en karta som skapats från en CSV-fil.

Skriva rumsliga data

Det finns två huvudsakliga skrivfunktioner i den rumsliga I/O-modulen. Funktionen atlas.io.write genererar en sträng, medan atlas.io.writeCompressed funktionen genererar en komprimerad zip-fil. Den komprimerade zip-filen skulle innehålla en textbaserad fil med rumsliga data i den. Båda dessa funktioner returnerar ett löfte om att lägga till data i filen. Och båda kan skriva någon av följande data: SpatialDataSet, DataSource, ImageLayer, OgcMapLayer, funktionssamling, funktion, geometri eller en matris med valfri kombination av dessa datatyper. När du skriver med någon av funktionerna kan du ange önskat filformat. Om filformatet inte har angetts skrivs data som KML.

Exempel på rumsliga dataskrivningsalternativ är ett verktyg som visar de flesta skrivalternativ som kan användas med atlas.io.write funktionen. Källkoden för det här exemplet finns i Källkod för rumsliga dataskrivningsalternativ.

En skärmbild som visar exempel på alternativ för spatial dataskrivning som visar de flesta av de skrivalternativ som används med funktionen atlas.io.write.

Exempel på att skriva rumsliga data

Med dra och släpp rumsliga filer till kartexemplet kan du dra och släppa en eller flera KML-, KMZ-, GeoRSS-, GPX-, GML-, GeoJSON- eller CSV-filer på kartan. Källkoden för det här exemplet finns i Dra och släpp rumsliga filer till kart källkoden.

En skärmbild som visar en karta med en panel till vänster om kartan som gör att du kan dra och släppa en eller flera KML-, KMZ-, GeoRSS-, GPX-, GML-, GeoJSON- eller CSV-filer på kartan.

Du kan också ange en proxytjänst för åtkomst till tillgångar mellan domäner som inte har CORS aktiverat. Det här kodfragmentet visar att du kan införliva en proxytjänst:

atlas.io.read(data, {
    //Provide a proxy service
    proxyService: window.location.origin + '/YourCorsEnabledProxyService.ashx?url='
}).then(
    //Success
    function(r) {
        //some code goes here ...
    }
);

Läsa och skriva välkänd text (WKT)

Välkänd text (WKT) är en OGC-standard (Open Geospatial Consortium) för att representera rumsliga geometrier som text. Många geospatiala system stöder WKT, till exempel Azure SQL och Azure PostgreSQL med postGIS-plugin-programmet. Precis som de flesta OGC-standarder formateras koordinaterna som "longitud latitud" för att överensstämma med "x y"-konventionen. Till exempel kan en punkt vid longitud -110 och latitud 45 skrivas som POINT(-110 45) WKT-format.

Välkänd text kan läsas med hjälp av atlas.io.ogc.WKT.read funktionen och skrivas med hjälp av atlas.io.ogc.WKT.write funktionen.

Exempel på läsning och skrivning av välkänd text (WKT)

Exemplet Läs välkänd text visar hur du läser den välkända textsträngen POINT(-122.34009 47.60995) och återger den på kartan med hjälp av ett bubbellager. Källkoden för det här exemplet finns i Read Well Known Text source code (Läsa välkänd text) källkod.

En skärmbild som visar hur du läser välkänd text (WKT) som GeoJSON och återger den på en karta med hjälp av ett bubbellager.

Exemplet Läs och skriv välkänd text visar hur du läser och skriver WKT-strängar (Välkänd text) som GeoJSON. Källkoden för det här exemplet finns i Läsa och skriva källkod för välkänd text.

En skärmbild som visar exemplet som visar hur du läser och skriver WKT-strängar (Välkänd text) som GeoJSON.

Läsa och skriva GML

GML är en spatial XML-filspecifikation som ofta används som ett tillägg till andra XML-specifikationer. GeoJSON-data kan skrivas som XML med GML-taggar med hjälp av atlas.io.core.GmlWriter.write funktionen . DEN XML som innehåller GML kan läsas med hjälp av atlas.io.core.GmlReader.read funktionen . Läsfunktionen har två alternativ:

  • Alternativet isAxisOrderLonLat – Axelordningen för koordinaterna "latitud, longitud" eller "longitud, latitud" kan variera mellan datauppsättningar och är inte alltid väldefinierad. Som standard läser GML-läsaren koordinatdata som "latitud, longitud", men om du anger det här alternativet så true läss det som "longitud, latitud".
  • Alternativet propertyTypes – Det här alternativet är en nyckelvärdesuppslagstabell där nyckeln är namnet på en egenskap i datauppsättningen. Värdet är den objekttyp som värdet ska omvandlas till vid parsning. De typvärden som stöds är: string, number, booleanoch date. Om en egenskap inte finns i uppslagstabellen eller om typen inte har definierats parsas egenskapen som en sträng.

Funktionen atlas.io.read är standard för atlas.io.core.GmlReader.read funktionen när den identifierar att indata är XML, men data inte har stöd för rumsliga XML-format.

Parsningskoordinaterna GmlReader som har något av följande SRID:

  • EPSG:4326 (föredraget)
  • EPSG:4269, EPSG:4283, EPSG:4258, EPSG:4308, EPSG:4230, EPSG:4272, EPSG:4271, EPSG:4267, EPSG:4608, EPSG:4674 möjligen med en liten felmarginal.
  • EPSG:3857, EPSG:102100, EPSG:3785, EPSG:900913, EPSG:102113, EPSG:41001, EPSG:54004

Fler resurser

Läs mer om de klasser och metoder som används i den här artikeln:

atlas.io statiska funktioner

SpatialDataSet

SpatialDataSetStats

GmlReader

GmlWriter

atlas.io.ogc.WKT-funktioner

Ansluta till en WFS-tjänst

Utnyttja kärnåtgärder

Information om dataformat som stöds

Nästa steg

I följande artiklar finns fler kodexempel att lägga till i dina kartor:

Lägga till ett OGC-kartskikt