Čtení a zápis prostorových dat
Následující tabulka uvádí formáty prostorových souborů, které jsou podporovány pro operace čtení a zápisu pomocí modulu Spatial IO.
Formát dat | Čtení | Zápis |
---|---|---|
GeoJSON | ✓ | ✓ |
GeoRSS | ✓ | ✓ |
GML | ✓ | ✓ |
GPX | ✓ | ✓ |
KML | ✓ | ✓ |
KMZ | ✓ | ✓ |
Prostorový sdílený svazek clusteru | ✓ | ✓ |
Známý text | ✓ | ✓ |
Tyto další části popisují všechny různé nástroje pro čtení a zápis prostorových dat pomocí modulu Spatial IO.
Čtení prostorových dat
Funkce atlas.io.read
je hlavní funkcí sloužící ke čtení běžných formátů prostorových dat, jako jsou KML, GPX, GeoRSS, GeoJSON a soubory CSV s prostorovými daty. Tato funkce může také číst komprimované verze těchto formátů, jako soubor ZIP nebo soubor KMZ. Formát souboru KMZ je komprimovaná verze KNIHOVNY KML, která může obsahovat i prostředky, jako jsou obrázky. Případně může funkce pro čtení převzít adresu URL, která odkazuje na soubor v některém z těchto formátů. Adresy URL by měly být hostované na koncovém bodu s povoleným CORS nebo by měla být v možnostech čtení k dispozici služba proxy. Služba proxy se používá k načtení prostředků do domén, které nejsou povolené CORS. Funkce pro čtení vrátí příslib přidání ikon obrázků do mapy a asynchronní zpracování dat, aby se minimalizoval dopad na vlákno uživatelského rozhraní.
Při čtení komprimovaného souboru, ať už jako zip nebo KMZ, jakmile ho rozbalíte, vyhledá první platný soubor. Například doc.kml nebo soubor s jinou platnou příponou, například: .kml, .xml, geojson, .json, .csv, .tsv nebo .txt. Pak se obrázky odkazované v souborech KML a GeoRSS předem načtou, aby byly přístupné. Nepřístupná data obrázku můžou načíst alternativní záložní obrázek nebo odebrat ze stylů. Obrázky extrahované ze souborů KMZ se převedou na identifikátory URI dat.
Výsledkem funkce čtení je SpatialDataSet
objekt. Tento objekt rozšiřuje GeoJSON FeatureCollection třídy. Dá se snadno předat do as-is DataSource
k vykreslení jeho funkcí na mapě. Informace SpatialDataSet
o funkcích obsahují nejen informace o funkcích, ale mohou také zahrnovat překrytí země KML, zpracování metrik a další podrobnosti, jak je popsáno v následující tabulce.
Název vlastnosti | Type | Popis |
---|---|---|
bbox |
BoundingBox |
Ohraničující rámeček všech dat v sadě dat. |
features |
Feature[] |
Funkce GeoJSON v datové sadě |
groundOverlays |
(atlas.layer.ImageLayer | atlas.layers.OgcMapLayer)[] |
Pole KmL GroundOverlays. |
icons |
Řetězec záznamu<, řetězec> | Sada adres URL ikon. Klíč = název ikony, Hodnota = adresa URL. |
vlastnosti | jakékoliv | Informace o vlastnosti poskytnuté na úrovni dokumentu prostorové datové sady |
stats |
SpatialDataSetStats |
Statistiky o obsahu a době zpracování prostorové datové sady |
type |
'FeatureCollection' |
Hodnota typu GeoJSON určená jen pro čtení |
Příklady čtení prostorových dat
Ukázka načtení prostorových dat ukazuje, jak číst prostorovou datovou sadu a vykreslit ji na mapě pomocí SimpleDataLayer
třídy. Kód používá soubor GPX, na který odkazuje adresa URL. Zdrojový kód této ukázky najdete v tématu Načtení kódu zdroje prostorových dat.
Následující ukázka kódu ukazuje, jak na mapě číst a načíst KML nebo KMZ. KmL může obsahovat překryvy země, které jsou ve formě nebo ImageLayer
OgcMapLayer
. Tyto překryvy musí být na mapě přidány odděleně od funkcí. Kromě toho, pokud sada dat obsahuje vlastní ikony, je třeba tyto ikony načíst do mapových prostředků před načtením funkcí.
Ukázka načtení KML na mapu ukazuje, jak na mapu načíst soubory KML nebo KMZ. Zdrojový kód této ukázky najdete v tématu Načtení KML do zdrojového kódu mapování.
Volitelně můžete poskytnout proxy službu pro přístup k prostředkům napříč doménami, které nemají povolené CORS. Funkce pro čtení se nejprve pokusí získat přístup k souborům v jiné doméně pomocí CORS. Při prvním selhání přístupu k jakémukoli prostředku v jiné doméně pomocí CORS vyžaduje pouze více souborů, pokud je k dispozici proxy služba. Funkce pro čtení připojí adresu URL souboru na konec zadané adresy URL proxy serveru. Tento fragment kódu ukazuje, jak předat proxy službu do funkce pro čtení:
//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 . . .
}
});
Následující fragment kódu ukazuje, jak číst soubor s oddělovači a vykreslit ho na mapě. V tomto případě kód používá soubor CSV se sloupci prostorových dat. Musíte přidat odkaz na modul Azure Maps Spatial IO.
<!-- 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>
Zápis prostorových dat
V modulu prostorových vstupně-výstupních operací existují dvě hlavní funkce zápisu. Funkce atlas.io.write
vygeneruje řetězec, zatímco atlas.io.writeCompressed
funkce vygeneruje komprimovaný soubor ZIP. Komprimovaný soubor ZIP by obsahoval textový soubor s prostorovými daty v něm. Obě tyto funkce vrátí příslib přidání dat do souboru. A oba můžou napsat některá z následujících dat: SpatialDataSet
, DataSource
, ImageLayer
, OgcMapLayer
, , kolekce prvků, funkce, geometrie nebo pole libovolné kombinace těchto datových typů. Při psaní pomocí obou funkcí můžete zadat požadovaný formát souboru. Pokud není zadaný formát souboru, zapíšou se data jako KML.
Ukázka možností zápisu prostorových dat je nástroj, který ukazuje většinu možností zápisu atlas.io.write
, které lze s funkcí použít. Zdrojový kód této ukázky naleznete v tématu Možnosti zápisu prostorových dat zdrojový kód.
Příklad zápisu prostorových dat
Přetažení prostorových souborů na ukázku mapy umožňuje přetáhnout na mapu jeden nebo více souborů KML, KMZ, GeoRSS, GPX, GML, GeoJSON nebo CSV na mapu. Zdrojový kód této ukázky naleznete v tématu Přetažení a přetažení prostorových souborů do zdrojového kódu mapy.
Volitelně můžete poskytnout proxy službu pro přístup k prostředkům napříč doménami, které nemají povolené CORS. Tento fragment kódu ukazuje, že byste mohli začlenit službu proxy:
atlas.io.read(data, {
//Provide a proxy service
proxyService: window.location.origin + '/YourCorsEnabledProxyService.ashx?url='
}).then(
//Success
function(r) {
//some code goes here ...
}
);
Čtení a zápis dobře známého textu (WKT)
Dobře známý text (WKT) je open geoprostorové konsorcium (OGC) pro reprezentaci prostorových geometrií jako textu. Mnoho geoprostorových systémů podporuje WKT, jako je Azure SQL a Azure PostgreSQL, pomocí modulu plug-in PostGIS. Stejně jako většina standardů OGC jsou souřadnice formátované jako "zeměpisná šířka délky" tak, aby odpovídaly konvenci "x y". Například bod v délce -110 a zeměpisné šířce 45 lze zapsat jako POINT(-110 45)
formát WKT.
Známý text lze číst pomocí atlas.io.ogc.WKT.read
funkce a zapisovat pomocí atlas.io.ogc.WKT.write
funkce.
Příklady čtení a psaní dobře známého textu (WKT)
Ukázka pro čtení dobře známého textu ukazuje, jak číst dobře známý textový řetězec POINT(-122.34009 47.60995)
a vykreslit ho na mapě pomocí bublinové vrstvy. Zdrojový kód této ukázky najdete v tématu Čtení známého textového zdrojového kódu.
Ukázka čtení a zápisu dobře známého textu ukazuje, jak číst a zapisovat dobře známé textové řetězce (WKT) jako GeoJSON. Zdrojový kód této ukázky najdete v tématu Čtení a zápis známého zdrojového kódu textu.
GML pro čtení a zápis
GML je specifikace prostorového souboru XML, která se často používá jako rozšíření jiných specifikací XML. Data GeoJSON je možné zapsat jako XML se značkami GML pomocí atlas.io.core.GmlWriter.write
funkce. Kód XML, který obsahuje GML, lze číst pomocí atlas.io.core.GmlReader.read
funkce. Funkce pro čtení má dvě možnosti:
- Možnost
isAxisOrderLonLat
– Pořadí os souřadnic "zeměpisná šířka, zeměpisná délka" nebo "zeměpisná délka, zeměpisná šířka" se může mezi sadami dat lišit a není vždy dobře definované. Ve výchozím nastavení čtečka GML čte souřadnicová data jako "zeměpisná šířka, zeměpisná délka", ale když tuto možnost nastavíte tak, abytrue
se četla jako "zeměpisná délka, zeměpisná šířka". - Možnost
propertyTypes
– Tato možnost je vyhledávací tabulka klíčové hodnoty, kde je klíč názvem vlastnosti v sadě dat. Hodnota je typ objektu, na který se má přetypovat hodnota při analýze. Podporované hodnoty typu:string
,number
,boolean
adate
. Pokud vlastnost není ve vyhledávací tabulce nebo typ není definován, vlastnost se analyzuje jako řetězec.
Funkce atlas.io.read
se ve výchozím nastavení použije atlas.io.core.GmlReader.read
, když zjistí, že vstupní data jsou XML, ale data nejsou jedním z ostatních formátů prostorového XML.
Parsuje GmlReader
souřadnice, které mají jednu z následujících identifikátorů SRID:
- EPSG:4326 (upřednostňované)
- EPSG:4269, EPSG:4283, EPSG:4258, EPSG:4308, EPSG:4230, EPSG:4272, EPSG:4271, EPSG:4267, EPSG:4608, EPSG:4674 pravděpodobně s malým okrajem chyby.
- EPSG:3857, EPSG:102100, EPSG:3785, EPSG:900913, EPSG:102113, EPSG:41001, EPSG:54004
Další materiály
Další informace o třídách a metodách používaných v tomto článku:
Podrobnosti o podporovaném formátu dat
Další kroky
Další ukázky kódu pro přidání do map najdete v následujících článcích: