Instalei o GDAL usando o instalador do Osgeo. Como cortar uma camada raster com uma camada vetorial programaticamente? Existe alguma API GDAL disponível que possa me ajudar com isso? Eu estou usando Python.
26
Não tenho certeza sobre o gdal api, há void* GDALWarpOptions::hCutline
nas Opções de distorção referenciadas no tutorial da API de distorção , mas não há exemplos explícitos. Tem certeza de que precisa de uma resposta programática? Os utilitários de linha de comando podem fazer isso imediatamente:
ogrinfo
para determinar a extensão do shapefile de recortegdal_translate
para cortar até as extensões da formagdalwarp
com -cutline
parâmetroOs passos 2 e 3 são para otimização, você pode conviver com apenas gdalwarp -cutline ...
.
Consulte Cortando rasters com GDAL usando polígonos do Linfinity para solução baseada em linux, todos agrupados em um script. Outro exemplo de linha de corte pode ser visto no tutorial de Michael Corey, criando colinas para o Mapnik .
Joel Lawhead, do GeospatialPython, tem um exemplo completo de python no Clip raster usando shapefile , um tutorial bem escrito. Você precisará instalar a Biblioteca de Imagens Python (PIL), que não está incluída no Osgeo4W (para a qual pode ser necessário adicionar o4w python ao registro do Windows para que o programa de instalação funcione).
fonte
Parece que esse assunto está sempre voltando. Eu mesmo não sabia que o GDAL> 1.8 é tão avançado que já lhe fornece um tratamento justo da linha de comando para executar essa tarefa.
O comentário de Mike Toews é bastante útil, mas você pode simplesmente fazer, por exemplo:
Você pode agrupar esse comando dentro de um script python com o excelente módulo de subprocesso .
Uma coisa realmente problemática para mim é que eu precisava fornecer uma solução mínima para esse problema, o que significa o mais simples possível e não exige muitas dependências externas. O uso da Python Imaging Library, como no tutorial de Joel Lawhead, é puro, mas eu vim com a seguinte solução: usando matrizes mascaradas Numpy.
Não sei se é melhor, mas era o que eu sabia do que (há 3 anos ...).
Originalmente, criei uma área de dados válida dentro da varredura original (por exemplo, a extensão da varredura de saída onde era a mesma), mas gostei da idéia de tornar a varredura também menor (por exemplo, -crop_to_cutline), por isso adotei
world2Pixel
de Joel Lawhead. Aqui está minha própria solução:para obter uma descrição completa dos
class MaskRaster
métodos e seus, consulte o github do meu projeto .Usando esse código, você ainda precisará usar o GDAL. No entanto, o plano é usar no futuro o Python puro, sempre que possível, porque o público-alvo do meu software tem dificuldades com muitas dependências (eu uso o Debian para desenvolver o software e os clientes usam o Windows 7 ...).
fonte