Eu tenho me esforçado um pouco para gerar blocos para uma imagem de alta resolução que temos. A imagem atual que temos é uma imagem muito grande (+ 20 GB), salva como um arquivo GeoTiff.
Gostaria de gerar os blocos usando o utilitário de linha de comando gdal2tiles e depois abri-los e visualizá-los em Cesium, usando o provedor de imagens TMS para fornecer os blocos. Usando gdalinfo, aqui estão alguns detalhes da imagem:
Driver: GTiff/GeoTIFF
Files: image.tif
Size is 52250, 56119
Coordinate System is:
PROJCS["WGS 84 / UTM zone 35S",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",27],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",10000000],
UNIT["meters",1],
AUTHORITY["EPSG","32735"]]
Origin = (606276.000000000000000,7197873.000000000000000)
Pixel Size = (0.500000000000000,-0.500000000000000)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_MAXSAMPLEVALUE=13165
TIFFTAG_MINSAMPLEVALUE=1
TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
TIFFTAG_SOFTWARE=ERDAS IMAGINE
TIFFTAG_XRESOLUTION=1
TIFFTAG_YRESOLUTION=1
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 606276.000, 7197873.000) ( 28d 3'21.59"E, 25d19'55.12"S)
Lower Left ( 606276.000, 7169813.500) ( 28d 3'29.55"E, 25d35' 7.17"S)
Upper Right ( 632401.000, 7197873.000) ( 28d18'55.92"E, 25d19'47.60"S)
Lower Right ( 632401.000, 7169813.500) ( 28d19' 5.85"E, 25d34'59.57"S)
Center ( 619338.500, 7183843.250) ( 28d11'13.23"E, 25d27'27.58"S)
Band 1 Block=512x512 Type=UInt16, ColorInterp=Gray
Band 2 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 3 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 4 Block=512x512 Type=UInt16, ColorInterp=Undefined
Minha primeira tentativa foi usar gdal_translate para georreferenciar a imagem e, em seguida, usar gdalwarp para alterar a projeção para EPSG: 3857, conforme exigido por Cesium (consulte a referência da API)
gdal_translate -of VRT -a_srs EPSG:4326 -gcp 606275 7197875 28.055987 -25.331974 -gcp 606275 7169814 28.058200 -25.585326 -gcp 632400.5 7197875 28.31553 -25.329876 -gcp 632400.5 7169814 28.318286 -25.583209 image.tif newImage1.vrt
gdalwarp -of VRT -t_srs EPSG:3857 newImage1.vrt newImage2.vrt
No entanto, eu recebo muitos dos seguintes erros:
ERRO 1: latitude ou longitude excedida os limites
Outro método que tentei foi usar o gdal2tiles diretamente e gerar os blocos:
gdal2tiles.py image.tif
Isso criou uma pasta com uma subpasta (rotulada 18), sendo o único nível de zoom no qual os blocos foram criados. No entanto, as imagens que recebo aqui são completamente "erradas" e "embaçadas".
Um exemplo de um dos blocos:
Alguma sugestão para gerar ladrilhos para esta imagem imagem grande de uma área específica usando gdal2tiles para que eu possa carregar e visualizar em césio?
Atualizar
Então, depois de tentar a sugestão de @ iant, usei os seguintes comandos:
gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif
Este comando funcionou perfeitamente até o final, onde recebi o seguinte erro:
ERRO 1: TIFFFillTile: erro de leitura na linha 43520, col 47104; obteve 35788250 bytes, esperados 37421449
Não tendo certeza do significado desse erro, eu o deixei por enquanto e ainda recebi uma imagem final "newImage.tif", produzida pela etapa gdalwarp. Usando isso, chamei gdal2tiles.py
gdal2tiles.py newImage.tif
Isso produziu uma pasta com subpastas 10-18 (e não apenas um nível de zoom 18 como eu obtive anteriormente). Ele também lê perfeitamente bem o Cesium, sem erros no console, mas a imagem ainda parece "errada":
Estou considerando que meu problema pode ser o que o @ user30184 sugeriu "... os dados de origem não são adequados para gdal2tiles." No entanto, até que nosso provedor possa nos fornecer algo para uso com o gdal, isso é tudo o que tenho.
Eu estava pensando em talvez remover uma das bandas para evitar que gdal interferisse na última banda como um canal alfa. Alguma sugestão?
fonte
Respostas:
Eu acho que tudo que você precisa fazer é reprojetar usando:
e depois ladrilhar:
Se o seu arquivo for muito grande, demore um pouco.
fonte
Suponho que sua imagem seja um dos produtos de 4 bandas da Airbus DS:
http://www.intelligence-airbusds.com/en/4951-which-spectral-mode-do-i-choose
O Gdal2tiles foi criado para dividir imagens visuais comuns em blocos png. Essas imagens usam 8 bits por banda e possuem uma banda (escala de cinza), 3 bandas (vermelho-verde-azul) de 4 bandas (reg-verde-azul + alfa).
Eu diria que sua pergunta é em grande parte irrelevante porque seus dados de origem não são adequados para os gdal2tiles. Você pode contornar os problemas imediatos que você tem agora, mas o resultado final ainda não será bom se você não processar novamente seus dados.
O motivo do bloco não atraente que você anexou à sua pergunta pode ser que a quarta faixa de dados é interpretada como um canal alfa.
fonte
gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tif
caso contrário (grandes compensações para evitar as áreas nodata). Abra esta pequena imagem com o QGIS e você poderá jogar rapidamente com as configurações de visualização. Meu palpite sobre o canal alfa provavelmente está errado, caso contrário, o resultado deve parecer colorido, não cinza.