최근린 분석

경고

This tutorial is now obsolete. A new and updated version is available at 최근린 분석(QGIS3)

GIS는 객체들간의 공간관계를 분석하는데 매우 유용합니다. 그러한 분석으로 주어진 객체가 어떤 객체에 가장 가까운가를 찾는 것이 있습니다. QGIS는 **Distance Matrix**라는 하는 툴을 가지고 있는데 그러한 분석을 돕습니다. 이 예제에서는 2개의 데이터셋을 사용할 것이고 하나의 레이어의 어떤 점이 두번째 레이어의 어떤 점과 가장 가까운가를 찾을 것입니다.

과업 개요

이미 알려져 있는 주요 지진발생 위치가 주어지면 지진이 발생한 곳에서 가장 가깝게 인구가 밀집한 지역을 찾습니다.

기타 스킬

  • QGIS에서 어떻게 테이블을 결합하는지 알아봅니다. (보다 자세한 내용은 :doc:`performing_table_joins`를 보기 바랍니다.)

  • 레이어로부터 객체 서브셋을 보여주기 위해 질의생성기 :guilabel:`Query Builder`를 사용합니다.

  • 최근린 결과를 시각화하기 위해 허브선을 만드는 MMQGIS 플러그인을 사용합니다.

데이터 획득

We will use NOAA’s National Geophysical Data Center’s Significant Earthquake Database as our layer representing all major earthquakes. Download the tab-delimited earthquake data.

Natural Earth는 훌륭한 인구밀집지역 Populated Places 데이터베이스를 가지고 있습니다. 단순 데이터셋`simple (less columns) dataset <http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places_simple.zip>`_을 다운 받으십시오.

용이하게 하기 위해 두가지 데이터셋을 아래 링크로부터 바로 다운로드할 수 있습니다.

signif.txt

ne_10m_populated_places_simple.zip

Data Sources: [NCEI] [NATURALEARTH]

과정

  1. 메뉴 레이어 -> 레이어 추가 -> 구분자로 분리된 텍스트 레이어를 추가 Layer ‣ Add Layer ‣ Add Delimited Text Layer 를 열고 다운로드한 signif.txt 파일을 찾습니다.

../_images/1194.png
  1. 이 파일은 탭으로 구분된 파일 *tab-delimited file*이므로 파일포맷 :guilabel:`File format`으로 구분자정의를 체크하고 탭 :guilabel:`Tab`을 선택합니다. X필드 :guilabel:`X field`와 Y필드 :guilabel:`Y field`가 자동적으로 채워집니다. 확인 :guilabel:`OK`를 클릭합니다.

참고

QGIS에 파일이 불러들여지는 동안 몇 에러메세지를 볼 수도 있습니다. 이것들은 유효한 에러이고 파일의 몇 행은 불러들여지지 않을 것입니다. 이 예제에서는 무시할 수 있습니다.

../_images/2158.png
  1. 지진 데이터셋이 위도/경도 좌표를 가지고 있으므로 기본 좌표계인 ``EPSG: 4326``로 불러들여질 것입니다. 오른쪽 아래 구석에서 확인하십시오. 또한 인구밀집지역 레이어를 엽니다. 메뉴 레이어 -> 레이어 추가 -> 벡터레이어 추가 :menuselection:`Layer –> Add Layer –> Add Vector Layer`로 갑니다.

../_images/399.png
  1. 다운로드된 ``ne_10m_populated_places_simple.zip``파일을 찾아서 열기 :guilabel:`Open`를 누릅니다.

../_images/463.png
  1. 두 개의 데이터셋을 확대 및 탐색해 봅니다. 각각의 보라색 점은 중요한 지진이 발생한 위치를 나타내고, 각각의 파란색 점은 인구밀집지역을 나타냅니다. 지진레이어에서 각 점에 대해 인구밀집지역으로부터 가장 가까운 점을 찾는 방법이 필요합니다.

../_images/556.png
  1. 메뉴 벡터 –> 분석 도구 –> 거리행렬계산하기 :menuselection:`Vector –> Analysis Tools –> Distance Matrix`로 갑니다.

../_images/654.png
  1. 여기서 입력 점 레이어로 지진 레이어 signif``를, 대상 레이어는 인구 밀집지역인  ``ne_10m_populated_places_simple``를 선택합니다. 또한 이러한 레이어의 각각으로부터 유니크 필드를 선택할 필요가 있는데 이것이 어떻게 결과가 표현될지를 결정합니다. 분석에서 최근린점  ``1 만을 찾고자 하므로 최근린점 만을 사용 :guilabel:`Use only the nearest(k) target points`에 체크를 하고 :guilabel:`1`을 입력합니다. 결과 파일은 ``matrix.csv``을 입력하고 확인을 누릅니다. 일단 과정이 종료되면 닫기 :guilabel:`Close`를 누릅니다.

참고

알아두면 편리한 것으로 오로지 1 레이어만 가지고 분석을 수행할 수도 있습니다. 입력 및 출력 두 개의 레이어를 동시에 선택합니다. 결과는 여기서 사용했던 것 처럼 다른 레이어 대신 같은 레이어로부터 최근린이 될 것입니다.

../_images/753.png
  1. 일단 과정이 종료되면, 거리 행렬 Distance Matrix 다이알록에서 닫기 Close 단추를 누릅니다. 이제 노트패드 혹은 다른 어떤 텍스트 에디터에서 ``matrix.csv``파일을 볼 수 있습니다. QGIS는 CSV파일을 불러들일 수 있으므로 이 파일을 QGIS에 추가하고 그것을 볼 것입니다. 메뉴 레이어 -> 레이어 추가 -> 구분자로 분리된 텍스트 레이어를 추가 :menuselection:`Layer –> Add Layer –> Add Delimited Text Layer…`로 갑니다.

../_images/852.png
  1. 새롭게 만들어진 ``matrix.csv``파일을 찾습니다. 이 파일이 텍스트 컬럼이기때문에 지오메트리 정의 :guilabel:`Geometry definition`에서 지오메트리가 아님 :guilabel:`No geometry (attribute only table)`를 선택합니다. :guilabel:`OK`를 클릭합니다.

../_images/951.png
  1. 테이블로 불러들여진 CSV파일을 보게 될 것입니다. 테이블 레이어를 우측클릭하고 속성테이블열기 :guilabel:`Open Attribute Table`를 선택합니다.

../_images/1059.png
  1. 이제 결과의 내용을 볼 수 있을 겁니다. InputID 필드는 지진레이어의 필드명을 담고 있습니다. TargetID 필드는 지진발생지점으로 가장 가까운 인구밀집지역으로부터의 객체명을 포함고 있습니다. :guilabel:`Distance`필드는 2점간의 거리입니다.

참고

거리 distance*의 계산은 레이어의 좌표계를 사용한 것임을 기억해야 합니다. 여기서 거리는 원 레이어 좌표가 degree이기 때문에 *decimal degrees 단위가 될 것입니다. 거리의 단위로 미터를 원한다면 툴을 구동시키기 전에 레이어를 재투영해야 합니다.

../_images/1195.png
  1. 이것이 원래 찾던 결과와 가장 가까운 것입니다. 몇 사용자들에게 이 테이블은 충분할 것입니다. 그러나 이 결과를 테이블 결합 **Table Join**을 사용해서 원 지진레이어에 통합시킬 수 있습니다. 지진 레이어를 우측클릭하고 속성 :guilabel:`Properties`을 선택합니다.

../_images/1261.png
  1. 결합 Joins 탭으로 가서 + 버튼을 클릭하십시오.

../_images/1455.png
  1. 이 레이어의 분석 결과에서 데이터를 결합하고자 합니다. 각 레이어가 같은 값을 갖고 있는 필드는 선택할 필요가 있습니다. 조인 레이어 :guilabel:`Join layer``로써 ``matrix``를 선택하고 조인필드 :guilabel:`Join field`로 ``InputID``를 선택합니다. 대상 필드:guilabel:`Target field`는 ``I_D``가 될 것입니다. 나머지 옵션은 그대로 두고 확인 :guilabel:`OK`을 누릅니다.

../_images/1455.png
  1. 결합 :guilabel:`Joins`탭에서 결합이 나타날 것입니다. :guilabel:`OK`를 클릭하십시오.

../_images/1551.png
  1. 이제 ``signif``레이어의 속성 테이블을 오른쪽 클릭으로 열고 속성테이블열기 :guilabel:`Open Attribute Table`를 선택합니다.

../_images/1648.png
  1. 모든 지진 객체에 대해 최근린(인구밀집지역에 가장 가까운) 그리고 최근린 거리의 속성을 가지는 것을 볼 수 있을 것입니다.

../_images/1745.png
  1. 이제 이러한 결과들을 시각화 할 방법을 찾아야 합니다. 첫째, 영구 테이블 결합을 새로운 레이어로 저장하여 만들 필요가 있습니다. ``signif``레이어를 오른쪽 클릭하고 새 이름으로 저장 :guilabel:`Save As…`을 선택합니다.

../_images/1842.png
  1. 새 이름으로 저장 Save as 라벨 옆에 있는 탐색 Browse 단추를 클릭하고 출력 레이어를 ``earthquake_with_places.shp``라고 입력합니다. 저장된 파일을 지도에 추가 Add saved file to map 상자가 체크되어 있는 지 확인하고 확인 :guilabel:`OK`을 누릅니다.

../_images/1933.png
  1. 일단 새로운 레이어가 불러들여지면 signif``레이어가 보이지 않도록 있습니다. 데이터셋은 크기때문에 데이터 서브셋에 대한 시각화 분석을 있습니다. QGIS는 새로운 레이어로 내보지 않고 레이어에서 객체의 서브셋을 불러들일 있는 깔끔한 기능을 가지고 있습니다. ``earthquake_with_places 레이어를 오른쪽 클릭하고 속성 :guilabel:`Properties`을 선택합니다.

../_images/2028.png
  1. 일반 정보 General 탭에서 객체 서브셋 Feature subset 부분까지 내려갑니다. 질의생성기 :guilabel:`Query Builder`를 누릅니다.

../_images/2159.png
  1. 이 예제에서는 멕시코의 지진발생위치와 그것에 인접한 인구밀집지역을 시각화 할 것입니다. 질의생성기 Query Builder 다이알로그에서 아래의 표현식을 입력합니다.

"COUNTRY" = 'MEXICO'
../_images/2229.png
  1. 캔버스에 멕시코지역내에 해당되는 점들만 보여집니다. 인구 밀집지역 레이어에 대해서도 같은 방법으로 해보겠습니다. ne_10m_populated_places_simple 레이어를 오른쪽 클릭하고 속성 :guilabel:`Properties`을 선택합니다.

../_images/2326.png
  1. 일반 정보 General`탭의 질의생성기 :guilabel:`Query Builder 다이알로그를 엽니다. 아래의 표현식을 입력합니다.

"adm0name" = 'Mexico'
../_images/2426.png
  1. 이제 시가화를 할 준비가 되었습니다. ``MMQGIS``라는 플러그인을 사용할 것입니다. 플러그인을 찾아서 설치하십시오. 플러그인으로 어떻게 작업을 하는 가에 대한 자세한 사항은 플러그인 사용하기 를 보시기 바랍니다. 일단 플러그인이 설치되면 :menuselection:`MMQGIS –> Create –> Hub Lines`로 가십시오.

../_images/2524.png
  1. Select ne_10m_populated_places_simple as the Hub Point Layer and name as the Hub ID Attribute. Similarly, select earthquake_with_places as the Spoke Point Layer and matrix_Tar as the Spoke Hub ID Attribute. The hub lines algorithm will go through each of earthquake points and create a line that will join it to the populated place which matches the attribute we specified. Click Browse and name the Output Shapefile as earthquake_hub_lines.shp. Click OK to start the processing.

../_images/2622.png
  1. The processing may take a few minutes. You can see the progress on the bottom-left corner of the QGIS window.

../_images/2721.png
  1. 일단 분석과정이 종료되면 QGIS에 ``earthquake_hub_lines``레이어가 나타난 것을 보게될 것입니다. 각 지진발생점은 가장 가까운 인구밀집지역과 연결된 선을 갖게된 것을 볼 수 있습니다.

../_images/2820.png

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)