공급자로부터받은 커스텀 이미지에서 gdal2tile을 사용하여 타일을 생성하는 방법


10

우리가 가지고있는 고해상도 이미지의 타일을 생성하기 위해 약간의 노력을 기울였습니다. 현재 가지고있는 이미지는 GeoTiff 파일로 저장된 매우 큰 (+ 20GB) 이미지입니다.큰 GTiff 이미지

gdal2tiles 명령 행 유틸리티를 사용하여 타일을 생성 한 다음 TMS 이미지 제공자를 사용하여 타일을 제공하기 위해 Cesium에서 열어서보고 싶습니다. gdalinfo를 사용하여 이미지에 대한 세부 정보는 다음과 같습니다.

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

첫 번째 시도는 gdal_translate를 사용하여 이미지를 지리 참조한 다음 gdalwarp를 사용하여 Cesium의 요구에 따라 투영을 EPSG : 3857로 변경했습니다 (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

그러나 다음과 같은 많은 오류가 발생합니다.

오류 1 : 위도 또는 경도가 제한을 초과했습니다

내가 시도한 또 다른 방법은 gdal2tiles를 직접 사용하고 타일을 생성하는 것입니다.

gdal2tiles.py image.tif

이렇게하면 하나의 하위 폴더 (18로 표시됨)가 타일이 생성 된 유일한 확대 / 축소 수준 인 폴더가 만들어졌습니다. 그러나 여기에 오는 이미지는 완전히 "잘못된"및 "흐리게"입니다.

타일 ​​중 하나의 예 :

여기에 이미지 설명을 입력하십시오

이 이미지에 타일을 생성하기위한 제안 gdal2tiles를 사용하여 특정 영역의 큰 이미지를로드하여 Cesium에서로드하고 볼 수 있습니까?

최신 정보

@iant의 제안을 시도한 후 다음 명령을 사용했습니다.

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif

이 명령은 다음과 같은 오류가 발생할 때까지 완벽하게 작동했습니다.

오류 1 : TIFFFillTile : 행 43520, col 47104에서 읽기 오류; 35788250 바이트를 얻었으며 37421449를 예상했습니다.

이 오류가 무엇을 의미하는지 잘 모르겠지만, 잠시 동안 그대로두고 gdalwarp 단계에서 생성 한 최종 이미지 "newImage.tif"를 얻었습니다. 이것을 사용하여 gdal2tiles.py라고했습니다.

gdal2tiles.py newImage.tif

이렇게하면 하위 폴더 10-18이있는 폴더가 생성되었습니다 (이전에 얻은 것처럼 하나의 확대 / 축소 수준 18이 아닙니다). 또한 콘솔 오류없이 세슘으로 완벽하게 읽지 만 이미지는 여전히 "잘못된"것처럼 보입니다.

세슘에로드 된 이미지

@ user30184가 "... source 데이터가 gdal2tiles에 적합하지 않다"고 제안한 것처럼 내 문제가 될 수 있다고 생각합니다. 그러나 제공자가 gdal과 함께 사용할 무언가를 제공 할 수있을 때까지 이것이 전부입니다.

마지막 밴드를 알파 채널로 방해하는 gdal을 피하기 위해 아마도 밴드 중 하나를 제거하는 것을 고려하고있었습니다. 어떤 제안?


이미지를 지리 참조하려는 이유는 무엇입니까? 이미 모든 CRS 정보가 있습니다.
AndreJ

답변:


7

당신이해야 할 일은 다음을 사용하여 다시 투영하는 것입니다.

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -t_srs EPSG:3857 newImage.tif image.tif

그런 다음 타일을 바꿉니다.

gdal2tiles.py newImage.tif

파일이 매우 큰 경우 시간이 걸립니다.


-z 매개 변수를 사용하여 확대 / 축소 수준을 제어 할 수 있습니다. 이미 사용해 보셨습니까? 또한 이미지에 4 개의 밴드가있어 16 비트 데이터를 처리하기 때문에 예기치 않은 결과가 발생할 수 있습니다. 일부 전처리가 먼저 필요할 수 있습니다.
user30184

귀하의 답변 @iant에 감사드립니다. 나는 이것을 시도하고 무슨 일이 일어나는지 볼 것입니다. 선택한 옵션의 의미에 대한 답을 조금 더 설명해 주시겠습니까? 설명서에 따르면 -co 옵션은 "작성 옵션을 출력 형식 드라이버로 전달합니다". tiff 파일에 더 많은 속성을 추가하고 있습니까?
노력

@ user30184 아직 시도하지 않았습니다. 확대 / 축소 수준이 어떻게되는지 어떻게 알 수 있습니까? 아니면 원하는대로 지정할 수 있습니까? 이 옵션을 생략하면 스크립트가 선택한 영역을 기준으로 확대 / 축소 수준을 결정하게 할 것이라고 생각했습니다.
노력

@ user30184는 4 밴드 이미지와 16 비트 데이터로 예기치 않은 결과를 얻을 수 있다고 언급했습니다. 왜 정확히? gdal 타일 처리에 올바른 형식이 아닙니까? 그렇다면 공급자로부터 직접 이미지를 얻은 경우 파일을 올바른 형식으로 가져 오는 단계는 무엇입니까? 즉, GDAL tiff 파일입니까? (내가 그렇게 말할 수 있다면)
노력

@iant를 제안한 것처럼 gdalwarp를 실행하면 다음과 같은 문제가 발생했습니다. >>>>>>>>>>>> 오류 1 : TIFFFillTile : 43520 행 col 47104에서 오류 읽기; 35788250 바이트를 가져 왔습니다. 37421449 오류 1 : TIFFReadEncodedTile ()이 실패했습니다. 오류 1 : pleiades_merge05m_2015-06-19.tif, 밴드 1 : X 오프셋 86에서 YReadBlock 실패, Y 오프셋 109 오류 1 : GetBlockRef가 X 블록 오프셋 86에서 실패, Y 블록 오프셋 109 >>>>>>>>>>> 이 문제를 해결하기위한 제안 사항이 있습니까?
노력

2

귀하의 이미지가 Airbus DS의 4 밴드 제품 중 일부라고 가정합니다.

http://www.intelligence-airbusds.com/en/4951-which-spectral-mode-do-i-choose

Gdal2tiles는 일반적인 시각적 이미지를 png 타일로 분할하기 위해 만들어졌습니다. 이러한 이미지는 밴드 당 8 비트를 사용하며 밴드 1 개 (회색조), 밴드 3 개 (빨강-녹색-파랑), 밴드 4 개 (정적-녹색-파랑 + 알파)가 있습니다.

소스 데이터가 gdal2tile에 적합하지 않기 때문에 귀하의 질문은 크게 관련이 없다고 말하고 싶습니다. 현재 당장 발생한 문제를 해결할 수도 있지만 데이터를 다시 처리하지 않으면 최종 결과가 여전히 좋지 않습니다.

질문에 첨부 한보기 좋지 않은 타일의 이유는 네 번째 데이터 밴드가 알파 채널로 해석되기 때문일 수 있습니다.


@ user30184에게 감사드립니다. 일부 자료를 읽었으며 비슷한 생각을했습니다. 제공 업체에 "GDAL 호환"tiff 파일을 제공하도록 요청하는 것이 가장 좋을 것으로 생각되지만 다시 연락을 드릴 때까지이 모든 것이 가능합니다. 마지막 밴드를 알파 채널로 방해하는 gdal을 피하기 위해 아마도 밴드 중 하나를 제거하는 것을 고려하고있었습니다. 어떤 제안?
노력

이미지에서 작은 부분 집합을 잘라내려면 gdal_translate을 사용하십시오 gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tif(nodata 영역을 피하기위한 큰 오프셋). QGIS로이 작은 이미지를 열면보기 설정으로 빠르게 재생할 수 있습니다. 알파 채널에 대한 나의 추측은 아마도 틀렸을 것입니다. 그렇지 않으면 결과는 회색이 아닌 화려하게 보일 것입니다.
user30184

@ user30184에게 감사합니다. 제안한대로 QGIS에서 성공적으로 열었습니다. 이 링크를 참조하십시오 : drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 이제 문제를 "디버깅"하려면 어떻게해야합니까? QGIS를 사용하여 gdalwarp 및 gdal2tile을 수행합니까?
노력
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.