22. GRASS GIS 통합
GRASS를 통합하면 GRASS GIS 데이터베이스 및 기능에 접근할 수 있습니다. (참고 문헌 및 웹사이트 에서 GRASS-PROJECT를 참조하세요.) 통합은 제공자와 플러그인 두 부분으로 이루어집니다. 제공자는 GRASS 래스터 및 벡터 레이어를 탐색하고 관리하고 가시화할 수 있게 해줍니다. 플러그인을 사용하면 새 GRASS 로케이션 및 맵셋을 생성하고, GRASS 영역을 변경하며, 벡터 레이어를 생성 및 편집하고, 400개가 넘는 GRASS 모듈을 통해 GRASS 2D 및 3D 데이터를 분석할 수 있습니다. 이 장에서 제공자와 플러그인의 기능을 소개하고 GRASS 데이터를 관리하고 작업하는 몇몇 예시를 제공할 것입니다.
제공자는 GRASS 6 및 7 버전을 지원하며, 플러그인도 (QGIS 2.12 버전부터) GRASS 6 및 7 버전을 지원합니다. QGIS 배포판이 GRASS 6, GRASS 7 가운데 하나를 지원하는 제공자/플러그인을 담고 있을 수도 있고, 또는 6 및 7 버전을 지원하는 제공자/플러그인을 함께 담고 있을 수도 있습니다. (바이너리 파일들이 서로 다른 파일명입니다.) 하지만 실행 시간에는 둘 중 한 버전을 지원하는 제공자/플러그인만 불러올 수 있습니다.
22.1. 예제 데이터셋
예제를 위해 QGIS 알래스카 데이터셋(예시 데이터 다운로드 참조)을 사용할 것입니다. 알래스카 데이터셋은 벡터 레이어 3 개와 래스터 표고 맵 1 개를 보유한 소용량 GRASS LOCATION
예시 데이터를 포함하고 있습니다. grassdata
라는 새 폴더를 생성한 다음, https://qgis.org/downloads/data/ 에서 QGIS 알래스카 데이터셋 qgis_sample_data.zip
파일을 다운로드해서 grassdata
폴더에 압축 해제하십시오.
GRASS 웹사이트 https://grass.osgeo.org/download/sample-data/ 에서 더 많은 GRASS LOCATION
데이터를 다운로드할 수 있습니다.
22.2. GRASS 래스터 및 벡터 레이어 불러오기
QGIS에 제공자를 불러오면, 그 아래에 GRASS 로케이션을 담고 있는 각 폴더 항목을 가지고 있는 탐색기 트리에 로케이션 항목을 GRASS 아이콘과 함께 추가합니다. grassdata
폴더를 찾아 alaska
로케이션 및 demo
맵셋을 펼치십시오.
다른 모든 레이어와 마찬가지로, GRASS 레이어 항목을 더블클릭하거나 맵 캔버스 또는 범례로 드래그&드롭하면 GRASS 래스터 및 벡터 레이어를 불러올 수 있습니다.
팁
GRASS 데이터 불러오기
GRASS 로케이션 항목을 찾을 수 없는 경우
메뉴 옵션에서 GRASS 벡터 제공자를 불러온 상태인지 확인하십시오.22.3. 드래그&드롭으로 GRASS 로케이션에 데이터 가져오기
이 절에서는 GRASS 맵셋으로 래스터 및 벡터 데이터를 가져오는 방법을 예제를 통해 설명하겠습니다.
QGIS 탐색기에서 사용자가 데이터를 가져오고 싶은 맵셋을 찾으십시오.
QGIS 탐색기에서 GRASS로 가져오고 싶은 레이어를 찾으십시오. 소스 데이터가 트리의 맵셋 위치에서 너무 멀리 떨어져 있는 경우 새 탐색기 인스턴스(Browser Panel (2))를 열 수 있다는 사실을 기억하세요.
대상 맵셋에 레이어를 드래그&드롭하십시오. 대용량 레이어인 경우 가져오기에 시간이 좀 걸릴 수도 있습니다. 가져오기를 완료할 때까지 새 레이어 항목 앞에 움직이는 아이콘이 나타날 겁니다.
래스터 데이터가 서로 다른 좌표계를 사용하는 경우, (빠른) Approximate 변형 또는 (정확한) Exact 변형을 사용해서 재투영할 수 있습니다. 소스 래스터를 가리키는 링크를 (r.external
을 이용해서) 생성한 상태이며, 소스 데이터가 동일한 좌표계를 사용하고 있고 GDAL이 지원하는 포맷인 경우, 소스 데이터의 좌표계를 사용할 것입니다. GRASS 옵션 대화창에 있는 Browser 탭에서 이 옵션들을 설정할 수 있습니다.
소스 래스터가 더 많은 밴드를 가지고 있는 경우, 각 밴드 레이어 별로 .<밴드 번호> 접미어를 붙인 새 GRASS 맵을 생성한 다음 모든 맵들의 그룹을 래스터 그룹 아이콘과 함께 생성합니다. 외부 래스터인 경우 래스터 링크 아이콘을 사용합니다.
22.4. QGIS 탐색기에서 GRASS 데이터 관리하기
맵 복사하기: 동일한 로케이션 내에 있는 맵셋들 간에 GRASS 맵을 드래그&드롭해서 복사할 수도 있습니다.
맵 삭제하기: GRASS 맵을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 Delete 액션을 선택하십시오.
맵 재명명하기: GRASS 맵을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 Rename 액션을 선택하십시오.
22.5. GRASS 옵션
GRASS Options 대화창에서 GRASS 옵션을 설정할 수도 있습니다. 해당 대화창은 탐색기에서 로케이션 또는 맵셋을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 GRASS Options 를 선택하면 열 수 있습니다.
22.6. GRASS 플러그인 시작하기
QGIS에서 GRASS 기능을 사용하려면, 플러그인 관리자를 통해 GRASS 플러그인을 선택하고 불러와야만 합니다. 메뉴를 선택하고 플러그인 관리자 대화창에서 GRASS 를 체크한 다음 OK 버튼을 클릭하십시오.
GRASS 플러그인을 시작하면 GRASS 메뉴(
)를 통해 다음 주 기능들을 제공합니다:22.7. GRASS 맵셋 열기
플러그인의 GRASS 도구를 사용하려면 먼저 GRASS 맵셋을 열어야만 합니다. (열려 있는 맵셋이 없는 경우 도구는 비활성화 상태입니다.) 탐색기에서 맵셋 항목을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 Open mapset 을 선택하면 맵셋을 열 수 있습니다.
22.8. GRASS 로케이션 및 맵셋
GRASS 데이터는 GISDBASE
라고 참조되는 디렉터리에 저장됩니다. grassdata
로 불리는 경우가 많은 이 디렉터리는 QGIS에서 GRASS 플러그인 작업을 시작하기 전에 생성해야만 합니다. 이 디렉터리 안에서, GRASS GIS 데이터는 프로젝트 별로 정리되어 LOCATION
이라고 불리는 하위 디렉터리에 저장됩니다. 각 LOCATION
은 그 좌표계, 맵 투영체 그리고 지리적 경계로 정의됩니다. 각 LOCATION
은 (LOCATION
의 하위 디렉터리인) MAPSET
을 여러 개 보유할 수 있습니다. MAPSET
은 프로젝트를 서로 다른 주제 또는 하위 영역으로 세분하는 데, 또는 팀 멤버 개인 별 작업 공간(workspace)을 제공하는 데 사용됩니다. (참고 문헌 및 웹사이트 에서 소개하고 있는 마커스 네틀러와 헬레나 미타소바가 2008년 출판한 『Open Source GIS: A GRASS GIS Approach』를 참조하세요.) GRASS 모듈로 벡터 및 래스터 레이어를 분석하려면, 일반적으로 GRASS LOCATION
으로 레이어를 가져와야 합니다. (정확한 사실은 아닙니다 ─ GRASS 모듈 r.external
및 v.external
을 사용하면 레이어를 가져오지 않고도 외부 GDAL/OGR 지원 데이터셋을 가리키는 읽기 전용 링크를 생성할 수 있습니다. 아직 GRASS 작업에 익숙하지 않은 사용자가 쓰기에는 일반적이지 않은 방법이기 때문에, 이 문서에서는 이 기능을 설명하지 않을 것입니다.)
22.9. GRASS 로케이션에 데이터 가져오기
탐색기에서 드래그&드롭으로 데이터를 쉽게 가져올 수 있는 방법은 드래그&드롭으로 GRASS 로케이션에 데이터 가져오기 를 참조하세요.
이 절에서는 QGIS 알래스카 데이터셋이 제공한 GRASS LOCATION
‘alaska’ 로 래스터 및 벡터 데이터를 전통적인 방식으로 가져오는 방법을 예제를 통해 설명하겠습니다. 따라서 QGIS 알래스카 데이터셋으로부터 (예시 데이터 다운로드 참조) 랜드커버 래스터 맵 landcover.img
와 벡터 GML 파일 lakes.gml
을 사용합니다.
QGIS를 구동하고 GRASS 플러그인을 불러온 상태인지 확인하십시오.
QGIS 알래스카 데이터셋에서
grassdata
폴더를 ─LOCATION
‘alaska’,MAPSET
‘demo’ 를 ─ GRASS 데이터베이스로 선택한 다음 OK 버튼을 누르십시오.그리고 Open GRASS tools 아이콘을 클릭하십시오. GRASS 툴박스 대화창이 열립니다.
landcover.img
래스터 맵을 가져오려면, Modules Tree 탭에서r.in.gdal
모듈을 클릭하십시오. 이 GRASS 모듈을 통해 GRASSLOCATION
으로 GDAL 지원 래스터 파일을 가져올 수 있습니다.r.in.gdal
모듈 대화창이 열릴 것입니다.QGIS 알래스카 데이터셋에서
raster
폴더를 찾아landcover.img
파일을 선택하십시오.래스터 산출물 명칭을
landcover_grass
라고 지정한 다음 Run 버튼을 클릭하십시오. Output 탭에 현재 실행중인 GRASS 명령어r.in.gdal -o input=/path/to/landcover.img output=landcover_grass
가 표시됩니다.Successfully finished 메시지가 표시되면, View Output 버튼을 클릭하십시오. 이제 GRASS로
landcover_grass
래스터 레이어를 가져와서 QGIS 캔버스에 가시화할 것입니다.lakes.gml
GML 파일을 가져오려면, Modules Tree 탭에서v.in.ogr
모듈을 클릭하십시오. 이 GRASS 모듈을 통해 GRASSLOCATION
으로 OGR 지원 벡터 파일을 가져올 수 있습니다.v.in.ogr
모듈 대화창이 열릴 것입니다.QGIS 알래스카 데이터셋에서
gml
폴더를 찾아lakes.gml
파일을 선택하십시오.벡터 산출물 명칭을
lakes_grass
라고 지정한 다음 Run 버튼을 클릭하십시오. 이 예제에서는 다른 옵션을 신경쓰지 않아도 됩니다. Output 탭에 현재 실행중인 GRASS 명령어v.in.ogr -o dsn=/path/to/lakes.gml output=lakes_grass
가 표시됩니다.Successfully finished 메시지가 표시되면, View Output 버튼을 클릭하십시오. 이제 GRASS로
lakes_grass
벡터 레이어를 가져와서 QGIS 캔버스에 가시화할 것입니다.
22.9.1. 새 GRASS 로케이션 생성하기
이 예제에서, 피트 단위를 사용하는 알버 정적도법(Alber’s Equal Area projection)으로 투영된 예시 GRASS LOCATION
‘alaska’ 를 예시 데이터로 사용합니다. 이 다음에 나오는 GRASS 관련 절, 항에서 설명하는 모든 예시 및 예제에서 이 예시 GRASS LOCATION
‘alaska’ 를 사용할 것입니다. 사용자 컴퓨터에 QGIS 예시 데이터셋을 다운로드하고 설치하는 편이 좋습니다. (예시 데이터 다운로드 를 참조하세요.)
QGIS를 구동하고 GRASS 플러그인을 불러온 상태인지 확인하십시오.
QGIS 알래스카 데이터셋에서 (예시 데이터 다운로드 참조)
alaska.shp
shapefile을 가시화하십시오. (파일에서 레이어 불러오기 를 참조하세요.)기존 GRASS 데이터베이스(GISDBASE) 폴더
grassdata
를 선택하거나, 또는 사용자 컴퓨터에서 파일 탐색기를 사용해서 새LOCATION
용 폴더를 생성한 다음 Next 버튼을 클릭하십시오.이 마법사를 통해 기존
LOCATION
안에 새MAPSET
을 생성하거나 (새 맵셋 추가하기 참조) 또는 새LOCATION
을 처음부터 생성할 수 있습니다. Create new location 옵션을 체크하십시오. (그림 22.2 를 참조하세요.)LOCATION
을 위한 명칭을 ─ 이 예제에서는 ‘alaska’ 를 ─ 입력한 다음 Next 버튼을 클릭하십시오.알버 정적도법 알래스카 (피트 단위) 투영체를 사용할 것입니다. 이 투영체가
EPSG ID 2964
라는 사실을 이미 알고 있으므로, 검색 란에 해당 문자열을 입력할 수 있습니다. (주의 사항: 또다른LOCATION
과 그 투영체에 대해 이 과정을 반복하려 하는데 ESPG ID를 기억하지 못 하는 경우, 상태 바의 우하단에 있는 CRS Status 아이콘을 클릭하십시오. (투영 작업 참조))Filter 란에
2964
를 입력해서 투영체를 선택하십시오.Next 를 클릭합니다.
기본 영역(region)을 정의하려면, 동서남북 방향으로
LOCATION
의 경계를 입력해야 합니다. 이 예제에서는 그냥 Set Current QGIS Extent 버튼을 클릭해서, 불러온alaska.shp
레이어의 범위를 GRASS 기본 영역 범위로 적용하겠습니다.Next 를 클릭합니다.
새
LOCATION
안에MAPSET
도 정의해야 합니다. (새LOCATION
을 생성하는 경우 꼭 필요한 단계입니다.) 사용자가 원하는 대로 명명할 수 있지만, 이 예제에서는 ‘demo’ 라고 하겠습니다. GRASS가PERMANENT
라고 불리는MAPSET
을 자동적으로 생성할 것입니다.PERMANENT
는 프로젝트 용 핵심 데이터, 데이터의 공간 범위 및 좌표계 정의를 저장하기 위해 고안됐습니다. (참고 문헌 및 웹사이트 에서 소개하는 Neteler, M., and Mitasova, H. (2008)을 참조하세요.)작업 내용이 정확한지 작업 요약을 확인한 다음 Finish 버튼을 클릭하십시오.
새
LOCATION
인 ‘alaska’ 와 2개의MAPSET
‘demo’ 및 ‘PERMANENT’ 가 생성됐습니다. 현재 열려 있는 작업 맵셋은 사용자가 정의한 대로 ‘demo’ 입니다.GRASS 툴바에서 비활성 상태였던 일부 도구들이 이제 활성화됐다는 사실을 주목하십시오.
작업 단계가 너무 많다고 생각할 수도 있겠지만, 사실 LOCATION
을 생성할 수 있는 매우 빠른 방법으로 그렇게 나쁘지는 않습니다. 이제 LOCATION
‘alaska’ 에 데이터를 가져올 준비가 끝났습니다. (GRASS 로케이션에 데이터 가져오기 를 참조하세요.) 아니면 QGIS 알래스카 데이터셋 예시 데이터 다운로드 에 포함된 예시 GRASS LOCATION
‘alaska’ 에 있는 기존 벡터 및 래스터 데이터를 사용해서 바로 GRASS 벡터 데이터 모델 절로 넘어갈 수도 있습니다.
22.9.2. 새 맵셋 추가하기
사용자는 본인이 생성한 GRASS MAPSET
에 대해서만 쓰기 권한을 가집니다. 즉 사용자 본인의 MAPSET
을 읽고 쓰는 것 이외에도 다른 사용자의 MAPSET
에 있는 맵을 읽을 수 있다는 뜻입니다. (다른 사용자도 사용자의 맵을 읽을 수 있습니다.) 그러나 사용자는 오직 본인이 생성한 MAPSET
에 있는 맵만을 수정하거나 제거할 수 있습니다.
모든 MAPSET
은 현재 경계 좌표값과 현재 선택한 래스터 해상도를 저장하는 WIND
파일을 포함하고 있습니다. (참고 문헌 및 웹사이트 에서 소개하는 Neteler, M., and Mitasova, H. (2008) 및 GRASS 영역 도구 를 참조하세요.)
QGIS를 구동하고 GRASS 플러그인을 불러온 상태인지 확인하십시오.
LOCATION
‘alaska’ 가 있는 GRASS 데이터베이스(GISDBASE
) 폴더grassdata
를 선택하십시오.LOCATION
‘alaska’ 에 ‘test’ 라는 심화MAPSET
을 추가하려 합니다.Next 를 클릭합니다.
이 마법사를 통해 기존
LOCATION
안에 새MAPSET
을 생성하거나 (새 맵셋 추가하기 참조) 또는 새LOCATION
을 처음부터 생성할 수 있습니다. Select location 라디오 버튼을 클릭한 다음 (그림 22.2 참조) Next 버튼을 클릭하십시오.새
MAPSET
에 대해test
라는 명칭을 입력하십시오. 마법사 대화창 하단에 기존MAPSET
및 해당 소유자의 목록이 표시됩니다.Next 버튼을 클릭해서 작업 내용이 정확한지 작업 요약을 확인한 다음 Finish 버튼을 클릭하십시오.
22.10. GRASS 벡터 데이터 모델
디지타이즈 작업 전에 “GRASS 벡터 데이터 모델”을 이해하고 있어야 합니다. 일반적으로, GRASS는 위상 벡터 모델을 이용합니다. 즉 면(area)을 닫힌 폴리곤으로 표현하는 것이 아니라 하나 이상의 경계로 표현한다는 뜻입니다. 인접한 두 면 사이의 경계를 한 번에 디지타이즈하고, 두 면이 해당 경계를 공유한다는 것입니다. 이 경계는 연결되어 빈자리 없이 닫힌 상태여야만 합니다. 면의 중심(centroid) 이 면을 정의하고, 라벨의 위치가 됩니다.
경계 및 중심 이외에도, 벡터 맵은 포인트 및 라인을 담고 있을 수 있습니다. 이 모든 도형 항목들이 벡터 하나에 혼합되어 있을 수 있으며, 하나의 GRASS 벡터 맵 안에 서로 다른 소위 ‘레이어’ 들로 표현될 것입니다. 따라서 GRASS에서는, 레이어가 벡터 또는 래스터 맵이 아니라 벡터 레이어 내부의 ‘층(level)’ 이 됩니다. 이런 개념을 주의해서 구분해야만 합니다. (다만 도형 항목들을 혼합할 수 있다고는 해도, GRASS에서조차 벡터 네트워크 분석과 같은 특별한 경우에만 사용되는 흔치 않은 상황입니다. 일반적으로, 서로 다른 도형 항목들을 서로 다른 레이어에 저장하는 편이 좋을 겁니다.)
하나의 벡터 데이터셋에 여러 ‘레이어’ 를 저장할 수 있습니다. 예를 들면, 벡터 하나 안에 평야, 삼림, 호수 등을 저장할 수 있습니다. 인접한 삼림과 호수는 동일한 경계를 공유할 수 있지만, 각각 개별 속성 테이블을 보유합니다. 또 경계에 속성을 붙일 수도 있습니다. 삼림과 호수 사이의 경계가 도로이기 때문에 도로가 고유한 속성 테이블을 보유하는 경우를 예로 들 수 있겠죠.
GRASS에서 객체의 ‘레이어’ 는 숫자로 된 ‘레이어’ 값으로 정의됩니다. 한 데이터셋(예를 들어 삼림 또는 호수를 표현하는 도형) 안에 여러 레이어가 있는 경우 ‘레이어’ 는 숫자로 지정됩니다. 현재로서는 숫자로만 지정할 수 있지만, 앞으로는 GRASS 사용자 인터페이스 상에서 명칭으로 지정할 수 있게 될 예정입니다.
속성은 GRASS LOCATION
내부에 dBase, SQLite3으로 저장하거나, 또는 외부 데이터베이스 테이블에, 예를 들어 PostgreSQL, MySQL, Oracle 등에 저장할 수 있습니다.
데이터베이스 테이블에 있는 속성은 category
값을 통해 도형 항목과 링크되어 있습니다.
categoty
(키, ID)는 도형 원시형(primitive)에 첨부된 정수로, 데이터베이스 테이블에 있는 유일 키 열을 가리키는 링크로 사용됩니다.
팁
GRASS 벡터 모델 이해하기
GRASS 벡터 모델과 그 능력을 이해하는 데 있어 가장 좋은 방법은 벡터 모델을 좀 더 심도 있게 설명하고 있는 여러 GRASS 예제 가운데 하나를 다운로드하는 것입니다. 자세한 정보 및 문서 그리고 예제를 여러 언어로 제공하고 있는 https://grass.osgeo.org/documentation/manuals/ 웹페이지를 참조하세요.
22.11. 새 GRASS 벡터 레이어 생성하기
새 GRASS 벡터 레이어를 생성하려면, 탐색기에 있는 맵셋의 컨텍스트 메뉴에서 다음 액션 가운데 하나를 선택하십시오:
New Point Layer: 새 포인트 레이어를 추가합니다.
New Line Layer: 새 라인 레이어를 추가합니다.
New Polygon Layer: 새 폴리곤 레이어를 추가합니다.
그리고 대화창에서 명칭을 입력하십시오. 새 벡터 맵이 생성되어 맵 캔버스에 편집 모드 상태로 추가될 것입니다. 레이어 유형을 선택한다고 해도 벡터 맵 안에 디지타이즈할 수 있는 도형 유형이 제한되지는 않습니다. GRASS에서는, 하나의 벡터 맵 안에 모든 도형 유형을 (포인트, 라인 및 폴리곤을) 구조화시킬 수 있습니다. 레이어 유형은 맵 캔버스에 레이어를 추가하기 위해서만 사용됩니다. 왜냐하면 QGIS는 레이어가 특정 유형일 것을 요구하기 때문입니다.
기존 벡터 맵의 컨텍스트 메뉴에서 앞에서 설명한 액션 가운데 하나를 선택하면, 기존 벡터 맵에 레이어를 추가할 수도 있습니다.
GRASS에서는, 하나의 레이어 안에 모든 도형 유형을 (점, 선 및 면을) 구조화시킬 수 있습니다. GRASS가 위상 벡터 모델을 사용하므로, 새 GRASS 벡터 생성 시 도형 유형을 선택할 필요가 없기 때문입니다. QGIS에서 shapefile을 생성하는 것과는 다릅니다. 왜냐하면 shapefile은 단순 객체 벡터 모델을 사용하기 때문입니다. (새 벡터 레이어 생성 을 참조하세요.)
22.12. GRASS 벡터 레이어 디지타이즈 및 편집하기
표준 QGIS 다지타이즈 작업 도구를 사용해서 GRASS 벡터 레이어를 디지타이즈할 수 있습니다. 하지만 다음 사실들 때문에 사용자가 알고 있어야 할 몇몇 특수성 또한 존재합니다:
GRASS 위상 모델 대 QGIS 단순 객체
GRASS 모델의 복잡성
단일 맵 안의 다중 레이어
단일 맵 안의 멀티 도형 유형
다중 레이어에서 다중 객체가 도형을 공유
다음 문단부터 이 특수성들을 설명하겠습니다.
저장, 변경 사항 무시, 실행 취소, 재실행
경고
편집 작업 동안 이루어진 모든 변경 사항은 즉시 벡터 맵과 관련 속성 테이블에 작성됩니다.
각 편집 작업마다 변경 사항을 작성하지만, 실행 취소/재실행할 수 있고 또는 편집 작업 종료 시 모든 변경 사항을 무시할 수도 있습니다. 실행 취소 또는 변경 사항 무시 기능을 이용하는 경우, 벡터 맵과 속성 테이블에 원본 상태를 다시 작성합니다.
이런 습성에는 다음과 같은 두 가지 중요한 이유가 있습니다:
GRASS 벡터의 본질은 사용자가 본인의 작업을 원하고 있고 작업이 갑자기 중단되는 경우 (예를 들어 정전 시) 변경 데이터를 저장한 상태인 편이 낫다는 확신에서 나오기 때문입니다.
위상 데이터를 효과적으로 편집하려면 위상적 정확성에 관한 정보를 가시화해야 하는데, 변경 사항을 GRASS 벡터 맵에 작성하는 경우에만 맵에서 그런 정보를 얻을 수 있기 때문입니다.
툴바
GRASS 레이어를 편집하는 경우 ‘디지타이즈 작업 툴바’ 에서 다음과 같은 몇몇 특정 도구를 사용할 수 있습니다:
아이콘 |
도구 |
목적 |
---|---|---|
New Point |
새 포인트를 디지타이즈합니다. |
|
New Line |
새 라인을 디지타이즈합니다. |
|
New Boundary |
새 경계를 디지타이즈합니다. |
|
New Centroid |
새 중심(라벨 위치)을 디지타이즈합니다. |
|
New Closed Boundary |
새 닫힌 경계를 디지타이즈합니다. |
표: GRASS 디지타이즈 작업 - GRASS 디지타이즈 작업 도구
팁
GRASS에서 폴리곤을 디지타이즈하기
GRASS에서 폴리곤을 생성하고 싶다면, 먼저 폴리곤의 경계를 디지타이즈합니다. 그리고 닫힌 경계 안에 중심(라벨 포인트)을 추가합니다. 그 이유는 위상 벡터 모델은 언제나 폴리곤의 경계가 아니라 중심에 폴리곤의 속성 정보를 링크시키기 때문입니다.
카테고리
‘cat’ 으로 줄여 부르는 일이 많은 카테고리는 일종의 ID입니다. 이 명칭은 GRASS 벡터가 category
라는 단일 속성만 보유하던 시절에 시작됐습니다. 카테고리는 도형과 속성 사이의 링크로 사용됩니다. 단일 도형이 여러 카테고리를 보유할 수도 있기 때문에, 서로 다른 레이어들 안에 있는 여러 객체들을 나타낼 수도 있습니다. 현재, QGIS 편집 도구를 사용해서 레이어 하나 당 오직 하나의 카테고리만 할당할 수 있습니다. 새 객체는 유일한 새 카테고리를 자동적으로 할당받게 됩니다. 경계를 제외하고 말이죠. 경계는 보통 면을 형성할 뿐 선형 객체를 타나내지는 않지만, 이후에 – 예를 들어 다른 레이어에서 – 경계에 대한 속성을 정의할 수 있습니다.
언제나 현재 편집 중인 레이어에서만 새 카테고리를 생성할 수 있습니다.
QGIS 편집 도구를 통해 카테고리에 더 많은 카테고리를 할당할 수는 없습니다. 그런 데이터는 아마도 다중 객체로 표현되어, 서로 다른 레이어들에 있는 개별 객체인 경우에도 삭제될 수도 있습니다.
속성
현재 편집 중인 레이어의 속성만 수정할 수 있습니다. 벡터 맵이 레이어를 하나 이상 담고 있는 경우, 다른 레이어의 객체는 그 속성을 편집할 수 없다고 경고하기 위해 모든 속성이 <not editable (layer #)>
로 설정될 것입니다. 그 이유는 QGIS가 레이어 하나 당 하나의 고정된 필드 집합만 지원하는 반면 다른 레이어는 다른 필드 집합을 보유하고 있을 수도 있고, 또 보통 보유하고 있기 때문입니다.
도형 원시형에 할당된 카테고리가 없는 경우, 유일한 새 카테고리가 자동적으로 할당되어 해당 도형의 속성을 변경할 때 속성 테이블 안에 새 레코드를 생성합니다.
팁
테이블에 있는 속성을 대규모로 – 예를 들어 필드 계산기 이용하기 를 사용해서 – 업데이트하고 싶은데 사용자가 업데이트하고 싶지 않은, 카테고리가 없는 객체(주로 경계)가 존재할 경우, ‘고급 필터’ 를 cat is not null
로 설정해서 해당 객체를 필터링할 수 있습니다.
편집 스타일
위상 심볼은 위상 데이터를 효과적으로 편집하는 데 필수 불가결합니다. 편집 작업 시작 시, 레이어 상에 특화된 ‘GRASS 편집’ 렌더링 작업자를 자동적으로 설정하며 편집 작업 종료 시 원래 렌더링 작업자로 되돌립니다. 레이어 속성 대화창의 Style 탭에서 스타일을 사용자 지정할 수도 있습니다. 다른 모든 스타일과 마찬가지로, 스타일을 프로젝트 파일에 저장할 수도 있고 개별 파일에 저장할 수도 있습니다. 스타일을 사용자 지정하는 경우, 명칭은 변경하지 마십시오. 왜냐하면 편집 작업을 다시 시작할 때 명칭을 사용해서 스타일을 리셋하기 때문입니다.
팁
레이어 편집 중에 프로젝트 파일을 저장하지 마십시오. 레이어가 변경되지 않았을 경우 아무 의미도 가지지 못 하는 ‘편집 스타일’ 과 함께 레이어를 저장할 것이기 때문입니다.
스타일은 속성 테이블에 topo_symbol
이라는 필드로 일시적으로 추가된 위상 정보를 기반으로 합니다. 편집 작업 종료 시 이 필드는 자동적으로 제거됩니다.
팁
속성 테이블에서 topo_symbol
필드를 제거하지 마십시오. 렌더링 작업자가 해당 열에 의존하기 때문에 객체가 보이지 않게 될 것입니다.
스냅
면을 형성하려면, 연결된 경계의 꼭짓점들이 정확히 동일한 좌표를 보유하고 있어야 합니다. 맵 캔버스와 벡터 맵이 동일한 좌표계인 경우에만 스냅 도구를 사용해서 동일한 좌표를 부여할 수 있습니다. 그렇지 않은 경우, 벡터 맵 좌표를 맵 캔버스 좌표로 변환하고 다시 그 반대로 변환하는 과정에서 표현 오류 및 좌표계 변환 때문에 좌표가 조금씩 달라질 수도 있습니다.
팁
편집 작업 시 레이어의 좌표계를 맵 캔버스에도 적용하십시오.
제약 사항
한 번에 동일 벡터 안에 있는 여러 레이어들을 동시 편집할 수는 없습니다. 주된 이유는 단일 데이터 소스에 대해 여러 실행 취소 스택(stack)을 처리하는 것이 불가능하기 때문입니다.
리눅스 및 맥 상에서는 한 번에 하나의 GRASS 레이어만 편집할 수 있습니다. 데이터베이스 드라이버를 랜덤한 순서로 종료할 수 없는 GRASS의 버그 때문입니다. 현재 GRASS 개발자들이 이 문제를 해결하고 있는 중입니다.
팁
GRASS 편집 권한
사용자가 편집하고자 하는 GRASS MAPSET
의 소유자여야만 합니다. 사용자의 소유가 아닌 MAPSET
에 있는 데이터 레이어를 편집하는 것은, 사용자가 쓰기 권한을 가지고 있더라도 불가능합니다.
22.13. GRASS 영역 도구
GRASS에서 래스터 레이어를 작업하는 경우 (공간 작업창을 설정하는) 영역(region) 정의가 중요합니다. 벡터 분석은 기본적으로 설정한 어느 영역 정의에도 제약을 받지 않습니다. 그러나 새로 생성한 모든 래스터는 원본의 범위 및 해상도에 상관없이 현재 정의된 GRASS 영역의 공간 범위 및 해상도를 적용받게 됩니다. 현재 GRASS 영역은 $LOCATION/$MAPSET/WIND
파일에 저장되는데, 이 파일은 동서남북 방향의 경계, 열 및 행의 개수, 수직 및 수평 공간 해상도를 정의합니다.
Display current GRASS region 버튼을 통해 QGIS 맵 캔버스에서 GRASS 영역의 가시성을 켜고 끌 수 있습니다.
‘GRASS Tools’ 도킹 위젯에 있는 ‘Region’ 탭에서 GRASS 영역을 수정할 수 있습니다. 새 영역의 경계 및 해상도를 입력한 다음 Apply 버튼을 클릭하십시오. Select the extent by dragging on canvas 버튼을 클릭하면 QGIS 맵 캔버스 위에 마우스로 직사각형을 클릭&드래그해서 새 영역의 범위를 대화형으로 선택할 수 있습니다.
g.region
GRASS 모듈은 사용자의 래스터 분석 작업을 위해 적절한 영역 범위 및 해상도를 정의할 수 있는 훨씬 많은 파라미터를 제공하고 있습니다. GRASS 툴박스 를 통해 이 파라미터들을 사용할 수 있습니다.
22.14. GRASS 툴박스
Open GRASS Tools GRASS 툴박스는 선택한 GRASS LOCATION
및 MAPSET
안에 있는 데이터를 작업할 수 있는 GRASS 모듈 기능을 제공하고 있습니다. GRASS 툴박스를 이용하려면, 먼저 사용자가 쓰기 권한을 보유하고 있는 (사용자가 해당 MAPSET
을 생성한 경우 보통 당연히 보유하고 있습니다) LOCATION
및 MAPSET
을 열어야 합니다. 분석 작업 도중에 새로 래스터 및 벡터 레이어를 생성하는 경우 현재 선택 중인 LOCATION
및 MAPSET
에 작성해야 하기 때문입니다.
22.14.1. GRASS 모듈로 작업하기
GRASS 툴박스에 있는 GRASS 셸을 통해, 명령 줄 인터페이스에서 거의 모든 (300개가 넘는) GRASS 모듈을 사용할 수 있습니다. 좀 더 사용자 친화적인 작업 환경을 제공하기 위해, GRASS 플러그인 툴박스 내부의 그래픽 인터페이스 대화창에서 약 200개의 GRASS 모듈 및 기능을 사용할 수 있습니다.
GRASS 위키 사이트 에서, QGIS 3.16 버전의 GUI 툴박스를 통해 사용할 수 있는 GRASS 모듈의 완전한 목록을 찾아볼 수 있습니다.
GRASS 툴박스의 내용을 사용자 지정할 수도 있습니다. 이 과정은 GRASS 툴박스 사용자 지정하기 에서 설명하고 있습니다.
그림 22.3 에서 알 수 있는 바와 같이, 테마 별로 그룹화된 Modules Tree 또는 검색 가능한 Modules List 탭을 통해 알맞은 GRASS 모듈을 찾을 수 있습니다.
모듈의 아이콘을 클릭하면, 툴박스 대화창에 새 탭이 추가될 것입니다. 이 탭은 Options, Output 및 Manual 이라는 하위 탭 3개를 보유하고 있습니다.
옵션
Options 탭은 보통 QGIS 맵 캔버스에 가시화된 래스터 및 벡터 레이어를 선택하고 해당 모듈에 특화된 파라미터를 입력해서 모듈을 실행할 수 있는 간소화된 대화창을 담고 있습니다.
이 대화창을 간소하게 유지하기 위해, 대화창에 표시되는 모듈 파라미터들이 완전하지 않은 경우가 많습니다. 심화 모듈 파라미터 및 플래그를 사용하고 싶다면, GRASS 셸을 실행해서 명령 줄에서 모듈을 구동해야 합니다.
QGIS 1.8 버전부터 Options 탭의 간소화된 모듈 대화창 하단에 [Show Advanced Options] 버튼을 지원하고 있습니다. 현재에는 활용법을 보여주기 위한 목적으로 v.in.ascii
모듈에만 추가돼 있지만, QGIS 향후 버전에서는 GRASS 툴박스에 있는 좀 더 많은 또는 모든 모듈에 추가될 수도 있습니다. 이 버튼을 누르면 GRASS 셸로 전환할 필요없이 대화창에서 완전한 GRASS 모듈 옵션을 사용할 수 있습니다.
산출물
Output 탭은 모듈의 산출물 상태에 관한 정보를 표시합니다. Run 버튼을 클릭했을 때, 모듈이 Output 탭으로 전환되어 사용자가 분석 과정에 관한 정보를 볼 수 있습니다. 모든 과정이 무사히 완료되면, 마지막으로 Successfully finished
메시지가 표시될 것입니다.
사용자 설명서
Manual 탭은 GRASS 모듈의 HTML 도움말 페이지를 표시합니다. 심화 모듈 파라미터 및 플래그를 확인하는 데, 또는 해당 모듈의 목적에 관한 심도 있는 지식을 얻기 위해 이 탭을 사용할 수 있습니다. 각 모듈의 사용자 설명서 페이지 맨 끝에, Main Help index, Thematic index 및 Full index 를 가리키는 링크들이 있습니다. 이 링크들은 각각 g.manual
모듈이 제공하는 주요 도움말 색인, 테마 색인, 전체 색인으로 연결됩니다.
팁
결과를 즉시 표시하기
사용자의 맵 캔버스에 계산 결과를 즉시 표시하고 싶다면, 모듈 탭 하단에 있는 [View Output] 버튼을 누르면 됩니다.
22.14.2. GRASS 모듈 예제
다음 예제들이 일부 GRASS 모듈의 강력한 기능을 보여줄 것입니다.
22.14.2.1. 등고선 생성하기
첫 번째 예제는 표고 래스터(DEM)로부터 벡터 등고선 맵을 생성하는 것입니다. 이 예시에서는 사용자가 GRASS 로케이션에 데이터 가져오기 에서 설명한 대로 LOCATION
‘alaska’ 를 설정했다고 가정합니다.
먼저, Open mapset 아이콘을 클릭하고
LOCATION
‘alaska’ 를 선택해서 로케이션을 여십시오.도구 범주 목록에서
를 더블클릭하십시오.이제
r.contour
모듈을 한 번 클릭하면 앞에서 설명한 것처럼 (GRASS 모듈로 작업하기 참조) 모듈 대화창이 열릴 것입니다.Name of input raster map 옵션에
gtopo30
이라고 입력하십시오.Increment between Contour levels 옵션의 값을 100으로 입력하십시오. (이렇게 하면 등고선을 100미터 간격으로 생성할 것입니다.)
Name for output vector map 옵션에서 명칭을
ctour_100
으로 입력하십시오.Run 버튼을 눌러 공간 처리 과정을 시작하십시오. 산출물 창에
Successfully finished
메시지가 나타낼 때까지 잠시 기다렸다가 View Output 버튼을 클릭한 다음 Close 버튼을 클릭하십시오.
알래스카가 넓은 영역이기 때문에, 전체를 표시하는 데 시간이 좀 걸릴 겁니다. 렌더링이 종료된 다음, 벡터 속성 대화창 에서 설명한 대로 레이어 속성 대화창을 열어서 라인 색상을 변경하면 표고 레스터 위에 중첩한 등고선이 명확하게 보이도록 할 수 있습니다.
그 다음, 알래스카 중심부에 있는 좁은 산지 지역으로 확대하십시오. 가까이 확대해보면 등고선이 급격히 꺾여 있다는 사실을 알 수 있을 겁니다. GRASS는 벡터 맵의 전체 형태를 유지하면서도 살짝 수정할 수 있는 v.generalize
모듈을 제공하고 있습니다. 이 모듈은 서로 다른 목적에 따라 서로 다른 알고리즘을 여럿 사용합니다. 몇몇 (예를 들면 더글러스-포이커 및 꼭짓점 감축) 알고리즘은 꼭짓점 가운데 일부를 제거해서 라인을 단순화시킵니다. 산출되는 벡터는 더 빨리 불러올 수 있을 것입니다. 사용자가 너무나 상세한 벡터를 가지고 있지만, 매우 소축척의 맵을 생성하기 때문에 세밀한 사항이 필요없는 경우 이런 공간 처리를 하는 것이 유용합니다.
팁
단순화 도구
QGIS도 GRASS v.generalize
모듈의 더글러스-포이커 알고리즘과 동일하게 작동하는 도구를 보유하고 있다는 사실을 기억하십시오.
하지만, 이 예제의 목적은 다릅니다. r.contour
모듈이 생성한 등고선의 날카로운 각도를 매끄럽게 다듬어야 합니다. v.generalize
모듈의 알고리즘 가운데, 체이킨 (또는 에르미트 스플라인) 알고리즘이 바로 이런 처리를 할 수 있습니다. 다만 이런 알고리즘들이 벡터에 더 많은 꼭짓점들을 추가 할 수 있다는 사실을 잘 알고 있어야 합니다. 이런 경우 벡터를 불러오는 데 시간이 더 걸릴 수도 있습니다.
GRASS 툴박스를 열고
범주를 더블클릭한 다음,v.generalize
모듈을 클릭해서 모듈 옵션 대화창을 여십시오.Name of input vector 옵션에 ‘ctour_100’ 옵션이 표시돼 있는지 확인하십시오.
알고리즘 목록에서,
Chaiken's
를 선택하십시오. 다른 모든 옵션은 기본값으로 내버려두고, 마지막 행으로 스크롤해서 Name for output vector map 란에 ‘ctour_100_smooth’ 를 입력한 다음 Run 버튼을 클릭하십시오.산출물 창에
Successfully finished
메시지가 나타낼 때까지 잠시 기다렸다가 View Output 버튼을 클릭한 다음 Close 버튼을 클릭하십시오.래스터 배경에서 벡터가 더 잘 보이도록 그리고 원본 등고선과 대조되도록 벡터의 색상을 변경할 수도 있습니다. 새 등고선이 원본의 전체 형태를 잘 보전하면서도 원본보다 더 매끄러워졌다는 사실을 알 수 있습니다.
팁
r.contour의 다른 활용법
동등한 다른 상황에서도 앞에서 설명한 처리 과정을 사용할 수 있습니다. 예를 들어 강수량 데이터 래스터 맵이 있을 경우, 동일한 방법으로 등강수량(isohyetal) 선 벡터 맵을 생성할 수 있습니다.
22.14.2.2. 음영기복도 3D 효과 생성하기
표고 레이어를 표시하고 맵에 3D 효과를 주는 데 쓰이는 몇 가지 방법들이 있습니다. 앞에서 보인 등고선을 활용하는 것도 지형도 생산에 자주 쓰이는 인기 있는 방법 가운데 하나입니다. 3D 효과를 줄 수 있는 또다른 방법이 바로 음영기복도입니다. 먼저 DEM(표고) 래스터에서 각 셀의 경사(slope) 및 경사방향(aspect)을 계산한 다음, 하늘에 있는 태양의 위치를 시뮬레이션하고 각 셀에 그 반사율(reflectance)을 적용해서 음영기복도 효과를 생성합니다. 즉, 태양을 향해 있는 경사는 밝아지고 태양을 등지고 있는 경사는 (그림자가 져서) 어두워집니다.
gtopo30
표고 래스터를 불러오는 것으로 이 예제를 시작하겠습니다. GRASS 툴박스를 연 다음, 래스터 범주에 있는 를 더블클릭해서 지형 분석 대화창을 여십시오.그리고
r.shaded.relief
를 클릭해서 모듈을 여십시오.새 음영기복 래스터의 명칭으로
gtopo30_shade
를 입력한 다음 Run 버튼을 누르십시오.공간 처리 과정이 완료되면, 음영기복 래스터를 맵에 추가하십시오. 회색조로 표시되는 것을 볼 수 있을 것입니다.
음영기복도와 함께
gtopo30
레이어의 색상을 보려면, 범례에서 음영기복도를gtopo30
맵 아래로 이동시킨 다음gtopo30
레이어의 속성 대화창을 여십시오. Transparency 탭에서 투명도 수준을 약 25%로 설정하십시오.
이제 gtopo30
표고 레이어가 색상표 및 투명도가 설정된 상태로 회색조인 음영기복도 위에 표시되었을 것입니다. 음영기복도가 어떤 시각 효과를 주는지 보려면, gtopo30_shade
레이어를 껐다가 다시 켜보십시오.
GRASS 셸 사용하기
QGIS의 GRASS 플러그인은 GRASS 초보자로서 모든 모듈 및 옵션에 익숙하지 않은 사용자를 위해 설계돼 있습니다. 따라서, 툴박스에 있는 모듈 가운데 일부는 사용할 수 있는 모든 옵션을 표시하지 않으며, 일부는 아예 나타나지도 않습니다. GRASS 셸(또는 콘솔)은 사용자가 툴박스 트리에 나타나지 않는 이런 부가적인 GRASS 모듈을 사용할 수 있게 해주며, 또한 툴박스에 간소화된 기본 파라미터들만 표시되는 모듈의 부가적인 옵션들도 사용할 수 있게 해줍니다. 이번 예제에서는 앞에서 소개한 r.shaded.relief
모듈의 부가적인 옵션을 사용하는 법을 보여줄 것입니다.
r.shaded.relief
모듈은 zmult
파라미터를 받을 수 있는데, 이 파라미터는 표고 값을 X/Y 좌표 단위를 기준으로 증가시켜서 음영기복 효과를 더욱 두드러지게 만듭니다.
앞에서와 마찬가지로
gtopo30
표고 래스터를 불러온 다음, GRASS 툴박스 대화창을 열고 GRASS 셸을 클릭하십시오. 셸 창에서r.shaded.relief map=gtopo30 shade=gtopo30_shade2 azimuth=315 zmult=3
명령어를 입력한 다음 Enter 키를 누르십시오.공간 처리 과정이 종료된 후, Browse 탭을 선택하고 새
gtopo30_shade2
래스터를 더블클릭해서 QGIS 맵 캔버스에 표시하십시오.앞에서 설명한 대로, 범례에서 음영기복 래스터를
gtopo30
래스터 아래로 이동시킨 다음, 색상이 적용된gtopo30
레이어의 투명도를 확인하십시오. 첫 번째 음영기복도를 사용했을 때보다 3D 효과가 더욱 두드러진다는 사실을 알 수 있을 겁니다.
22.14.2.3. 벡터 맵에서의 래스터 통계
다음 예제에서는 GRASS 모듈이 어떻게 래스터 데이터를 합치고 벡터 맵에 있는 각 폴리곤에 대한 통계 열들을 추가하는지 보여줄 것입니다.
알래스카 데이터를 다시 사용해서,
shapefiles/trees.shp
파일을 GRASS 로 가져오십시오. (GRASS 로케이션에 데이터 가져오기 를 참조하세요.)이제 중간 단계를 처리해야 합니다 – 가져온 삼림 맵을 (경계 및 중심 둘 다 포함한) 완전한 GRASS 면 벡터로 만들려면 중심을 추가해야만 합니다.
툴박스에서
를 선택한 다음,v.centroids
모듈을 여십시오.Name for output vector map 옵션에서 명칭을
forest_areas
로 입력한 다음 모듈을 실행하십시오.이제
forest_areas
벡터를 불러와서 삼림 유형을 – 낙엽수림, 상록수림, 혼효수림 – 서로 다른 색상으로 표시하십시오. 레이어 속성 대화창의 Symbology 탭에서 Legend type 옵션을 ‘Unique value’ 로 선택하고 Classification field 옵션을 ‘VEGDESC’ 으로 설정하십시오. (심볼 속성 절의 Symbology 탭에 관한 설명을 참조하세요.)그리고 GRASS 툴박스 대화창을 다시 열고 다른 맵으로
를 여십시오.v.rast.stats
모듈을 클릭한 다음gtopo30
및forest_areas
를 입력하십시오.이제 추가 파라미터 하나만 더 설정하면 됩니다. column prefix 옵션에
elev
를 입력한 다음 Run 버튼을 클릭하십시오. 이 작업은 수많은 계산을 해야 하는 작업이기 때문에 아주 오래 (아마도 2시간 정도) 걸릴 것입니다.마지막으로,
forest_areas
레이어의 속성 테이블을 열고 각 삼림 폴리곤에 대해elev_min
,elev_max
,elev_mean
등을 포함한 새 열들 여럿이 추가된 것을 확인하십시오.
22.14.3. GRASS 툴박스 사용자 지정하기
GRASS 툴박스에 거의 모든 GRASS 모듈을 추가할 수 있습니다. 매우 단순한 XML 파일로 툴박스 내부에서 모듈의 모습 및 파라미터를 환경 설정할 수 있으며, 이 파일을 파싱하기 위한 XML 인터페이스도 있습니다.
v.buffer
(v.buffer.qgm) 모듈을 생성하기 위한 예시 XML 파일의 내용은 다음과 같습니다:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">
<qgisgrassmodule label="Vector buffer" module="v.buffer">
<option key="input" typeoption="type" layeroption="layer" />
<option key="buffer"/>
<option key="output" />
</qgisgrassmodule>
사용자가 해당 모듈을 선택하면 파싱 작업자(parser)가 이 정의를 읽어들여 툴박스 안에 새 탭을 생성합니다. 새 모듈을 추가하는 방법, 모듈이 속한 그룹을 변경하는 방법 등에 대한 자세한 설명은 https://qgis.org/ko/site/getinvolved/development/addinggrasstools.html 웹페이지에서 찾아볼 수 있습니다.