Suite

Erreur gdal_rasterize : « la tentative de création d'un ensemble de données 0x0 est illégale… »


J'essaie d'utiliser gdal_rasterize pour convertir un fichier de formes de polygones en un raster, où la valeur provient de l'attribut 'COVTYPE'. J'essaie d'appeler gdal rasterize comme ceci (j'appelle depuis un script python, je dois donc appeler os.system):

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

Où bname est le nom de base du shapefile (alias le nom de la couche), inshp est 'inpath/bname.shp' et outrast est 'outpath/bname.tif'.

Et obtenez l'erreur : "ERREUR 1 : La tentative de création d'un ensemble de données 0x0 est illégale, les tailles doivent être supérieures à zéro. Impossible de créer le chemin/bname.tif"

J'avais cru comprendre qu'avec gdal>1.8 (j'exécute gdal 1.9.2), gdal_rasterize pouvait créer un nouveau fichier raster tant que -tr (résolution cible) ou -ts (taille cible) est défini (voir http:/ /www.gdal.org/gdal_rasterize.html). Je définis la résolution cible, donc je ne vois pas pourquoi il pense que j'essaie de créer un raster 0x0. De plus, la documentation indique que si l'étendue cible n'est pas définie, elle prendra l'étendue de la couche vectorielle, ce que je veux.

J'ai essayé d'appeler gdal_rasterize en dehors de python et j'obtiens la même erreur. J'ai également essayé de réorganiser certains des mots-clés et de supprimer le mot-clé a_srs en pensant que cela pouvait causer des problèmes (a_srs remplace la projection par défaut du fichier de sortie), mais toujours en vain.

Est-ce que quelqu'un a une idée de ce qui se passe ?


Donc, après avoir utilisé gdal_translate pour reprojeter d'abord le fichier de formes, puis l'avoir utilisé comme entrée pour gdal_rasterize, tout a fonctionné. Je suppose que gdal n'a pas reconnu la projection du fichier de formes (ce n'était pas quelque chose que j'avais vu non plus) et cela a fait échouer le tout. Cela a du sens, mais j'aurais aimé que l'erreur signalée l'ait signalé et j'aurais pu gagner beaucoup de temps. La solution finale est donc :

os.system("ogr2ogr -t_srs EPSG:102001 %s %s" % (rpshp, inshp)) # sortie puis entrée os.system("gdal_rasterize -a COVTYPE -l %s -a_nodata 999 -tr 30 30 %s % s" % (rbname, rpout, outrast)) # layername (nom de base du shp reprojeté), entrée puis sortie

Le problème semble être de taille de caractéristique vectorielle. Le nombre total d'entités vectorielles dans le fichier d'entrée peut couvrir une surface inférieure à 1 x 1 pixel carré, c'est-à-dire moins de -tr 30 30, 30 x 30 unités de surface.

Donc la solution peut être

1) réduire davantage la résolution (disons -tr 1 1) correspondant à l'étendue du fichier vectoriel d'entrée

Ou alors

2) Solution de contournement - placez une autre caractéristique vectorielle dans le fichier d'entrée de sorte que l'étendue combinée du fichier vectoriel d'entrée soit supérieure à 1 pixel carré


Voir la vidéo: GDAL Tutorial #4: Rasterize and Polygonize (Octobre 2021).