Tengo un ráster (USGS DEM en realidad) y necesito dividirlo en trozos más pequeños como se muestra en la imagen a continuación. Eso se logró en ArcGIS 10.0 usando la herramienta Split Raster. Me gustaría un método FOSS para hacer esto. He mirado a GDAL, pensando que seguramente lo haría (de alguna manera con gdal_translate), pero no puedo encontrar nada. En última instancia, me gustaría poder tomar el ráster y decir qué tan grande (en trozos de 4KM por 4KM) me gustaría dividirlo.
18
Respuestas:
gdal_translate funcionará usando las opciones -srcwin o -projwin.
Tendría que encontrar las ubicaciones de píxeles / líneas o las coordenadas de las esquinas y luego recorrer los valores con gdal_translate. Algo así como el pitón rápido y sucio a continuación funcionará si usar valores de píxeles y -srcwin es adecuado para usted, será un poco más difícil de resolver con coordenadas.
fuente
Mi solución, basada en la de @wwnick, lee las dimensiones ráster del archivo en sí y cubre toda la imagen haciendo que los mosaicos de bordes sean más pequeños si es necesario:
fuente
Hay un script de Python incluido específicamente para retilizar rásteres, gdal_retile :
p.ej:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
fuente
Para @Aaron que preguntó:
Descargo de responsabilidad leve
Esto utiliza
gdalwarp
, aunque no estoy totalmente convencido de que habrá mucho aumento de rendimiento. Hasta ahora he estado vinculado a E / S: ejecutar este script en un gran ráster cortándolo en muchas partes más pequeñas no parece intensivo en la CPU, por lo que supongo que el cuello de botella está escribiendo en el disco. Si planea volver a proyectar simultáneamente los mosaicos o algo similar, esto podría cambiar. Hay consejos de ajuste aquí . Una breve jugada no produjo ninguna mejora para mí, y la CPU nunca pareció ser el factor limitante.Dejando de lado el descargo de responsabilidad, aquí hay un script que se usará
gdalwarp
para dividir un ráster en varios mosaicos más pequeños. Puede haber alguna pérdida debido a la división del piso, pero esto se puede solucionar eligiendo la cantidad de mosaicos que desee. Serán+1
dónden
está el número por el que divide para obtener las variablestile_width
ytile_height
.fuente
Puede usar r.tile de GRASS GIS. r.tile genera un mapa ráster separado para cada mosaico con nombres de mapas numerados basados en el prefijo definido por el usuario. Se puede definir el ancho de los mosaicos (columnas) y el alto de los mosaicos (filas).
Al utilizar la API de Python de sesión de hierba, solo se necesitan unas pocas líneas de código de Python para llamar a la funcionalidad r.tile desde el exterior, es decir, para escribir un script independiente. Al usar r.external y r.external.out tampoco se produce duplicación de datos durante el paso de procesamiento de GRASS GIS.
Pseudocódigo:
fuente