gdal_proximity로 피처까지의 거리를 계산하는 방법은 무엇입니까?


28

gdal_proximity를 사용하여 미국에서 가장 가까운 주요 강 (48 개 주)에 이르는 거리를 찾습니다. NHD + 네트워크 흐름 선을 Conus Albers (epsg : 5070)로 투영하고 스트림 순서가 5보다 큰 강을 선택했으며 래스터 화하여 강을 255로, 강을 0으로하지 않았습니다.이 정도는 괜찮지 만 거리를 찾아야합니다 50km 이내의 지역에서 가장 가까운 강에. 입력 파일은 대륙 단위로 30m 해상도이므로 매우 크지 만 변환은 간단한 gdal_proximity 명령이어야합니다.

gdal_proximity.bat -values 255 -distunits GEO -maxdist 50000 -nodata -999 infile.tif outfile.tif -co COMPRESS=DEFLATE -co BIGTIFF=YES -co TILED=YES

이것은 거의 작동하는 것처럼 보이지만 출력에서 ​​이상한 기하학적 패턴을 생성합니다 (이미지 참조). 출력에 존재하는 데이터가 올바르게 처리되었습니다. 왜 많은 양의 출력이 누락되었는지 제안 할 수 있습니까?

강에 근접

편집 : 이것이 선택적 매개 변수로 인한 것인지 테스트하기 위해이 구성에서 gdal_proximity를 다시 실행했습니다.

gdal_proximity.bat H:\data\tmp\NHDplus_network_flowline_SO6plus.tif H:/data/tmp/NHDplus_network_flowline_SO6plus_proximity.tif -values 255 -maxdist 50000 -of GTiff

본질적으로 동일한 결과를 얻었습니다.

하천에 근접, 선택적 매개 변수 없음

내 생각은 래스터 크기와 관련이있을 수 있다는 것입니다 (약 100 기가 비 압축. BigTiff의 크기에는 제한이 없지만 gdal이 할 수있는 것에 대한 제한이 있음을 알고 있습니다 효과적으로 분석?


1
tiled = YES를 끄면 어떻게됩니까? 또한 GEO에서 PIXEL로 변경하면 작동합니까? (출력이 적합하지 않을 수도 있지만 문제를 좁힐 수도 있습니다)
Steven Kay

제안 해 주셔서 감사합니다. 원래 질문에 대한 답변을 추가했습니다.
R Rhodes

infile.tif의 해상도는 무엇입니까?
shahryar

2
배치 (라인)로 GDAL을 사용하여 데이터를 읽고 문제가 데이터 자체인지 또는 QGIS가 시각화 할 수 없는지 확인할 수 있습니까? 이 문제를 찾기위한 첫 번째 단계는 공간 범위를 샘플 AOI로 줄이는 것입니다.
RutgerH

답변:


3

RAM이 소진되고 OS가 페이징 파일에 덤프 할 때 어딘가에 메모리 제한에 도달 한 것으로 의심됩니다. 프로세스 중에 시스템 리소스를 모니터링하십시오. 결과가 왜 곡선 형 스와 스에서 발생하는지 확실하지 않지만 모든 데이터를 동일한 좌표계에 투영 (저장)했는지 확인하십시오.

이 알고리즘을 돕기 위해 숫자 데이터 유형 을 살펴 보겠습니다 . 래스터 화 된 스트림 네트워크에는 이진 값만 있으면되므로 Byte래스터 데이터 형식 을 사용하여 리소스를 절약 할 수 있습니다 . 스트림의 경우 1, 배경의 경우 0을 굽습니다.

gdal_rasterize -l streams -burn 1 -tr 50 50 -a_nodata 0 -te -2339101 311625 2227004 3134200 -ot Byte -of GTiff streams.shp streams.tif

다음으로, 우리가 관심을 갖는 근접성은 50,000m 이하입니다. 적절한 데이터 유형은 부호없는 16 비트 정수 UInt16입니다. 또한 '데이터 없음'을 최대 65535로 설정하면 스트림 셀에 대해 0 값을 유지할 수 있습니다.

필요한 경우 8 비트 부호없는 정수로 내려가도 UInt8~ 200m의 근접 정밀도 를 유지할 수 있습니다 .

gdal_proximity.bat -srcband 1 -distunits GEO -values 1 -maxdist 50000 -nodata 65535 -ot UInt16 -of GTiff streams.tif proximity.tif

* 50m 셀 크기를 사용했습니다. gdal_proximity는 ~ 20GB RAM을 소비하고 내 컴퓨터에서 ~ 5 분이 걸렸습니다. RAM이 제한되어 있으면 다른 사람들이 지적한 것처럼 입력 래스터를 관리 가능한 크기로 나눕니다.

gdal_proximity 결과

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.