Más

Error de gdal_rasterize: "el intento de crear un conjunto de datos 0x0 es ilegal ..."

Error de gdal_rasterize:


Estoy tratando de usar gdal_rasterize para convertir un shapefile de polígono en un ráster, donde el valor proviene del atributo 'COVTYPE'. Intento llamar a gdal rasterize así (estoy llamando desde un script de Python, así que tengo que llamar a os.system):

os.system ("gdal_rasterize -a COVTYPE -l% s -a_nodata 999 -a_srs EPSG: 102001 -t 30 30% s% s"% (bname, inshp, outrast))

Donde bname es el nombre base del shapefile (también conocido como el nombre de la capa), inshp es 'inpath / bname.shp' y outrast es 'outpath / bname.tif'.

Y aparece el error: "ERROR 1: el intento de crear un conjunto de datos 0x0 es ilegal, los tamaños deben ser mayores que cero. No se puede crear outpath / bname.tif"

Tenía entendido que con gdal> 1.8 (estoy ejecutando gdal 1.9.2), gdal_rasterize podría crear un nuevo archivo ráster siempre que se establezca -tr (resolución de destino) o -ts (tamaño de destino) (consulte http: / /www.gdal.org/gdal_rasterize.html). Estoy configurando la resolución de destino, por lo que no veo por qué cree que estoy tratando de crear un ráster 0x0. Además, la documentación dice que si la extensión de destino no está configurada, tomará la extensión de la capa vectorial, que es lo que quiero.

Intenté llamar a gdal_rasterize fuera de Python y obtuve el mismo error. También intenté reorganizar algunas de las palabras clave y eliminar la palabra clave a_srs pensando que podría estar causando problemas (a_srs anula la proyección predeterminada para el archivo de salida), pero fue en vano.

¿Alguien tiene una idea de lo que está pasando?


Entonces, después de usar gdal_translate para reproyectar el shapefile primero, luego usarlo como entrada para gdal_rasterize, todo funcionó. Supongo que gdal no reconoció la proyección del shapefile (tampoco era nada que yo hubiera visto) y eso causó que todo fallara. Tiene sentido, pero desearía que el error planteado hubiera apuntado a eso, y podría haberme ahorrado mucho tiempo. Entonces, la solución final es:

os.system ("ogr2ogr -t_srs EPSG: 102001% s% s"% (rpshp, inshp)) # salida y luego entrada os.system ("gdal_rasterize -a COVTYPE -l% s -a_nodata 999 -tr 30 30% s% s "% (rbname, rpout, outrast)) # layername (nombre base del shp reproyectado), entrada y salida

El problema parece ser el tamaño de la característica vectorial. Las características vectoriales totales en el archivo de entrada pueden cubrir un área de menos de 1x1 píxeles cuadrados, es decir, menos de -tr 30 30, 30x30 unidades de área.

Entonces la solución puede ser

1) reduzca aún más la resolución (digamos -tr 1 1) que coincida con las extensiones del archivo de vector de entrada

O

2) Solución alternativa: coloque una característica de vector más en el archivo de entrada para que la extensión combinada del archivo de vector de entrada sea más de 1 píxel cuadrado


Ver el vídeo: Clipping Raster DEM by a Polygon in QGIS