Reprojetar script em Python com GDAL

10

Estou tendo muitos problemas com a GDAL. Além de, às vezes, falta documentação, parece haver pouco suporte no Python. De qualquer forma, este é apenas um script de reprojeto em lote que segue assim:

source_file = gdal.Open(filepath.encode("ascii"))
source_wkt = source_file.GetProjectionRef()
source_srs = osr.SpatialReference()
source_srs.ImportFromWkt(source_wkt)                            

reproj_file = gdal.AutoCreateWarpedVRT(source_file, source_wkt, dest_wkt)
gdal.ReprojectImage(source_file, reproj_file, source_wkt, dest_wkt)
reproj_attributes = reproj_file.GetGeoTransform()

driver = gdal.GetDriverByName("GTiff")
dest_file = driver.CreateCopy(outputpath.encode("ascii"), reproj_file, 0)

As partes dest_srs e des_wkt não estão definidas neste pedaço de código, mas estão em algum lugar fora do loop (já que precisam ser definidas apenas uma vez). Parece funcionar uma vez, posso obter um tif bonito e, em seguida, me dar um 'ERRO 6 WriteBlock () não suportado') e falhas no python. Todos eles são GeoTIFFs criados da mesma maneira com os mesmos dados básicos (apenas em momentos diferentes).

Também devido à natureza da reprojeção (do GCS para o PCS), o AutoCreateWarpedVRT tende a criar muito espaço em branco, mas fornece um valor de 0, o que é um problema, pois esse pode ser um valor real dos dados. Existe alguma maneira de definir o valor nodata para -99?

wowohweewah
fonte
6
Presumo que você tenha uma razão para fazer isso em python, mas apenas para ter certeza: você está ciente de que o objetivo principal do utilitário gdalwarp é reprojetar rasters? por exemplo gdalwarp -t_srs '+proj=utm +zone=11 +datum=WGS84' raw_spot.tif utm11.tif. Já faz muito tempo, recursos ricos, bem testados e provavelmente mais rápidos do que uma abordagem python pura.
matt wilkie
Removendo a ordem ReprojectImage, meu computador reprojeta a imagem sem o erro.
22416 Roger Veciana

Respostas:

3

Em relação ao AutoCreateWarpedVRTespaço em branco.

Dê uma olhada neste bilhete de erro gdal .

Em particular, afirma-se lá:

Se eu adicionar essa linha no rgbwarped.vrt gerado na segunda etapa, tudo ficará bem:

<Option name="UNIFIED_SRC_NODATA">YES</Option>

Aplicativos C ++ podem definir essa opção diretamente. Os aplicativos que usam AutoCreateWarpedVRT da ligação SWIG devem adicionar essa linha ao texto do VRT produzido manualmente.

Alex Markov
fonte
Eu não tente a Optioncorreção, mas a mudança para chamar gdalwarpatravés subprocessresolveu o problema com NoData desmascarado.
precisa saber é