É possível usar alguma API gdal para chamar gdal_translate
do código Python? Não quero dizer simplesmente executar o gdal_translate.exe no sistema de arquivos, mas chamá-lo de alguma forma no código, para que eu não precise saber o diretório exato em que o executável do gdal_translate está?
40
Respostas:
Desde o GDAL 2.1 (mais informações aqui ), os utilitários GDAL e OGR podem ser usados como funções de biblioteca. Por exemplo:
fonte
gdal.Translate()
toma são listados aqui: gdal.org/python/osgeo.gdal-module.html#TranslateOptionsVeja o Tutorial da API GDAL .
Se você deseja mais controle de saída, como redimensionamento, subconjunto, etc ... use uma VRT como entrada, é assim que o gdal_translate faz isso internamente.
fonte
Sim, você pode chamar os Utilitários GDAL de dentro do Python. Existem diferenças muito pequenas na abordagem, dependendo se o utilitário é um exe por si só ou também um trecho de código python. De qualquer forma, você precisa usar o módulo de subprocesso :
Você notará que adiciono aspas aos meus caminhos. Isso ocorre porque, no Windows, tive problemas com caminhos, especialmente com espaços ou onde um dos caracteres '\' cria outro caractere de escape acidental. Portanto, apenas preservo o caminho correto no aspec por assim dizer.
Se você estiver usando um dos utilitários python, faça o mesmo, exceto que o exe no início da cadeia de comando do subprocesso agora é "C: \ python32 \ python.exe" (ou qualquer versão que você tenha) e seu segundo elemento é o utilitário python que você deseja usar.
Obviamente, você também pode interagir com o sistema de arquivos em vez de usar constantes codificadas, mas este é apenas um exemplo.
EDIT - Generalizando para plugins
QGIS O QGIS cria / modifica várias variáveis de ambiente na inicialização. Portanto, você pode criar variáveis de caminho generalizadas para as bibliotecas / utilitários GDAL usando estas (consulte Configurações-> Opções-> Sistema) em vez dos caminhos codificados no exemplo acima.
fonte
Eu faço isso com vários comandos gdal usando os.system, que você pode usar para chamar funções, assim como na linha de comando:
Também está descrito na aula 7 aqui: http://www.gis.usu.edu/~chrisg/python/2009/
fonte
subprocess.call
é mais seguro queos.system
.gdal.Warp()
por um par de horas para obter umaPG:
fonte de dados adequadacutlineDSName
para conduzir ocutlineSQL
. (Eu sei, certo? Duas horas realmente trabalhando em algo ? O horror! </kidding>). Finalmente, funcionou e parece ser significativamente mais rápido queos.system()
ousubprocess.call()
. Está fazendo ~ 2 milhões de linhas de corte, então não saberei se é realmente mais rápido até algum momento hoje à noite ... mas está funcionando exatamente certo.Aqui está um código rápido para quem deseja salvar bandas de um TIF composto de várias bandas em arquivos individuais usando o GDAL Translate em Python.
Isso pode ser útil para processamento adicional (por exemplo, usando o Rasterio, como aqui ).
fonte