QGIS의 가중치 포인트에서 밀도 맵을 생성하는 가장 좋은 방법은 무엇입니까?


18

ArcGIS Kernel Density 도구의 기능을 반복하고 싶습니다. 어떻게해야합니까?

설치하기 쉬운 무료 오픈 소스 소프트웨어에 대한 답변제한하고 싶습니다. 즉, QGIS는 모든 플랫폼에서 GRASS와 함께 쉽게 설치되므로 QGIS + GRASS는 양호하지만 SAGA는 그렇지 않습니다 (불행히도 이상적인 도구입니다).

QGIS의 보호 지역에 걸쳐 야생 동물의 밀도 맵을 작성하려고합니다. 다음 예의 밀도 맵은 원시 그룹 수 (벡터 파일의 필드)를 사용하여 커널 밀도 (SpatialAnalyst) 도구에서 각 그리드 셀의 밀도를 가중시키는 데 사용 된 야생 동물의 관측점으로부터 ArcGIS에서 생성되었습니다. 선택한 검색 반경 및 그리드 셀 크기 :

5x5km 그리드 셀과 7.5km 반경의 커널 밀도를 갖춘 Kafue National Park의 야생 생물 밀도

밀도에 대한 이전 질문에서 GRASS v.kernel 도구를 사용하여 ArcGIS Kernel Density 도구를 모방하는 것이 제안되었지만 v.kernel은 동일한 작업을 수행하지 않습니다 . 매뉴얼을 보고 (성공적으로) 밀도 맵을 생성 한 후 v.kernel 함수는 포인트 밀도 에서만 작동하며 각 포인트에 대한 변수를 줄 수있는 기회가 없습니다 (예 : 원시 카운트) .

최신 정보

*.surf.*GRASS에는 밀도 표면을 생성하는 데 도움이되는 다양한 도구 가있는 것 같습니다.이 도구는 가중치 열 또는 z- 값을 받거나 래스터에서 수행됩니다. @underdark는 v.surf.rst를 제안했으며 'zcolumn'은 가중치 (수) 변수 일 것입니다. 그러나 도구에 특정 그리드 크기를 만들거나 특정 반경을 사용하도록 요청하는 방법을 알 수는 없습니다.

v.surf.rst 또는 다른 방법을 사용하는 방법에 대한 제안?


샘플 데이터

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0

입력 데이터를 더 자세히 설명 할 수 있습니까? 아마 v.surf.rst가 v.kernel grass.osgeo.org/gdp/html_grass64/v.surf.rst.html 보다 더 적합 할 것 입니다. 위에 표시된 그리드 셀당 하나의 카운트 값이 있습니까?
underdark

@underdark-일부 샘플 데이터가 추가되었습니다. 카운트 (코끼리의 수)가있는 점 데이터이며 그리드 셀당 둘 이상의 관측치가있을 수 있습니다. 일반적으로 ArcGIS에서 'count'는 커널 밀도 도구의 'population'필드가됩니다.
Simbamangu

내가 그것에 대해 더 많이 생각할수록 v.kernel이 귀하의 사용 사례에 적합한 선택이라고 생각하지 않습니다. 문헌을 확인 했습니까? 이 경우 어떤 방법이 적합한 지 먼저 물어보십시오.
underdark

내 주요 질문은 Arcview에서 커널 밀도의 기능을 반복하는 방법입니다. 이는 알려진 방법입니다. 당신이 맞습니다, v.kernel은 거의 확실하게 그렇게 할 수있는 도구가 아닙니다!
Simbamangu

@underdark, 감사합니다-도움이 될만한 질문을 다소 확장했습니다. v.surf.rst는 적절하게 보이지만 사용에 대한 지침을 사용할 수 있습니다.
Simbamangu

답변:


8

그 매뉴얼 페이지에 따르면, GRASS 명령 r.resamp.filter을 위해 할 점을 나타내는 데이터 래스터 는 ArcGIS가 할 것입니다 정확히 포인트 레이어 를 사용 : filter=box는 "간단한"래스터에 대한 옵션을하고 사용하는 filter=gauss다른는 ArcGIS는 커널에 대한 옵션을 선택합니다. -n널 전파를 피 하려면 플래그를 사용하십시오 .


참고 커널 밀도 추정 (일명 "열지도")입니다 하지 데이터의 보간. 위치에서 KDE 값 X는 값 "량 추정 Z 근처의 단위 면적당" X를 . (반지름 또는 "대역폭"은 "가까운"의 의미를 정량화합니다.) Z 의 값을 지도의 가능한 모든 위치에서 정의 할 필요는 없습니다. 예를 들어, Z 는 사람과 같은 존재를 나타낼 수 있으며,이 경우 KDE는 인구 밀도를 제공합니다 . Z 의 값은 맵에서 지속적으로 변할 필요도 없습니다. 보간 들어,되는 것으로Z를는 모든 위치에서 정의되며 데이터는 지정된 지점에서 의 Z 값에 대한 관측치입니다 . 보간 기는 다른 모든 지점에서 관찰되지 않은 Z 값을 예측하려고 시도합니다 . 이것은 Z 가 온도 나 압력과 같은 경우에는 의미가 있지만, Z 가 무언가의 존재를 기록하거나 데이터가 완전한 인구 조사 일 때는 일반적으로 무의미 합니다. (후자의 경우, 지역에 대한 도로 밀도 맵이 무엇을 의미하는지, 그리고 비도로 지역에 걸쳐 도로를 "보간"하는 방법을 이해할 수있는 방법을 고려하십시오.)


GRASS 툴박스 (OS X, GRASS 6.4)에 r.resamp.filter가없는 것 같습니다. 그러나 언급하기 전까지는 '열지도'가 KD와 동일하다는 것을 알지 못했습니다. 나는 그들이 전체 표면을 보간한다고 가정했습니다. QGIS의 Raster | Heatmap 도구가 KD를 수행합니까? '부패율'이란 무엇입니까?
Simbamangu 5

나는 "히트 맵"이라는 용어가 GIS에서 원래의 의미 에서 거의 모든 래스터와 유사한 맵을 일반적으로 그리고 모호하게 나타내는 것으로 채택되었다고 생각합니다 . 모든 GIS가 원래의 의미와 일치하는 기능을 제공하는지 의심합니다.
whuber

조사시 QGIS의 히트 맵 도구는 감쇠 비율을 0으로 설정하면 (반경의 가장자리에서 밀도를 0으로 설정) 아크의 KD와 비슷한 작업을 수행합니다. 몇 가지 차이점이 있습니다. 계산 된 셀 값이 25 x 더 높은 (5km 반경 / 2.5km 셀), 함수가 셀에 적용되는 방식-아크는 실제 점을 중심으로 반지름을 사용하는 반면 QGIS는 겹치는 셀을 선택합니다 그 시점에서 점점 가늘어집니다.
Simbamangu

2
일반적인 사용법에서 "히트 맵"은 많은 것을 의미하는 것 같습니다. 주변을 둘러 보면 보간 된 표면, 커널 밀도 및 부드러운 픽셀이 아닌 단순한 색상에도 적용됩니다. 원래 사용 / 이력에 관한 흥미로운 논문 – QGIS 도구에보다 정확한 용어를 사용해야 할 것 같습니다.
Simbamangu

3
@Simbamangu r.resamp.filter는 GRASS 7의 새로운 기능 이지만 OS X에 대한 월별 스냅 샷이 있습니다. 또한 히트 맵 도구는 밀도 분포 알고리즘에 대한 선택을 제시하지 않는 것 같아서 Kernel Density 또는 r.resamp.filter와 정확히 동일하지는 않습니다.
Torsti

3

SAGA의 모듈 'Kernel Density Estimation'은 당신이 찾고있는 것입니다.

QGIS에 SAGA 모듈 인터페이스를 설치하고 (메뉴 : Plugins-> Fetch Python plugins ..) 모듈을 사용하십시오. 행운을 빕니다!


SAGA를 사용하고 싶지만 OSX 10.7에서 작업 중이며 아직 성공적으로 빌드하지 못했습니다 (OSX 용 바이너리가 없음). 최근 여러 시간 동안 하나 이상의 컴파일 방법을 시도했지만 시간이 지남에 따라 빌드가 실패합니다.
Simbamangu

그런 다음 OSX 10.7에서 SAGA 컴파일에 대해 질문해야합니다. SAGA가 ArcGIS KD 도구의 유일한 합리적인 대안임을 알 수 있습니다.
블라디미르

3

GRASS GIS를 사용하여 ArcMap의 Point Density에 가까운 Kernel Density보다 훨씬 간단한 방법 :

  1. r.in.xyz지정된 래스터 해상도에서 method = sum을 사용하여 점을 래스터 맵으로 가져옵니다 (로 설정 g.region).

  2. 사용 r.neighbors(기본값) 방법 = 평균지도를 원활하게하고 검색 반경을 설정하는 옵션 크기를 사용할 수 있습니다.

(현재 GRASS에 액세스 할 수 없으므로 실제로 시도하지 않았습니다!)


v.in.xyzv.neighbors도 작동 할 수 있습니다. 매뉴얼은 어떤 속성이 사용되는지 설정하는 방법을 지정하지 않습니다 v.neighbors.
Torsti

2

v.surf.rst에 대한 추가 지침을 요청한 내용은 다음과 같습니다.

먼저 그리드 크기에 대해-플러그인-> GRASS-> 현재 GRASS 영역 편집을 사용하고 출력 해상도를 설정할 수 있습니다. v.surf.rst의 출력은 그 해상도를 갖습니다.

반경의 경우 '장력'이 매개 변수 인 것 같습니다. 나는이 알고리즘에 대한 전문가는 아니지만 매뉴얼을 읽으면 관련 비트 인 것 같습니다.

"... 높은 장력은"점들 사이의 거리를 증가시키고 "는 각 점의 영향 범위를 줄이고, 낮은 장력은"거리를 감소 시키며, 점들이 서로 더 긴 범위에 걸쳐 영향을 미칩니다. "

따라서 반경 매개 변수를 사용하는 것처럼 장력 매개 변수를 대략적으로 사용할 수 있습니다.

샘플 데이터에서 v.surf.rst의 결과는 다음과 같으며 카운트를 보간의 가중치로 사용한다는 점에서 합리적입니다.

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


1
이것에 감사합니다-도움말 페이지보다 이해하기 쉽습니다. @whuber가 위에서 언급했듯이 보간법은 이러한 종류의 포인트 샘플 데이터에 적합한 방법이 아닙니다.
Simbamangu

2

테스트하지는 않았지만 QGIS Contributors 저장소에는 'R을 사용한 홈 범위 추정'이라는 플러그인이 있습니다. 여기에는 커널 (밀도?) 계산이 포함됩니다. 작동한다면 이것이 최선의 방법이라고 생각합니다. R은 커널 밀도를 계산하는 실제 통계 방법을 수행합니다.

R을 설치했다면 플러그인을 설치하고 바로 사용할 수 있습니다.


1

qgis 외부에서 약간의 Java 프로그래밍을 허용하는 경우 간단히이 밀도 맵 빌더 라이브러리 를 사용할 수 있습니다 .

constructor을 사용 HeatMapBuilder(int w, int h, int[][] pts, int[] weights)하면 필요에 따라 각 포인트에 가중치를 부여 할 수 있습니다. 이 방법으로 출력 이미지를 검색하고 getImage()를 사용하여 디스크에 저장할 수 있습니다 ImageIO.write("mymap.png").

다음은 출력 예입니다.

opencarto 자바 라이브러리와 열지도

평활 강도와 색상 팔레트를 변경할 수 있습니다.

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