He instalado GDAL usando el instalador de Osgeo. ¿Cómo puedo recortar una capa ráster con una capa vectorial mediante programación? ¿Hay alguna API de GDAL disponible que pueda ayudarme con esto? Estoy usando Python
26
No estoy seguro acerca de la API gdal, existe void* GDALWarpOptions::hCutline
en las Opciones de deformación que se hace referencia desde el API tutorial Warp , pero no hay ejemplos explícitos. ¿Estás seguro de que necesitas una respuesta programática? Las utilidades de línea de comando pueden hacerlo de forma inmediata:
ogrinfo
para determinar la extensión del archivo de forma de recortegdal_translate
para recortar las extensiones de formagdalwarp
con -cutline
parámetroLos pasos 2 y 3 son para la optimización, puede pasar con solo gdalwarp -cutline ...
.
Consulte Recorte de rásteres con GDAL utilizando polígonos de Linfinity para una solución basada en Linux, todo envuelto en una secuencia de comandos. Otro ejemplo de línea de corte se puede ver en el tutorial de Michael Corey creando sombreados para Mapnik .
Joel Lawhead de GeospatialPython tiene un ejemplo completo de python en Clip ráster usando shapefile , un tutorial bien escrito. Deberá instalar la Biblioteca de imágenes de Python (PIL) que no está incluida en Osgeo4W (para lo cual puede necesitar agregar o4w python al registro de Windows para que el programa de instalación funcione).
fuente
Parece que este tema siempre está volviendo. Yo mismo no sabía que GDAL> 1.8 es tan avanzado que ya te da un manejo justo de la línea de comandos para hacer esa tarea.
El comentario de Mike Toews es bastante útil, pero podría simplemente hacer, por ejemplo:
Puede incluir este comando dentro de un script de Python con el excelente módulo de subproceso .
Una cosa que fue realmente problemática para mí es que necesitaba proporcionar una solución mínima a ese problema, es decir, lo más simple posible y no requiere muchas dependencias externas. El uso de Python Imaging Library como en el tutorial de Joel Lawhead es bueno, pero se me ocurrió la siguiente solución: usar matrices enmascaradas de Numpy.
No sé si es mejor, pero eso era lo que sabía que (hace 3 años ...).
Originalmente, creé un área de datos válida dentro del ráster original (por ejemplo, la extensión del ráster de salida donde era igual), pero me gustó la idea de hacer que el ráster también sea más pequeño (por ejemplo, -crop_to_cutline), así que adopté
world2Pixel
de Joel Lawhead. Aquí está mi propia solución:Para obtener una descripción completa de los
class MaskRaster
métodos, consulte el github de mi proyecto .Con este código, aún necesitará usar GDAL. Sin embargo, el plan es usar Python puro en el futuro donde pueda, porque la audiencia prevista de mi software tiene dificultades con demasiadas dependencias (uso Debian para desarrollar el software, y los clientes usan Windows 7 ...).
fuente