gdalwarp에서 정상적인 파일 크기 인플레이션?


19

여러 래스터 gdalwarp를 통해 그리드에 정렬하고 정렬 한 후 -tap출력 래스터가 원래 래스터보다 상당히 큰 것을 알았습니다. 상당히 철저한 웹 검색 으로이 Trac 문제 가 나타났습니다 .

프랭크 워머 담은 그 이유를 설명했다.

"주의 깊게 검토 할 때 gdal_translate는 TIFFWriteScanline () 인터페이스를 사용하여 GTiffDataset :: CreateCopy? () 내에서 출력 파일을 작성하기 때문에이 파일의 차이점이 있습니다. 이미지 영역을 완성하는 데 필요한 파일. 그러나 gdalwarp는 blockio 인터페이스를 통해 완전한 최종 스트립을 작성하고 파일 끝에서 떨어지는 부분까지 포함합니다. "

이 Trac 문제는 7 년이 지났지 만 그 이후로 GDAL 유틸리티의 일부 변경 사항을 알고 있습니다 gdalwarp. 위의 추론이 여전히 유효하고 내가보고있는 파일 크기 인플레이션이 "정상"인지 알고 싶습니다. 여기서 "정상"이라는 단어는 예상치 못한 또는 예상되는 것을 의미하는 것으로 여겨 질 수 있지만, 더 중요한 것은 : 효과를 완화하기 위해 수행 할 수있는 것, 즉 출력 래스터 파일 크기를 줄이는 것이 있습니까? 아래는 내가 경험하는 파일 크기 인플레이션의 표입니다.

Input File Size (bytes)     Output File Size (bytes)    Inflation
1437380431                  1698334217                   18%
1428001178                  1698334433                   19%
  41683165                   137036637                  228%

입력 TIFF 파일은 ArcGIS에서 작성되었으므로 외부 월드 파일, XML 및 DBF 파일이 있지만 파일 크기의 차이를 구성하지는 않습니다. 다음은이 gdalwarp모든 경우에 사용한 샘플 호출입니다. 실제 실행은 Python subprocess( subprocess.Popen)에 의해 처리되었습니다 .

$ gdalwarp -tap -tr 30 30 -t_srs "+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs" -co "COMPRESS=LZW" input_file.tif output_file.tif

드문 경우이지만 압축으로 인해 더 큰 파일이 만들어 지지만 LZW 압축이 없으면 효과는 같습니다. 표의 비율은 LZW 압축입니다.

답변:


30

gdalwarp이 압축을 잘 처리하지 못하는 것은 잘 알려져 있고 오래 지속되는 문제입니다 . 해결책은 압축없이 gdalwarp 한 다음 압축으로 gdal_translate하는 것입니다.

두 개의 긴 프로세스를 피하기 위해 gdalwarp를 VRT로 먼저 돌리면 정말 빠르다 -g compress_lzw 옵션으로 gdal_translate합니다.

$ gdalwarp -tap -tr 30 30 -t_srs "etc..." -of vrt input_file.tif output_file.vrt
$ gdal_translate -co compress=LZW output_file.vrt output_file.tif

GDAL 2x 를 사용하는 경우 VRT에 쓰기 /vsistdout및 파이핑 하여 입력으로 gdal_translate지정 하여이를 단일 작업으로 결합 할 수 있습니다 /vsistdin. 예를 들면 다음과 같습니다.

gdalwarp -q -t_srs EPSG:32611 -of vrt input_file.tif /vsistdout/ | gdal_translate -co compress=lzw  /vsistdin/ output_file.tif

정수 오버플로 오류를 피하기 위해 성공적으로 사용한 솔루션에 감사드립니다. 그러나 오류가 해결되는 동안 언덕 그늘에 이상한 패턴이 나타납니다. 여기에 별도의 질문을 게시했습니다. gis.stackexchange.com/questions/292632/…
Tim Autin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.