GIS

QGIS: Density Analysis 플러그인 소개 (1) Styled density map(스타일링된 히트맵)

유병혁 2023. 8. 19. 21:43

안녕하세요? 이번 글은 QGIS에서 Density Analyis 플러그인 사용법을 간략히 정리해 보겠습니다. 이 플러그인은 QGIS에 추가적인 밀도 히트맵 알고리즘을 제공하며, Geohash, H3, 스타일링된 히트맵, 그리고 폴리곤 밀도 맵을 포함합니다. 

 

Density Analysis 플러그인은 벡터 밀도 히트맵 익스플로러를 추가하여 주요 집중 지역의 핫스팟 영역을 조사할 수 있게 해줍니다. 또한 QGIS Heatmap (Kernel Density Estimation) 알고리즘을 새 버전으로 래핑하여 레이어를 자동으로 스타일링하고, 셀 크기를 레이어의 좌표계(CRS) 단위 뿐만 아니라 다양한 단위로 지정할 있도록 합니다.

 

폴리곤의 래스터 밀도 맵을 생성하는 알고리즘도 제공합니다. 그리고 QGIS 모델 내에서 사용할 수 있도록 그라데이션 스타일, 랜덤 스타일 및 래스터 임의색상 스타일을 생성하는 처리 알고리즘도 포함되어 있습니다. 다른 도구는 선택한 모든 레이어에 복사된 스타일이나 .qml 파일을 붙여넣을 수 있게 해줍니다. 

 

설치 후에는 QGIS 메뉴 바 '플러그인 > Density analysis' 아래에서 찾을 수 있으며,

툴바의 Density Analysis Toolbar에도 있으며,

공간 처리 툴박스의 'Density analysis'에서 찾을 수 있습니다.

아래는 확장된 H3 밀도 알고리즘을 보여줍니다.

이 플러그인의 여러 알고리즘은 H3(Hexagonal hierarchical geospatial indexing system, 육각형 계층적 지리공간 인덱싱 시스템)을 사용합니다. 이는 육각형 밀도 맵을 생성하기 위한 굉장히 빠른 알고리즘이지만, H3 파이썬 라이브러리를 설치해야 합니다. H3 패키지는 OSGeo4W Shell을 관리자 권한으로 실행한 다음, pip install h3 또는 파이썬 패키지를 설치하는 데 사용하는 방법을 실행하여 설치할 수 있습니다.

H3가 설치되지 않은 경우 나머지 알고리즘은 작동하지만 H3 알고리즘을 실행할 수는 없습니다. QGIS '그리드 생성' 처리 알고리즘을 사용하여 공간 인덱싱된 포인트 데이터를 처리하는 데 걸린 시간을 테스트한 결과, '폴리곤에 포함하는 포인트 개수 계산' 알고리즘을 사용하면 63.18초가 소요되었으나 H3를 사용하여 동일한 작업을 수행하는 데에는 3.79초가 소요되었습니다.

 

알고리즘의 기본 매개변수 대부분은 '플러그인 > Density analysis > Settings(Density Analysis Settings)'에서 설정할 수 있습니다.

Styled density map(스타일링된 히트맵)

주어진 포인트 피처에 대해, 이 알고리즘은 각 폴리곤 격자 셀에 발생하는 포인트의 직사각형, 다이아몬드 또는 육각형 격자 히스토그램을 생성합니다. 이 알고리즘은 QGIS '폴리곤에 포함하는 포인트 개수 계산' 알고리즘을 사용합니다. 이 알고리즘은 코어 QGIS에 완벽하게 구현되어 있으며 상용 소프트웨어에서 구현된 속도보다 훨씬 우수합니다. 속도를 최적화하려면 입력 데이터가 '공간 인덱스 생성'이 적용되었는지 확인합니다. 이 알고리즘의 장점은 폴리곤 그리드 셀의 크기를 가장 잘 제어할 수 있다는 것입니다.

 

속도가 더 중요하다면 Styled geohash density map 또는 Styled H3 density map 알고리즘을 사용합니다. 이들 모두 각 geohash 격자 셀 내의 포인트를 계산하기 위해 geohash 인덱싱을 사용하며 매우 빠릅니다. 전자는 정사각형 또는 직사각형 격자를 생성하며 H3는 육각형 그리드를 생성합니다. H3 지원을 위해서는 QGIS에 H3 라이브러리를 설치해야 합니다. geohash 밀도 맵의 단점은 고정된 해상도를 가지며 중간 값을 선택할 수 없다는 점이지만, 이것이 빠른 이유입니다.

 

여기 가축질병발생정보 예시(https://foss4g.tistory.com/1925)가 있습니다. 각 점은 고병원성 조류인플루엔자(HPAI) 발생 위치(농장소재지)를 나타냅니다.

레이어 재투영 및 공간 인덱스 생성

Density Analysis 플러그인 사용을 위한 준비 작업으로, 포인트 데이터의 레이어 좌표계를 프로젝트 좌표계와 일치시켜 주고 공간 인덱스를 만들어 줍니다. '레이어 재투영'과 '공간 인덱스 생성'을 실행해 주시면 됩니다. 다음으로 Styled density map을 실행합니다.

기본 매개변수(Basic Parameters)

다음은 알고리즘에서 사용된 기본 입력 매개변수를 보여줍니다.

Input point vector layer: 포인트 피처 레이어 중 하나를 선택합니다. 폴리곤 내 피처를 세는 것은 시간이 소요되는 과정입니다. 큰 규모의 데이터셋을 사용하는 경우, 입력 포인트 벡터 레이어가 공간 인덱스를 가지고 있는지 확인합니다. 그렇지 않으면, 처리가 매우 느릴 수 있습니다.

Grid extent: 격자 범위를 선택합니다. 범위를 선택하지 않는 경우에는 입력 포인트 벡터 레이어의 범위로 기본 설정됩니다.

Grid type: 생성되는 격자 유형입니다. 직사각형, 다이아몬드, 또는 육각형 중 하나일 수 있습니다.

Cell width(height) in measurement units: 격자 셀의 너비(높이)를 측정 단위로 나타낸 것입니다.

Measurement unit: 셀 너비와 높이에 사용되는 측정 단위입니다. 선택 가능한 옵션으로는 킬로미터(Kilometers), 미터(Meters), 마일(Miles), 야드(Yards), 피트(Feet), 해리(Nautical Miles), 그리고 도(Degrees)가 있습니다.

Select color ramp: 레이어에 적용될 QGIS 색상 램프 목록입니다. 기본값은 Settings에서 변경할 수 있습니다.
Invert color ramp: 선택한 경우, 색상 램프의 순서가 반전됩니다.

고급 매개변수(Advanced Parameters)

Minimum cell histogram count: 셀이 생성되려면 각 셀 내에 있어야 하는 최소한의 피처 수입니다. 값이 0이면 전체 그리드가 표시됩니다. 값이 1인 경우 적어도 하나의 이벤트가 셀 경계 내에 있었음을 의미합니다.

Maximum grid width or height: 이는 거대한 격자가 생성되는 것을 방지하고 사용자가 입력 매개변수를 수정할 수 있게 됩니다. 격자의 너비 또는 높이가 초과되면, 현재 설정에 따라 생성될 격자 크기와 이 격자 크기 내에 맞춰야 하는 셀 너비 또는 높이와 함께 오류 메시지가 표시됩니다. 더 조밀한 격자가 필요한 경우 언제든지 이 숫자를 늘릴 수 있습니다.

Weight field: 선택적으로 가중치 필드를 사용하여 각 포인트에 가중치를 할당할 수 있습니다. 설정된 경우, 생성된 개수는 폴리곤에 포함된 각 포인트의 가중치 필드의 합계가 됩니다.

Number of gradient colors: 사용될 그라디언트 범주의 수를 지정합니다. 이 예시에서는 값이 15입니다. 출력 레이어를 살펴 보면, 각 범주와 해당 범주 내에서 발생할 수 있는 이벤트 수가 표시됩니다.

Color ramp mode: Equal Count (Quantile), Equal Interval, Logarithmic scale, Natural Breaks (Jenks), Pretty Breaks, 또는 Standard Deviation 중 하나를 선택합니다. 기본값은 Settings에서 변경할 수 있습니다.

No feature outlines: 선택한 경우, 격자 셀 윤곽을 그리지 않습니다.

아래 그림은 각 셀 내에서 발생한 이벤트 수를 계산하고 히트맵으로 표시한 육각형 히트맵입니다. 빨간색이 더 진할 수록 해당 지역에는 더 많은 고병원성 조류인플루엔자(HPAI)가 발생한 것입니다.

이번에는 발생두수(마리) 정보에 해당하는 OCCRRNC_LSTCKCNT 필드를,  Number of gradient colors는 10을 지정해 보겠습니다.