Eu tenho uma varredura (USGS DEM na verdade) e preciso dividi-la em partes menores, como mostra a imagem abaixo. Isso foi realizado no ArcGIS 10.0 usando a ferramenta Split Raster. Eu gostaria de um método FOSS para fazer isso. Eu olhei para o GDAL, pensando que certamente o faria (de alguma forma com gdal_translate), mas não consigo encontrar nada. Por fim, eu gostaria de poder pegar a varredura e dizer qual o tamanho (pedaços de 4KM por 4KM) que eu gostaria que fosse dividido.
18
Respostas:
O gdal_translate funcionará usando as opções -srcwin ou -projwin.
Você precisaria apresentar os locais de pixel / linha ou coordenadas de canto e, em seguida, percorrer os valores com gdal_translate. Algo como o python rápido e sujo abaixo funcionará se o uso de valores de pixel e -srcwin for adequado para você, será um pouco mais trabalhoso para resolver as coordenadas.
fonte
Minha solução, baseada na do @wwnick, lê as dimensões de varredura do próprio arquivo e cobre toda a imagem, tornando os blocos de borda menores, se necessário:
fonte
Existe um script python incluído especificamente para rasters de reciclagem , gdal_retile :
por exemplo:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
fonte
Para @Aaron, que perguntou:
Isenção de responsabilidade
Isso usa
gdalwarp
, embora eu não esteja totalmente convencido de que haverá muito ganho de desempenho. Até agora, eu estou vinculado à E / S - executar esse script em uma grande varredura, cortando-o em muitas partes menores, não parece muito com a CPU, portanto, presumo que o gargalo esteja gravando no disco. Se você planeja reprojetar simultaneamente os blocos ou algo semelhante, isso pode mudar. Existem dicas de ajuste aqui . Uma breve jogada não resultou em nenhuma melhoria para mim e a CPU nunca pareceu ser o fator limitante.Isenção de responsabilidade, aqui está um script que será usado
gdalwarp
para dividir uma varredura em vários blocos menores. Pode haver alguma perda devido à divisão do piso, mas isso pode ser resolvido escolhendo o número de peças que você deseja. Serán+1
onden
está o número que você divide para obter as variáveistile_width
etile_height
.fonte
Você pode usar r.tile do GRASS GIS. O r.tile gera um mapa de varredura separado para cada bloco com nomes de mapas numerados com base no prefixo definido pelo usuário. A largura dos ladrilhos (colunas) e a altura dos ladrilhos (linhas) podem ser definidas.
Usando a API Python da sessão de grama, apenas algumas linhas de código Python são necessárias para chamar a funcionalidade r.tile de fora, ou seja, para escrever um script independente. Usando r.external e r.external.out também não ocorre duplicação de dados durante a etapa de processamento do GRASS GIS.
Pseudo-código:
fonte