J'écris un utilitaire simple pour recadrer des lots de fichiers raster géotiff multi-bandes dans la même zone (plus petite). En utilisant gdalwarp, je peux facilement recadrer un fichier à l'aide d'un fichier de formes de découpage à un seul polygone:
gdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
Cependant, la zone réelle sur laquelle je souhaite découper sera toujours initialement définie par un autre fichier raster géotiff, pas un fichier de formes. Ce serait bien si je pouvais utiliser l'étendue de ce raster comme fichier de découpage, mais je ne sais pas comment faire. Sans surprise, ce qui suit ne fonctionne pas (il ne génère pas d'erreur, il ne produit rien):
gdalwarp -cutline clipper.tif-crop_to_cutline input.tif output.tif
Donc, ma question est, existe-t-il un moyen de fournir un raster gdalwarp -cutline
? Sinon, existe-t-il une autre fonction gdal qui peut découper un raster en utilisant un autre raster? Si aucun de ces éléments n'est possible, existe-t-il un moyen très simple de produire un fichier de formes avec un seul polygone défini par l'étendue d'un raster?
Ce code sera enveloppé dans un script python plus étendu, donc je peux utiliser les utilitaires de ligne de commande gdal ou n'importe quelle liaison python pour gdal.
En passant, je sais que je pourrais facilement créer un fichier de formes de découpage qui couvre l'étendue de mon raster dans QGIS. Je peux finir par le faire si je ne trouve pas de solution simple, mais je finirai par utiliser cet utilitaire sur des dizaines sinon des centaines de domaines dans le cadre d'une grande analyse automatisée, donc je préférerais ne pas avoir de fastidieux étape manuelle même si elle est très simple.
gdaltindex clipper.shp clipper.tif
, suivi degdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
Pour les polygones irréguliers et en supposant que votre fichier raster de géotiff est un raster binaire, vous pouvez utiliser GDAL_Calc :
Cette requête remplira 0 où Mask.tif <= 0 et BigImage où Mask> 0. Pour ce faire, les deux rasters doivent avoir la même taille de cellule, les mêmes lignes et colonnes. Pour extraire les mêmes étendues, utilisez GDAL_Translate avec l'
-projwin ulx uly lrx lry
option (la boîte est en coordonnées projetées), mais assurez-vous que la boîte projwin ne s'étend pas sur les bords de l'un ou l'autre raster.Substituez les valeurs de la boîte projwin dérivées du masque.
la source
La solution en Python directement, sans prise de forme:
la source