Ruimtelijke gegevens lezen en schrijven
De volgende tabel bevat de ruimtelijke bestandsindelingen die worden ondersteund voor lees- en schrijfbewerkingen met de Spatial IO-module.
Gegevensopmaak | Read | Write |
---|---|---|
GeoJSON | ✓ | ✓ |
GeoRSS | ✓ | ✓ |
GML | ✓ | ✓ |
GPX | ✓ | ✓ |
KML | ✓ | ✓ |
KMZ | ✓ | ✓ |
Ruimtelijk CSV-bestand | ✓ | ✓ |
Bekende tekst | ✓ | ✓ |
In deze volgende secties vindt u een overzicht van alle verschillende hulpprogramma's voor het lezen en schrijven van ruimtelijke gegevens met behulp van de ruimtelijke IO-module.
Ruimtelijke gegevens lezen
De atlas.io.read
functie is de belangrijkste functie die wordt gebruikt voor het lezen van algemene indelingen voor ruimtelijke gegevens, zoals KML, GPX, GeoRSS, GeoJSON en CSV-bestanden met ruimtelijke gegevens. Deze functie kan ook gecomprimeerde versies van deze indelingen lezen, als een zip-bestand of een KMZ-bestand. De KMZ-bestandsindeling is een gecomprimeerde versie van KML die ook assets zoals installatiekopieën kan bevatten. De leesfunctie kan ook een URL aannemen die verwijst naar een bestand in een van deze indelingen. URL's moeten worden gehost op een CORS-eindpunt of een proxyservice moet worden opgegeven in de leesopties. De proxyservice wordt gebruikt om resources te laden op domeinen die niet zijn ingeschakeld voor CORS. De leesfunctie retourneert een belofte om de afbeeldingspictogrammen toe te voegen aan de kaart en verwerkt gegevens asynchroon om de impact op de UI-thread te minimaliseren.
Wanneer u een gecomprimeerd bestand leest, hetzij als een zip- of KMZ, wordt na uitgepakt naar het eerste geldige bestand gezocht. Bijvoorbeeld doc.kml of een bestand met een andere geldige extensie, zoals: .kml, .xml, geojson, .json, .csv, .tsv of .txt. Vervolgens worden afbeeldingen waarnaar wordt verwezen in KML- en GeoRSS-bestanden vooraf geladen om ervoor te zorgen dat ze toegankelijk zijn. Niet-toegankelijke afbeeldingsgegevens kunnen een alternatieve terugvalafbeelding laden of verwijderen uit de stijlen. Afbeeldingen die zijn geëxtraheerd uit KMZ-bestanden, worden geconverteerd naar gegevens-URI's.
Het resultaat van de leesfunctie is een SpatialDataSet
object. Dit object breidt de klasse GeoJSON FeatureCollection uit. Het kan eenvoudig worden doorgegeven aan een DataSource
as-is om de functies op een kaart weer te geven. De SpatialDataSet
functiegegevens bevatten niet alleen informatie over functies, maar kunnen ook KML-grondoverlays, verwerking van metrische gegevens en andere details bevatten, zoals wordt beschreven in de volgende tabel.
Eigenschapsnaam | Type | Description |
---|---|---|
bbox |
BoundingBox |
Begrenzingsvak van alle gegevens in de gegevensset. |
features |
Feature[] |
GeoJSON-functies binnen de gegevensset. |
groundOverlays |
(atlas.layer.ImageLayer | atlas.layers.OgcMapLayer)[] |
Een matrix van KML GroundOverlays. |
icons |
Recordtekenreeks<, tekenreeks> | Een set pictogram-URL's. Sleutel = pictogramnaam, Waarde = URL. |
properties | willekeurige | Eigenschapsinformatie op documentniveau van een ruimtelijke gegevensset. |
stats |
SpatialDataSetStats |
Statistieken over de inhoud en verwerkingstijd van een ruimtelijke gegevensset. |
type |
'FeatureCollection' |
Alleen-lezen GeoJSON-typewaarde. |
Voorbeelden van het lezen van ruimtelijke gegevens
In het voorbeeld ruimtelijke gegevens laden ziet u hoe u een set ruimtelijke gegevens leest en weergeeft op de kaart met behulp van de SimpleDataLayer
klasse. De code maakt gebruik van een GPX-bestand waarnaar wordt verwezen door een URL. Zie Broncode voor ruimtelijke gegevens laden voor de broncode van dit voorbeeld.
In de volgende codedemo ziet u hoe u KML of KMZ kunt lezen en laden op de kaart. KML kan grondoverlays bevatten, die zich in de vorm van een ImageLayer
of OgcMapLayer
. Deze overlays moeten afzonderlijk van de functies op de kaart worden toegevoegd. Als de gegevensset aangepaste pictogrammen bevat, moeten deze pictogrammen bovendien worden geladen in de toewijzingsresources voordat de functies worden geladen.
In het voorbeeld van kml laden op kaart ziet u hoe u KML- of KMZ-bestanden op de kaart laadt. Zie KML in kaartbroncode laden voor de broncode van dit voorbeeld.
U kunt desgewenst een proxyservice opgeven voor toegang tot assets voor meerdere domeinen waarvoor CORS niet is ingeschakeld. De leesfunctie probeert eerst toegang te krijgen tot bestanden in een ander domein met CORS. De eerste keer dat deze geen toegang krijgt tot een resource in een ander domein met CORS, worden er alleen meer bestanden aangevraagd als er een proxyservice wordt geleverd. De leesfunctie voegt de bestands-URL toe aan het einde van de opgegeven proxy-URL. Dit codefragment laat zien hoe u een proxyservice doorgeeft aan de leesfunctie:
//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 . . .
}
});
In het volgende codefragment ziet u hoe u een bestand met scheidingstekens leest en weergeeft op de kaart. In dit geval gebruikt de code een CSV-bestand met kolommen voor ruimtelijke gegevens. U moet een verwijzing toevoegen naar de Azure Maps Spatial IO-module.
<!-- 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>
Ruimtelijke gegevens schrijven
Er zijn twee belangrijke schrijffuncties in de ruimtelijke IO-module. De atlas.io.write
functie genereert een tekenreeks, terwijl de atlas.io.writeCompressed
functie een gecomprimeerd zip-bestand genereert. Het gecomprimeerde zip-bestand bevat een tekstbestand met de ruimtelijke gegevens erin. Beide functies retourneren een belofte om de gegevens aan het bestand toe te voegen. En ze kunnen beide een van de volgende gegevens schrijven: SpatialDataSet
, , DataSource
, ImageLayer
, OgcMapLayer
functieverzameling, functie, geometrie of een matrix van elke combinatie van deze gegevenstypen. Wanneer u een van beide functies schrijft, kunt u de gewenste bestandsindeling opgeven. Als de bestandsindeling niet is opgegeven, worden de gegevens geschreven als KML.
Het voorbeeld van opties voor het schrijven van ruimtelijke gegevens is een hulpprogramma dat de meeste schrijfopties laat zien die met de atlas.io.write
functie kunnen worden gebruikt. Zie Broncode voor het schrijven van ruimtelijke gegevens voor de broncode van dit voorbeeld.
Voorbeeld van het schrijven van ruimtelijke gegevens
Met de ruimtelijke bestanden slepen en neerzetten op kaartvoorbeeld kunt u een of meer KML-, KMZ-, GeoRSS-, GPX-, GML-, GeoJSON- of CSV-bestanden naar de kaart slepen en neerzetten. Zie Ruimtelijke bestanden slepen en neerzetten naar de broncode van de kaart voor de broncode van dit voorbeeld.
U kunt desgewenst een proxyservice opgeven voor toegang tot assets voor meerdere domeinen waarvoor CORS niet is ingeschakeld. Dit codefragment laat zien dat u een proxyservice kunt opnemen:
atlas.io.read(data, {
//Provide a proxy service
proxyService: window.location.origin + '/YourCorsEnabledProxyService.ashx?url='
}).then(
//Success
function(r) {
//some code goes here ...
}
);
Bekende tekst lezen en schrijven (WKT)
Well-Known Text (WKT) is een OGC-standaard (Open Georuimteal Consortium) voor het vertegenwoordigen van ruimtelijke geometrieën als tekst. Veel georuimtelijke systemen ondersteunen WKT, zoals Azure SQL en Azure PostgreSQL met behulp van de PostGIS-invoegtoepassing. Net als bij de meeste OGC-standaarden worden coördinaten opgemaakt als 'lengtegraad breedtegraad' om overeen te komen met de 'x y'-conventie. Een punt op lengtegraad -110 en breedtegraad 45 kan bijvoorbeeld worden geschreven met POINT(-110 45)
de WKT-indeling.
Bekende tekst kan worden gelezen met behulp van de atlas.io.ogc.WKT.read
functie en geschreven met behulp van de atlas.io.ogc.WKT.write
functie.
Voorbeelden van het lezen en schrijven van bekende tekst (WKT)
In het voorbeeld Van bekende leestekst ziet u hoe u de bekende tekenreeks POINT(-122.34009 47.60995)
leest en weergeeft op de kaart met behulp van een bellenlaag. Zie Broncode voor bekende tekst lezen voor de broncode van dit voorbeeld.
In het voorbeeld Well Known Text lezen en schrijven ziet u hoe u WKT-tekenreeksen (Well Known Text) kunt lezen en schrijven als GeoJSON. Zie De broncode van dit voorbeeld lezen en schrijven naar de broncode van bekende tekst.
GML lezen en schrijven
GML is een ruimtelijke XML-bestandsspecificatie die vaak wordt gebruikt als extensie voor andere XML-specificaties. GeoJSON-gegevens kunnen worden geschreven als XML met GML-tags met behulp van de atlas.io.core.GmlWriter.write
functie. De XML die GML bevat, kan worden gelezen met behulp van de atlas.io.core.GmlReader.read
functie. De leesfunctie heeft twee opties:
- De
isAxisOrderLonLat
optie: de asvolgorde van coördinaten 'breedtegraad, lengtegraad' of 'lengtegraad, breedtegraad' kan variëren tussen gegevenssets en is niet altijd goed gedefinieerd. Standaard leest de GML-lezer de coördinaatgegevens als 'breedtegraad, lengtegraad', maar als u deze optie instelt alstrue
'lengtegraad, breedtegraad'. - De
propertyTypes
optie: deze optie is een opzoektabel met sleutelwaarden waarbij de sleutel de naam is van een eigenschap in de gegevensset. De waarde is het objecttype waarnaar de waarde moet worden omgezet bij het parseren. De ondersteunde typewaarden zijn:string
,number
,boolean
endate
. Als een eigenschap zich niet in de opzoektabel bevindt of het type niet is gedefinieerd, wordt de eigenschap geparseerd als een tekenreeks.
De atlas.io.read
functie wordt standaard ingesteld op de atlas.io.core.GmlReader.read
functie wanneer wordt gedetecteerd dat de invoergegevens XML zijn, maar de gegevens niet een van de andere ruimtelijke XML-indelingen ondersteunen.
De GmlReader
coördinaten parseren die een van de volgende SRID's hebben:
- EPSG:4326 (voorkeur)
- EPSG:4269, EPSG:4283, EPSG:4258, EPSG:4308, EPSG:4230, EPSG:4272, EPSG:4271, EPSG:4267, EPSG:4608, EPSG:4674 mogelijk met een kleine foutmarge.
- EPSG:3857, EPSG:102100, EPSG:3785, EPSG:900913, EPSG:102113, EPSG:41001, EPSG:54004
Meer resources
Meer informatie over de klassen en methoden die in dit artikel worden gebruikt:
Verbinding maken met een WFS-service
Details van ondersteunde gegevensindeling
Volgende stappen
Zie de volgende artikelen voor meer codevoorbeelden die u aan uw kaarten kunt toevoegen: