Les données SIG sont grossièrement divisées en rasters (images) et vecteurs (points, lignes, polygones). Celles-ci sont souvent de taille énorme et le concept de tuiles XYZ existe pour une livraison efficace des données. Je vais omettre une explication détaillée du concept de tuiles XYZ, mais c'est un mécanisme qui divise d'énormes données et ne fournit que les parties nécessaires. Puisqu'il s'agit d'un standard, le globe entier à l'exception d'une partie des régions polaires est toujours divisé dans la même tuile quelle que soit la structure ou l'application. "Où appartient cette fonctionnalité aux tuiles XYZ?" "Je veux une liste des tuiles XYZ qui couvrent l'archipel japonais." J'ai eu récemment un besoin, donc le module Node.js et Python Chaque modèle du module est expliqué dans cet article. Les tuiles XYZ divisent la terre larguée sur une surface plane selon certaines règles, il est donc possible de calculer en fonction des paramètres (Référence: [Qiita --Summary of map tile calcul](https: // qiita) .com / MALORGIS / items / 1a9114dd090e5b891bf7)).
Le thème est GeoJSON, qui dissout les polygones d'Hokkaido. Selon National Land Research Institute-Tile Coordinate Confirmation Page, les tuiles comprenant Hokkaido sont comme indiqué dans l'image ci-dessous. (Niveau de zoom 7 à titre d'exemple). Listez visuellement les tuiles pour vérification.
Toutes les tuiles qui incluent Hokkaido au niveau de zoom 7
[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
Il s'agit d'un exemple qui lit un fichier GeoJSON local et obtient l'index de toutes les tuiles qui contiennent la fonctionnalité. Comme mentionné ci-dessus, les polygones d'Hokkaido sont traités comme une seule entité par dissolution (CRS est EPSG: 4326 car la couverture de tuiles est calculée par latitude et longitude).
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)
Exécutez ce script sur la console et affichez la liste des vignettes.
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 ]
]
Les 9 photos ont été répertoriées correctement.
Python module / tiletanic GitHub - DigitalGlobe / tiletanic License:MIT
pip install tiletanic
Comme pour l'édition Node.js, le thème est dissous Hokkaido, mais comme tiletanic utilise les coordonnées de Web Mercator au lieu de la latitude et de la longitude, réglez CRS sur EPSG: 3857 (il est également possible de convertir CRS en interne). Cependant, cela prend du temps, j'ai donc converti les données elles-mêmes avec QGIS à l'avance).
tileindex.py
import json
import shapely
import tiletanic
if __name__ == "__main__":
zoomlevel = 7
#geojson lire
geojson_dict = {}
with open('./dissolved_hokkaido_3857.geojson', 'r') as f:
geojson_dict = json.load(f)
#Le nombre de fonctionnalités est de 1 en raison de la dissolution
feature = geojson_dict['features'][0]['geometry']
feature_shape = shapely.geometry.shape(feature)
#Initialisation du schéma de tuiles
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)
Exécuter en Python
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]]
L'ordre de sortie est différent de la couverture de tuiles node.js, mais l'index de 9 tuiles a été généré correctement.
GitHub - Kanahiro / tileindex-sample Tout le code, y compris le fichier GeoJSON, se trouve dans le référentiel ci-dessus.