J'ai un raster (DEM USGS en fait) et je dois le diviser en petits morceaux comme le montre l'image ci-dessous. Cela a été accompli dans ArcGIS 10.0 à l'aide de l'outil Fractionner le raster. Je voudrais une méthode FOSS pour ce faire. J'ai regardé GDAL, pensant sûrement qu'il le ferait (en quelque sorte avec gdal_translate), mais je ne trouve rien. En fin de compte, j'aimerais pouvoir prendre le raster et dire dans quelle taille (morceaux de 4KM par 4KM) je voudrais qu'il soit divisé.
18
Réponses:
gdal_translate fonctionnera en utilisant les options -srcwin ou -projwin.
Vous devrez trouver les emplacements des pixels / lignes ou les coordonnées des coins, puis parcourir les valeurs avec gdal_translate. Quelque chose comme le python rapide et sale ci-dessous fonctionnera si l'utilisation de valeurs de pixels et -srcwin vous convient, sera un peu plus de travail pour trier les coordonnées.
la source
Ma solution, basée sur celle de @wwnick, lit les dimensions du raster à partir du fichier lui-même et couvre toute l'image en réduisant les tuiles de bord si nécessaire:
la source
Il y a un script python fourni spécifiquement pour retiler les rasters, gdal_retile :
par exemple:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
la source
Pour @Aaron qui a demandé:
Légère exclusion de responsabilité
Cela utilise
gdalwarp
, même si je ne suis pas totalement convaincu qu'il y aura beaucoup de gain de performances. Jusqu'à présent, je suis lié aux E / S - l'exécution de ce script sur un grand raster le découpant en de nombreuses parties plus petites ne semble pas nécessiter beaucoup de CPU, donc je suppose que le goulot d'étranglement écrit sur le disque. Si vous prévoyez de re-projeter simultanément les tuiles ou quelque chose de similaire, cela pourrait changer. Il y a des conseils de réglage ici . Un bref jeu ne m'a apporté aucune amélioration, et le CPU n'a jamais semblé être le facteur limitant.Mise à part la mise en garde, voici un script qui servira
gdalwarp
à diviser un raster en plusieurs tuiles plus petites. Il peut y avoir une perte due à la division du sol, mais cela peut être résolu en choisissant le nombre de carreaux que vous souhaitez. Ce seran+1
oùn
est le nombre que vous divisez par pour obtenir les variablestile_width
ettile_height
.la source
Vous pouvez utiliser r.tile de GRASS GIS. r.tile génère une carte raster distincte pour chaque tuile avec des noms de carte numérotés en fonction du préfixe défini par l'utilisateur. La largeur des carreaux (colonnes) et la hauteur des carreaux (rangées) peuvent être définies.
En utilisant l' API Python grass-session, seules quelques lignes de code Python sont nécessaires pour appeler la fonctionnalité r.tile de l'extérieur, c'est-à-dire pour écrire un script autonome. En utilisant r.external et r.external.out, aucune duplication de données ne se produit également pendant l'étape de traitement de GRASS GIS.
Pseudo code:
la source