GIS-Daten sind grob in Raster (Bilder) und Vektoren (Punkte, Linien, Polygone) unterteilt. Diese sind oft sehr groß und das Konzept der XYZ-Kacheln existiert für eine effiziente Datenlieferung. Ich werde eine detaillierte Erklärung des Konzepts von XYZ-Kacheln weglassen, aber es ist ein Mechanismus, der große Datenmengen aufteilt und nur die erforderlichen Teile liefert. Da es sich um einen Standard handelt, ist der gesamte Globus mit Ausnahme einiger Polarregionen unabhängig von Rahmen oder Anwendung immer in dieselben Kacheln unterteilt. „Wo gehört diese Funktion zu XYZ-Kacheln?“ „Ich möchte eine Liste von XYZ-Kacheln, die den japanischen Archipel abdecken.“ Ich hatte kürzlich einen Bedarf, also das Node.js-Modul und Python Jedes Muster des Moduls wird in diesem Artikel erläutert. Die XYZ-Kacheln teilen die auf eine ebene Fläche fallende Erde nach bestimmten Regeln auf, sodass eine Berechnung anhand der Parameter möglich ist (Referenz: [Qiita - Zusammenfassung der Berechnung der Kartenkacheln](https: // qiita) .com / MALORGIS / items / 1a9114dd090e5b891bf7)).
Das Thema ist GeoJSON, das die Polygone von Hokkaido auflöst. Laut Bestätigungsseite für die Koordinaten des Nationalen Landforschungsinstituts - Kacheln sind die Kacheln einschließlich Hokkaido wie in der Abbildung unten dargestellt. (Zoomstufe 7 als Beispiel). Listen Sie die Kacheln zur Überprüfung visuell auf.
Alle Kacheln, die Hokkaido in Zoomstufe 7 enthalten
[x, y, z]
[114, 45, 7]
[116, 45, 7]
[113, 46, 7]
[114, 46, 7]
[115, 46, 7]
[116, 46, 7]
[113, 47, 7]
[114, 47, 7]
[115, 47, 7]
JavaScript Node.js module / tile-cover
GitHub - Mapbox / tile-cover License:MIT
npm install @mapbox/tile-cover
Dies ist ein Beispiel, das eine lokale GeoJSON-Datei liest und den Index aller Kacheln abruft, die die Funktion enthalten. Wie oben erwähnt, wird das Polygon von Hokkaido durch Auflösen als ein Merkmal behandelt (CRS ist EPSG: 4326, da die Fliesenbedeckung nach Breite und Länge berechnet wird).
tileindex.js
//Library Import
var fs = require('fs')
var cover = require('@mapbox/tile-cover');
//Load local GeoJSON file
var geojson_str = fs.readFileSync('./dissolved_hokkaido.geojson')
var geojson_obj = JSON.parse(geojson_str);
//use tile-cover
var limits = {
min_zoom: 7,
max_zoom: 7
};
var tile_index = []
tile_index = cover.tiles(geojson_obj.features[0].geometry, limits)
console.log(tile_index)
Führen Sie dieses Skript auf der Konsole aus und geben Sie die Kachelliste aus.
node tileindex.js
[
[ 114, 45, 7 ],
[ 116, 45, 7 ],
[ 113, 46, 7 ],
[ 114, 46, 7 ],
[ 115, 46, 7 ],
[ 116, 46, 7 ],
[ 113, 47, 7 ],
[ 114, 47, 7 ],
[ 115, 47, 7 ]
]
Alle 9 Blätter wurden ordnungsgemäß aufgelistet.
Python module / tiletanic GitHub - DigitalGlobe / tiletanic License:MIT
pip install tiletanic
Wie bei der Node.js-Ausgabe ist das Thema Hokkaido aufgelöst. Da Tiletanic jedoch die Koordinaten von Web Mercator anstelle von Längen- und Breitengraden verwendet, setzen Sie CRS auf EPSG: 3857 (CRS kann auch intern konvertiert werden). Da es jedoch einige Zeit dauert, habe ich die Daten selbst im Voraus mit QGIS konvertiert.
tileindex.py
import json
import shapely
import tiletanic
if __name__ == "__main__":
zoomlevel = 7
#Geojson lesen
geojson_dict = {}
with open('./dissolved_hokkaido_3857.geojson', 'r') as f:
geojson_dict = json.load(f)
#Die Anzahl der Features beträgt 1, da sie sich auflösen
feature = geojson_dict['features'][0]['geometry']
feature_shape = shapely.geometry.shape(feature)
#Initialisierung des Kachelschemas
tiler = tiletanic.tileschemes.WebMercator()
covering_tiles_itr = tiletanic.tilecover.cover_geometry(tiler, feature_shape, zoomlevel)
covering_tiles = []
for tile in covering_tiles_itr:
tile_xyz = [tile[0], tile[1], tile[2]]
covering_tiles.append(tile_xyz)
print(covering_tiles)
In Python ausführen
python tileindex.py
[[114, 45, 7], [113, 46, 7], [113, 47, 7], [114, 46, 7], [115, 46, 7], [114, 47, 7], [115, 47, 7], [116, 45, 7], [116, 46, 7]]
Die Ausgabereihenfolge unterscheidet sich von der Kachelabdeckung von node.js, aber der Index von 9 Kacheln wurde ordnungsgemäß ausgegeben.
GitHub - Kanahiro / tileindex-sample Der gesamte Code, einschließlich der GeoJSON-Datei, befindet sich im obigen Repository.