선의 길이계산과 통계

경고

This tutorial is now obsolete. A new and updated version is available at 선의 길이계산과 통계(QGIS3)

QGIS는 선, 면적, 둘레 등 피처의 지오메트리에 기반한 다양한 속성을 계산할 수 있는 기본 기능을 가지고 있습니다. 이 예제에서는 각 피처의 길이는 나타내는 값을 가진 컬럼을 추가하는 **Field Calculator**를 어떻게 사용하는지 보여줄 것입니다.

작업 개요

여기서는 북아메리카의 철도 폴리라인 쉐입파일을 사용할 것이고 미국내에서의 철도 전체 철도길이를 산출해 낼 것입니다.

배워야 할 다른 기술

  • 피처를 선택하는 표현식 사용

  • 지리체계에서 투영된 좌표계(Projected Coordinate Reference System, CRS)로 레이어 재 투영.

  • 레이어에서 속성값의 통계 보기

데이터 획득

`Natural Earth <http://www.naturalearthdata.com/downloads/10m-cultural-vectors/railroads/>`_에는 공공 도메인 철도 데이터셋이 있습니다. 포털에서 `North America supplement <http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_railroads_north_america.zip>`_압축파일을 다운로드 하십시오.

For convenience, you may directly download a copy of the dataset from the link below:

ne_10m_railroads_north_america..zip

데이터 출처 [NATURALEARTH]

과정

  1. 메뉴에서 :menuselection:`Layer –> Add Vector Layer`로 가십시오.

../_images/1170.png
  1. ``ne_10m_railroads_north_america.zip``파일을 찾아서 :guilabel:`OK`를 클릭하십시오.

../_images/2140.png
  1. In the Select layers to add… dialog, choose ne_10m_railroads_north_america.shp layer.

../_images/380.png
  1. 일단 레이어가 나타나면 북미지역의 모든 철도 노선이 포함되어 있는 것을 알게될 것입니다. 이 예제에서는 미국의 철도 길이만 계산할 것이므로, 미국영역에 있는 노선만 선택을 합니다. 레이어에서 마우스 오른쪽 버튼을 클릭하고 :guilabel:`Open Attribute Table`을 선택하십시오.

../_images/448.png
  1. 레이어에는 :guilabel:`sov_a3`라는 속성이 포함되어 있습니다. 이것은 철자 3개로 이뤄진 국가 코드로 노선이 어느 영역인지를 알려주는 특별 피처입니다. 이 속성값을 이용해서 미국지역의 피처를 선택할 수 있습니다.

../_images/542.png
  1. 속성 테이블 Attribute Table`창에서 표현식을 이용한 객체선택 :guilabel:`Select features using an expression 단추를 클릭합니다.

../_images/641.png
  1. 새로 Select By Expression 다이알로그가 열릴 것입니다. 함수목록 Functions list 부분에서 필드와 값 Fields and Values 을 확장하여 sov_a3`속성을 찾으십시오. 그리고 그것을 더블클릭하면 표현식 :guilabel:`Expression`텍스트 부분 속성이 포함됩니다. `”sov_a3” = ‘USA’``라고 표현식을 완성하십시오. 선택 :guilabel:`Select`에 이어 닫기 :guilabel:`Close`를 클릭합니다.

../_images/741.png
  1. Back in the main QGIS window, you will see that all lines that fall in USA are selected and appear in yellow.

../_images/840.png
  1. 이제 선택된 것만 새로운 쉐입파일로 저장하도록 하겠습니다. ``ne_10m_railroads_north_america``레이어를 오른쪽 클릭하고 선택된 객체만 저장 :guilabel:`Save Selection As…`를 선택합니다. 최신 버전에서는 다른 이름으로 저장을 클릭한 후 옵션 중 선택된 객체만 저장을 체크해야 합니다.

../_images/941.png
  1. 탐색 :guilabel:`Browse`을 클릭하고 결과 파일명으로 ``usa_railroads.shp``를 입력합니다. 레이어의 CRS도 바꿔야 합니다. :guilabel:`CRS`에 이어서 :guilabel:`Browse`를 클릭합니다.

참고

계산을 위해 피처의 지오메트리를 사용하는 내장 기능은 레이어의 CRS의 단위를 사용합니다. EPSG:4326*와 같은 지리좌표체계(CRS)는 단위로 **degrees**를 사용합니다. 그래서 피처의 길이는 **degrees* 이고, 면적은 square degrees**인데 의미는 없습니다. 여기서 계산을 하기 위해서는 **meters 혹은 **feet**의 단위를 가진 투영좌표체계를 사용할 필요가 있습니다.

../_images/1048.png
  1. 길이를 계산해야 하므로 등거리 투영을 선택합니다. 필터 :guilabel:`Filter`의 찾기 상자에 :guilabel:`north america equ`를 입력합니다. 아래쪽 결과창에서 CRS로 :guilabel:`North_America_Equidistant_Conic EPSG:102010`을 선택하고 :guilabel:`OK`를 클릭합니다.

../_images/1171.png
  1. 새 이름으로 벡터 레이어 저장하기 Save vector layer as… 다이알로그에서 저장된 파일을 지도에 추가 :guilabel:`Add saved file to map`에 체크하고 :guilabel:`OK`를 클릭합니다.

../_images/1251.png
  1. 일단 내보내기 과정이 종료되면 새로운 usa_railroads``레이어가 QGIS에 생깁니다.  더이상 ``ne_10m_railroads_north_america 레이어가 필요하지 않으므로 레이어 박스의 체크를 해제하면 객체가 꺼지게 됩니다.

../_images/1349.png
  1. ``usa_railroads``레이어를 마우스 오른쪽 클릭하고 속성 테이블 열기 :guilabel:`Open Attribute Table`을 선택합니다.

../_images/1446.png
  1. 이제 각 피처의 폭을 가진 컬럼을 추가합니다. 편집모드전환 :guilabel:`Toggle editing`단추를 클릭하여 레이어를 편집모드로 바꿉니다. 일단 편집모드에서 필드계산기열기 :guilabel:`Open field calculator’ 단추를 클릭합니다.

../_images/1542.png
  1. 필드계산기 Field Calculator`에서 새 필드 생성 :guilabel:`Create a new field`을 체크합니다. 출력필드이름 :guilabel:`Output field name`에 **length_km**를 입력합니다. 출력 필드 유형 :guilabel:`Output field type`에 십진수 **Decimal number (real)** 를 선택합니다. 출력 정확도 :guilabel:`Precision`를 **2**로 바꿉니다. 함수목록 :guilabel:`Function list`에서, 지오메트리 :guilabel:`Geometry 하위에서 폭 :guilabel:`$length`을 찾습니다. 그것을 더블클릭하여 표현식 :guilabel:`Expression`에 추가합니다. 레이어의 CRS가 meters 단위이고 출력을 **km**로 해야하므로 ``$length / 1000``와 같이 식을 완성합니다. OK :guilabel:`OK`를 클릭합니다.

../_images/1640.png
  1. 속성테이블 Attribute Table`로 돌아가면 새로운 컬럼 :guilabel:`length_km`이 나타나게 됩니다. 편집모드전환 :guilabel:`Toggle editing 단추를 클릭하여 변경된 내용을 저장합니다.

../_images/1738.png
  1. 이제 레이어에서 각 개별 라인의 길이값을 갖게되었습니다. 이 값을 모두 더해서 손쉽게 Total 길이값을 찾게됩니다. 메뉴에서 벡터 –> 분석도구 –> 기본통계 :menuselection:`Vector –> Analysis Tools –> Basic Statistics`로 갑니다.

../_images/1835.png
  1. 입력벡터레이어 :guilabel:`Input Vector layer`로 ``usa_railroads``를 선택합니다. 대상필드 :guilabel:`Target field`로 ``length_km``를 선택하고 :guilabel:`OK`를 클릭합니다. 합계 :guilabel:`Sum`값은 계산해낸 철로의 전체 길이입니다.

참고

여기서 얻어진 답은 만약 다른 프로젝션이 선택되었다면 조금 다르게 나타날 것입니다. 연습에서 도로와 다른 선형 피처의 길이는 지표면에서 측정된 것이고 데이터셋에서 속성으로 제공된 것입니다. 이 방법은 그런 속성이 없을때 그리고 실제 선의 길이의 대략값으로서 사용됩니다.

../_images/1926.png

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