Como cortar uma 'imagem lado a lado' de um conjunto de dados rasterizado usando GDAL?


22

Estou trabalhando em um aplicativo que precisa criar blocos (jpeg) a partir de um determinado conjunto de dados raster. Minha inclinação inicial era usar gdal2tiles.py, mas parece que seu desempenho poderia ser melhorado.

Isso me leva a fazer a seguinte pergunta: Qual seria a maneira mais rápida de cortar uma 'imagem lado a lado' de um conjunto de dados rasterizado usando GDAL? E por 'imagem lado a lado', quero dizer apenas um simples jpeg ou png.

No meu protótipo, eu uso as ligações MapServer C # MapScript para fazer o trabalho. Ou seja, eu crio um objeto de mapa, percorro todos os limites de lado a lado que preciso cortar, defino a extensão dos objetos de mapa e salve a imagem resultante. O desempenho dessa abordagem é significativamente melhor do que o do gdal2tiles.py, mas estou me perguntando se eu uso o GDAL diretamente se não posso torná-lo ainda mais rápido. Alguém pode sugerir um fluxo de trabalho semelhante com os métodos GDAL?

EDIT: Depois de mais algumas pesquisas hoje, encontrei a resposta bem na minha frente. Se você baixou o FWTools, as pastas csharp \ apps contêm várias classes para demonstrar as ligações C # GDAL. No meu caso, GDALRead.cs e GDALReadDirect.cs eram o que eu procurava.


2
@vadp, @markusn, @mapperz e todos os outros - seja descritivo. Além do link, uma ou duas frases sobre o motivo pelo qual você acha que vale a pena examinar essa ferramenta e o que diferencia as outras serão úteis. Queremos que a resposta seja útil no futuro e imediatamente. Cedo ou tarde, o rot-link apodrece e, se tudo o que temos é o URL, é difícil encontrar onde o projeto encarnou a seguir.
Matt Wilkie

4
Olá user890, você poderia postar sua solução final para a pergunta e marcá-la como fechada? Nesse caso, parece que o uso de ligações específicas do idioma deu o desempenho necessário.
scw 27/02

Não posso adicionar um comentário ao meu próprio post :( Mas o gdal_tiler.py também suporta multiprocessamento, mas de uma maneira muito bruta: simplesmente processa 'n' fontes de uma só vez. No entanto, produz algum efeito positivo :)
Vadim

Respostas:




1

Na minha empresa, escrevemos scripts python personalizados, usando gdal_warp (foi antes que soubéssemos que o gdal2tiles existia). Era mais rápido que o g2t, especialmente quando o reescrevíamos para rodar em muitos núcleos (usando o python threadpool). Também produziu ladrilhos de qualidade superior (a interpolação de lanczos no g2t parece funcionar mal, no ladrilho resultante de gdal_warp foram surpreendentes).

É necessário um pouco de esforço para escrever os scripts, você precisa calcular manualmente as caixas delimitadoras resultantes, configurar algumas opções para projeções etc.



0

Outra opção é usar o TileCache (WMS-C). Embora eu nunca tenha usado o gdal2tiles, não esperaria que o TileCache traga um desempenho aprimorado.

De qualquer forma, as seguintes estratégias podem acelerar o ladrilho:

  • Metatilingando, se estiver usando o TileCache (eu me pergunto se o gdal2tiles tem um recurso semelhante).
  • Caso os dados rasterizados sejam uma grande ortophoto, use um formato como ECW . Como esse formato apresenta descompactação parcial , usando esse formato, você pode obter um ganho significativo de desempenho.

0

O script gdal_tiler.py em http://code.google.com/p/tilers-tools pode ser uma opção útil.

Geralmente, ele mostra um desempenho muito bom em comparação com o gdal2tiles.py e deve funcionar com qualquer fonte GDAL (conjunto de dados), em particular, não requer a conversão de um conjunto de dados de origem em RGB.


-1

Gdal2tiles_parallel https://gitlab.com/GitLabRGI/erdc/geopackage-python Se o geopackage ou o MBTILES, nenhum python é necessário, feito de forma nativa com o gdal_translate.EXE. você também precisa executar o gdaladdo para adicionar mais de um nível de zoom. Eu também uso qtiles / qmetatiles para o qgis desktop. Ainda nada pode competir com o software comercial maptiler pro. Se você precisar de uma pasta de blocos, basta converter MBTILES para TMS OR XYZ com mbUtil python


O link não funciona mais
AndrewHarvey

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.