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.
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.
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>
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.
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.
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.
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.
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
,boolean
ochdate
. 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:
Information om dataformat som stöds
Nästa steg
I följande artiklar finns fler kodexempel att lägga till i dina kartor: