본문 바로가기
🌐 공간정보

[스페이스인] QGIS 실습 | 2. 투영법 정의 및 지오메트리 계산

by 일단연 2023. 6. 5.

* 본 글은 공간정보교육포털 '스페이스인'의 [ QGIS 실습 ] 강의를 듣고 정리한 글입니다.

비교적 과거의 강의이기 때문에 현재의 기술과는 차이가 있을 수 있습니다.

 

공간정보교육포털

공지사항서버 재기동(23.04.06)에 따른 공간정보 교육포털 이용 안내 2023-03-24

www.spacein.kr

 

 2. 투영법 정의 및 지오메트리 계산 

투영법 정의

1. 레이어 좌표계

  • 해당 레이어가 어떤 좌표계로 정의되는지를 설정할 수 있음
  • Layers Panel > 특정 레이어에 마우스 우클릭 > 레이어 좌표계 > 레이어 좌표계 설정 클릭 > 좌표계 선택

Layers Panel > 특정 레이어에 마우스 우클릭 > 레이어 좌표계 > 레이어 좌표계 설정 클릭
Layers Panel > 특정 레이어에 마우스 우클릭 > 레이어 좌표계 > 레이어 좌표계 설정 클릭 > 좌표계 선택

 

2. 프로젝트 좌표계

  • 사용 중인 다수의 레이어가 각각 다른 좌표계로 되어있을 때 해당 프로젝트 좌표계로 일괄 변경됨
  • 방법 1: 프로젝트 > 속성 > 좌표계 > 좌표계 변경

프로젝트 > 속성
프로젝트 > 속성 > 좌표계

  • 방법 2: 프로젝트 좌표계 변경 바로가기
    • 우측 하단의 좌표계 표시 부분을 클릭하면 바로 프로젝트 좌표계 변경 화면으로 이동됨

 

  • 프로젝트 좌표계의 핵심 기능: ‘실시간’ 좌표계 변환 활성화
    • 예시
      • 1) 레이어 좌표계 EPSG:5186(Korea 2000 / Central Belt 2010) > EPSG:4326(WGS 84)로 변경
      • 2) 모든 레이어의 좌표가 일괄로 변경되면서 형태가 달라짐

레이어 좌표계 EPSG:5186(Korea 2000 / Central Belt 2010)
레이어 좌표계 EPSG:4326(WGS 84)

 

3. 좌표계가 없는 레이어를 추가했을 때

  • 1) 상단 메뉴의 설정 > 옵션 > 좌표계와 변환 > CRS Handling
    • CRS(Coordinate Reference System: 좌표참조체계)

설정 > 옵션

  • 2) 레이어 기본 좌표계를 자주 사용하는 좌표계로 설정 > ‘기본 레이어 좌표계 사용’ 선택

설정 > 옵션 > 좌표계와 변환 > CRS Handling

  • 결과
    • 좌표계가 설정되어 있지 않은 레이어들이, 자동으로 기본 설정된 좌표계로 일괄 처리됨

좌표계가 없는 레이어를 추가하면, 자동으로 기본 설정된 좌표계로 일괄 처리됨

 

4. 투영법 재정의(레이어 재투영)

  • 좌표계 설정 vs 좌표계 변환
    • 좌표계 설정: 레이어 좌표 해석 방법을 변경
    • 좌표계 변환: 좌표값 자체를 특정 좌표계에 맞게 변경
  • 레이어 좌표계 변환
    • 벡터 > 데이터 관리 도구 > 레이어 재투영
    • 공간처리 > 툴박스 > 벡터 일반 > 레이어 재투영 - 이 방법도 같은 기능
    • 레이어 > 다른 이름으로 저장 > 특정 좌표계로 변경 > 저장이 가능
    • 투영법을 추가해놓으면 다른 작업자와 데이터를 교환할 때, 데이터를 받는 작업자도 해당 데이터의 좌표계가 무엇인지 확인할 수 있음 > 협업에 필수적
  • 1) 대상 좌표계 설정
    • 방법: 벡터 > 데이터 관리 도구 > 레이어 재투영 > 대상 좌표계 설정 > 재투영된 산출물에서 저장공간, 산출물명을 지정해 실행

상단 메뉴의 벡터 > 데이터 관리 도구 > 레이어 재투영
레이어 재투영 > 대상 좌표계 설정 > 재투영된 산출물에서 저장공간, 산출물명을 지정

  • 2) 기존 레이어의 좌표계 가져오기 (이식)
    • 좌표계가 정의된 레이어가 있는 경우 그 좌표계를 가져와 현재 레이어로 이식할 수 있음
    • 현재는 지원하지 않는 기능인 것 같음 (QGIS 메뉴에 없음)

상단 메뉴의 벡터 > 데이터 관리 도구 > 레이어 재투영 > 기존 레이어의 좌표계 가져오기 결과

 

 

오픈레이어 활용하기 (OpenLayers, QuickMapServices, TMS for Korea)

1. OpenLayers 플러그인 설치

  • OpenLayers 플러그인: 구글맵 등 글로벌 지도를 배경지도로 이용하는 기능
  • 방법: 플러그인 > 플러그인 관리 및 설치 > ‘OpenLayers Plugin’ 검색

플러그인 > 플러그인 관리 및 설치

  • OpenLayers 플러그인을 사용하려면 플러그인 > 플러그인 관리 및 설치 > 설정 > ‘Show also Experimental Plugins’ 체크
    • OpenLayers 플러그인은 사실상 deprecated 상태이기 때문에 위와 같이 처리해줘야 함

플러그인 > 플러그인 관리 및 설치 > 설정 > ‘Show also Experimental Plugins’ 체크

  • 실험적 플러그인 설치 클릭해서 설치 완료

플러그인 > 플러그인 관리 및 설치 > ‘OpenLayers Plugin’ 검색 > 실험적 플러그인 설치
OpenLayers 플러그인 레이어 목록

1-1. OpenLayers 플러그인 레이어 추가

  • 웹 > OpenLayers plugin > Google Maps > Google Streets

OpenLayers plugin > Google Maps > Google Streets

  • 위와 같이 설치했더니 파이썬에서 NotImplementedError가 발생
    • OpenLayers Plugin : Printing and rotating of Javascript API based layers is currently not supported!
  • 여러 키워드로 검색해봤지만 OpenLayers 플러그인이 이미 deprecated된 상태라 해결할 방법이 없음 (강의를 따라가려면 낮은 버전의 QGIS를 재설치해야 하지만, 과거에 머물러있을 수 없으니 OpenLayers 플러그인을 대체할 수 있는 플러그인인 QuickMapServices를 설치하기로 함)
  • 레이어에서 Google Street를 제거하면 아래의 오류 메시지는 사라짐

OpenLayers plugin > Google Maps > Google Streets > 에러 발생

 

2. QuickMapServices 플러그인 설치

  • QuickMapServices 플러그인: Bing Map, ESRI, Google Map, USGS, Openstreetmap 등의 글로벌 지도를 배경지도로 활용할 수 있게 도와주는 기능
  • 설치: 플러그인 > 플러그인 관리 및 설치 > ‘QuickMapServices’ 검색 > 플러그인 설치 버튼 클릭

플러그인 > 플러그인 관리 및 설치 > ‘QuickMapServices’ 검색 > 플러그인 설치 버튼 클릭

 

2-1. QuickMapServices 플러그인으로 각종 배경지도 사용하기

  • 웹 > QuickMapServices > Settings > More Services > Get contributed pack > Last version of contrib pack was downloaded!”

웹 > QuickMapServices > Settings
웹 > QuickMapServices 플러그인 > Settings > More Services > Get contributed pack

 

웹 > QuickMapServices 플러그인 > Settings > More Services > Get contributed pack > Last version of contrib pack was downloaded!”

  • 웹 > QuickMapServices를 누르면 각종 배경지도 서비스가 활성화된 걸 볼 수 있음

QuickMapServices 플러그인의 각종 배경지도 서비스가 활성화된 화면

 

2-2. QuickMapServices 플러그인 레이어 추가

  • 웹 > QuickMapServices > Google > Google Road

2-2. QuickMapServices 플러그인 레이어 추가 웹 > QuickMapServices > Google > Google Road

  • Google 지도 위에 다른 레이어 올리기
    • 해당 레이어 우클릭 > 레이어로 확대/축소

Google 지도 위에 다른 레이어 올리기: 해당 레이어 우클릭 > 레이어로 확대/축소
Google 지도 위에 다른 레이어 올린 화면

 

2-3. QuickMapServices 플러그인 좌표계 설정

  • 웹 지도 레이어 좌표계(예: Google Road)와 프로젝트 좌표계가 일치해야 함
  • 현재 사용하는 데이터가 타일맵(이미 특정 좌표계로 정의된 상태)에서 이미지 형태로 제작된 데이터를 사용하고 있기 때문에 웹 지도를 사용할 경우에는 반드시 레이어 좌표계를 프로젝트 좌표계에 맞춰야 함
  • 현재 타일맵(이미 특정 좌표계로 정의되어 이미지 형태로 제작된 데이터)을 사용하고 있기 때문에 웹 지도를 사용할 경우에는 반드시 레이어 좌표계가 프로젝트 좌표계와 일치되어야 함
  • 웹지도 레이어를 추가하면 자동으로 웹지도 레이어의 좌표계로 맞춰짐

 

3. TMS for Korea 플러그인 설치

  • TMS for Korea란
    • OSGeo 한국어지부 이민파 개발
    • 대한민국 웹지도(카카오, 네이버, VWorld)를 배경지도로 이용하는 기능
  • 설치: 플러그인 > 플러그인 관리 및 설치 > ‘TMS for Korea’ 검색 > 플러그인 설치 버튼 클릭

플러그인 > 플러그인 관리 및 설치 > ‘TMS for Korea’ 검색 > 플러그인 설치 버튼 클릭
웹 > TMS for Korea > TMS for Korea가 지원하는 웹지도 종류

 

3-1. TMS for Korea 플러그인 레이어 추가

  • 웹 > TMS for Korea > Kakao Maps > Kakao Hybrid

3-1. TMS for Korea 플러그인 레이어 추가 웹 > TMS for Korea > Kakao Maps > Kakao Hybrid
TMS for Korea 플러그인 레이어가 추가된 화면

 

지오메트리 컬럼 내보내기

  • 지오메트리 컬럼 내보내기: 각 도형정보가 가지고 있는 길이, 넓이와 같은 정보를 컬럼으로 내보내는 기능
  • 건물 레이어: 면 데이터 > 면적과 둘레 계산 가능
  • 담장 레이어: 선 데이터 > 길이 계산 가능

 

1. 속성 테이블을 이용해 계산한 값을 새 필드에 추가하기: 직접 계산

  • 속성 테이블에서 담장 레이어의 길이 값을 담을 필드 LENGTH를 만들고, 해당 필드에 길이를 필드값으로 삽입할 것
  • 1) 필드 추가
    • 담장 레이어의 길이를 넣을 LENGTH 필드 생성
    • 방법: 레이어 > 속성 테이블 열기 > 편집 모드 전환(속성 테이블 좌측 상단의 연필 모양 클릭 or Ctrl + E) > New field > LENGH 필드 추가

레이어 > 속성 테이블 열기 > 편집 모드 전환(Ctrl+E) > 상단에 편집용 박스가 생김
레이어 > 속성 테이블 열기 > 편집 모드 전환 > 새 필드(Ctrl+W)
레이어 > 속성 테이블 열기 > 편집 모드 전환 > 새 필드(Ctrl+W) > LENGH 필드 추가
LENGTH 필드를 추가한 화면 - 아직은 필드값이 NULL

 

  • 2) 필드 계산하기
    • 담장 레이어의 길이를 계산해 LENGTH 필드값으로 삽입
    • 방법
      • 1) 레이어 > 속성 테이블 열기 > 필드 계산기 열기(Ctrl+I(아이))
      • 2) 기존의 필드를 갱신 > 표현식 ‘$length’로 검색 후 해당 글자 더블클릭 > 출력 미리보기로 값 확인 > ‘확인’ 버튼 > ‘펀집 모드 전환’ 버튼을 눌러 저장
    • 산출 필드 길이, 정밀도를 설정해 값을 더 명확하게 받기 > 필드를 추가할 때 설정하면 됨
      • 산출 필드 길이: 해당 필드 값의 총 길이를 결정
      • 정밀도: 해당 필드 값의 소수점 자릿수를 결정
      • 방법
        • 유형을 ‘십진수(실수)’로 설정해야 길이와 정밀도를 모두 조절할 수 있음
        • 길이: 10, 정밀도: 2로 설정할 예정
        • 같은 필드 이름을 중복해서 사용할 순 없으므로 기존에 생성된 LENGTH 필드를 제거한 후, 길이와 정밀도를 설정한 LENGTH 추가한 후에 필드 계산기로 만든 값을 넣어주면 됨

레이어 > 속성 테이블 열기 > 필드 계산기 열기(Ctrl+I(아이))
레이어 > 속성 테이블 열기 > 필드 계산기 열기 > 기존의 필드를 갱신 > 표현식 ‘$length’로 검색 후 해당 글자 더블클릭 > 출력 미리보기로 값 확인

 

2. ‘벡터 도형 속성 추가’로 컬럼 만들기: 자동 계산

  • 지오메트리 도구: 속성 테이블에서 직접 명령어를 입력하는 등의 번거로운 작업이 없는, QGIS에서 제공하는 간편한 기능
  • 1) 벡터 > 도형 도구 > 도형 속성 추가 > 입력 레이어 선택 > 실행
    • 공간 처리 > 툴박스 > ‘도형 속성 추가’ 검색으로도 가능

벡터 > 도형 도구 > 도형 속성 추가
벡터 > 도형 도구 > 도형 속성 추가 > 입력 레이어 선택 > 실행
벡터 > 도형 도구 > 도형 속성 추가 > 입력 레이어 선택 > 실행 > ‘도형 속성 추가’ 알고리즘 처리

  • 결과
    • AREA(면적), PERIMETER(둘레) 필드와 필드 값이 자동으로 생성됨

 

3. 필드 재작성 (Refactor fields)

  • 필드 값을 지정한 상태에서 필드 인자(길이, 정밀도) 재조정
  • 레이어의 길이, 정밀도 확인하기
    • 특정 레이어 우클릭 > 속성 > 필드

  • 레이어의 길이, 정밀도 변경하기
    • 공간 처리 > 툴박스 > 필드 재작성(Refactor fields) 검색
    • 필드 재작성에서 소스 표현식(계산식 - 예: $length), 필드명, 유형, 길이 ,정밀도 등을 변경할 수 있음

공간 처리 > 툴박스 > 필드 재작성(Refactor fields) 검색
필드 재작성 > 소스 표현식, 필드명, 유형, 길이 ,정밀도 등을 변경

  • LENGTH 필드의 정밀도를 2 > 3로 변경한 결과

 

  • 의문점
    • 도형 속성 추가나 필드 재작성 할 때 산출물이 자꾸 새로운 레이어로 생성됨 > 이를 어떻게 해결해야 할지 방법을 찾는 중

 

 

QGIS 속성 테이블 한글 깨짐 문제 해결

QGIS 속성 테이블에서 한글이 깨지는 현상

  • 원인: 인코딩 방식이 UTF-8이 아님
  • 해결
    • 레이어 > 데이터 원본 관리자 > 벡터 > 인코딩: ms949로 설정

QGIS 속성 테이블에서 한글이 깨지는 현상 해결: 레이어 > 데이터 원본 관리자 > 벡터 > 인코딩: ms949로 설정

  • 결과

QGIS 속성 테이블에서 한글이 깨지는 현상이 해결된 화면