J'ai installé GDAL à l'aide du programme d'installation d'Osgeo. Comment découper un calque raster avec un calque vectoriel par programmation? Existe-t-il une API GDAL disponible qui peut m'aider avec cela? J'utilise Python.
26
Je ne suis pas sûr de l'api gdal, il y a void* GDALWarpOptions::hCutline
dans les options Warp référencées dans le tutoriel Warp API , mais pas d'exemples explicites. Êtes-vous sûr d'avoir besoin d'une réponse programmatique? Les utilitaires de ligne de commande peuvent le faire hors de la boîte:
ogrinfo
pour déterminer l'étendue du fichier de formes de découpagegdal_translate
pour couper les étendues de formegdalwarp
avec -cutline
paramètreLes étapes 2 et 3 sont pour l'optimisation, vous pouvez vous en tirer avec juste gdalwarp -cutline ...
.
Voir Couper des rasters avec GDAL en utilisant des polygones de Linfinity pour une solution basée sur Linux, le tout regroupé dans un seul script. Un autre exemple de ligne de démarcation peut être vu dans le tutoriel de Michael Corey créant des nuances pour Mapnik .
Joel Lawhead de GeospatialPython a un exemple complet de python dans Clip raster en utilisant shapefile , un tutoriel bien écrit. Vous devrez installer la bibliothèque d'images Python (PIL) qui n'est pas incluse dans Osgeo4W (pour laquelle vous devrez peut-être ajouter o4w python au registre Windows pour que le programme d'installation fonctionne).
la source
Il semble que ce sujet revient toujours. Je ne savais pas moi-même que GDAL> 1.8 est si avancé qu'il vous offre déjà une gestion équitable de la ligne de commande pour effectuer cette tâche.
Le commentaire de Mike Toews est assez utile mais vous pouvez simplement faire par exemple:
Vous pouvez envelopper cette commande dans un script python avec l'excellent module de sous-processus .
Une chose qui était vraiment problématique pour moi est que je devais fournir une solution minimale à ce problème, ce qui signifie aussi simple que possible et ne nécessite pas de nombreuses dépendances externes. L'utilisation de la bibliothèque d'imagerie Python comme dans le tutoriel de Joel Lawhead est soignée, mais j'ai trouvé la solution suivante: utiliser des tableaux masqués Numpy.
Je ne sais pas si c'est mieux, mais c'est ce que je savais à l'époque (il y a 3 ans ...).
À l'origine, j'ai créé une zone de données valide à l'intérieur du raster d'origine (par exemple, l'étendue du raster en sortie où il était le même), mais j'ai aimé l'idée de rendre le raster également plus petit (par exemple, -crop_to_cutline), j'ai donc adopté
world2Pixel
de Joel Lawhead. Voici ma propre solution:pour une description complète des
class MaskRaster
méthodes et c'est, voir le github de mon projet .En utilisant ce code, vous devrez toujours utiliser GDAL. Cependant, le plan est d'utiliser à l'avenir du pur Python où je peux, car l'audience visée de mon logiciel a des difficultés avec trop de dépendances (j'utilise Debian pour développer le logiciel, et les clients utilisent Windows 7 ...).
la source