Outdated version of the documentation. Find the latest one here.

` `

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 버전을 지원하는 제공자/플러그인을 함께 담고 있을 수도 있습니다. (바이너리 파일들이 서로 다른 파일명입니다.) 하지만 실행 시간에는 둘 중 한 버전을 지원하는 제공자/플러그인만 불러올 수 있습니다.

예제 데이터셋

As an example, we will use the QGIS Alaska dataset (see section Sample Data). It includes a small sample GRASS LOCATION with three vector layers and one raster elevation map. Create a new folder called grassdata, download the QGIS ‘Alaska’ dataset qgis_sample_data.zip from http://qgis.org/downloads/data/ and unzip the file into grassdata.

More sample GRASS LOCATIONs are available at the GRASS website at http://grass.osgeo.org/download/sample-data/.

GRASS 래스터 및 벡터 레이어 불러오기

If the provider is loaded in QGIS, the location item with GRASS grassLocation icon is added in the browser tree under each folder item which contains GRASS location. Go to the folder grassdata and expand location alaska and mapset demo.

다른 모든 레이어와 마찬가지로, GRASS 레이어 항목을 더블클릭하거나 맵 캔버스 또는 범례로 드래그&드롭하면 GRASS 래스터 및 벡터 레이어를 불러올 수 있습니다.

참고

GRASS 데이터 불러오기

GRASS 로케이션 항목을 찾을 수 없는 경우 Help ‣ About ‣ Providers 메뉴 옵션에서 GRASS 벡터 제공자를 불러온 상태인지 확인하십시오.

드래그&드롭으로 GRASS 로케이션에 데이터 가져오기

이 절에서는 GRASS 맵셋으로 래스터 및 벡터 데이터를 가져오는 방법을 예제를 통해 설명하겠습니다.

  1. QGIS 탐색기에서 사용자가 데이터를 가져오고 싶은 맵셋을 찾으십시오.

  2. QGIS 탐색기에서 GRASS로 가져오고 싶은 레이어를 찾으십시오. 소스 데이터가 트리의 맵셋 위치에서 너무 멀리 떨어져 있는 경우 새 탐색기 인스턴스(Browser Panel (2))를 열 수 있다는 사실을 기억하세요.

  3. 대상 맵셋에 레이어를 드래그&드롭하십시오. 대용량 레이어인 경우 가져오기에 시간이 좀 걸릴 수도 있습니다. 가져오기를 완료할 때까지 새 레이어 항목 앞에 움직이는 import 아이콘이 나타날 겁니다.

래스터 데이터가 서로 다른 좌표계를 사용하는 경우, (빠른) Approximate 변형 또는 (정확한) Exact 변형을 사용해서 재투영할 수 있습니다. 소스 래스터를 가리키는 링크를 (r.external 을 이용해서) 생성한 상태이며, 소스 데이터가 동일한 좌표계를 사용하고 있고 GDAL이 지원하는 포맷인 경우, 소스 데이터의 좌표계를 사용할 것입니다. GRASS 옵션 대화창에 있는 Browser 탭에서 이 옵션들을 설정할 수 있습니다.

소스 래스터가 더 많은 밴드를 가지고 있는 경우, 각 밴드 레이어 별로 .<밴드 번호> 접미어를 붙인 새 GRASS 맵을 생성한 다음 모든 맵들의 그룹을 래스터 그룹 rasterGroup 아이콘과 함께 생성합니다. 외부 래스터인 경우 래스터 링크 rasterLink 아이콘을 사용합니다.

QGIS 탐색기에서 GRASS 데이터 관리하기

  • 맵 복사하기: 동일한 로케이션 내에 있는 맵셋들 간에 GRASS 맵을 드래그&드롭해서 복사할 수도 있습니다.

  • 맵 삭제하기: GRASS 맵을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 Delete 액션을 선택하십시오.

  • 맵 재명명하기: GRASS 맵을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 Rename 액션을 선택하십시오.

GRASS 옵션

GRASS Options 대화창에서 GRASS 옵션을 설정할 수도 있습니다. 해당 대화창은 탐색기에서 로케이션 또는 맵셋을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 GRASS Options 를 선택하면 열 수 있습니다.

GRASS 플러그인 시작하기

To use GRASS functionalities in QGIS, you must select and load the GRASS plugin using the Plugin Manager. To do this, go to the menu Plugins ‣ showPluginManager Manage and Install Plugins..., select checkbox GRASS and click [OK].

GRASS 플러그인을 시작하면 GRASS 메뉴(Plugins ‣ GRASS)를 통해 다음 주 기능들을 제공합니다:

  • grassOpenMapset Open Mapset
  • grassNewMapset New Mapset
  • grassCloseMapset Close Mapset
  • grassTools Open GRASS Tools
  • grassRegion Display Current GRASS Region
  • general GRASS Options

GRASS 맵셋 열기

플러그인의 GRASS 도구를 사용하려면 먼저 GRASS 맵셋을 열어야만 합니다. (열려 있는 맵셋이 없는 경우 도구는 비활성화 상태입니다.) 탐색기에서 맵셋 항목을 오른쪽 클릭한 다음 컨텍스트 메뉴에서 Open mapset 을 선택하면 맵셋을 열 수 있습니다.

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.externalv.external 을 사용하면 레이어를 가져오지 않고도 외부 GDAL/OGR 지원 데이터셋을 가리키는 읽기 전용 링크를 생성할 수 있습니다. 아직 GRASS 작업에 익숙하지 않은 사용자가 쓰기에는 일반적이지 않은 방법이기 때문에, 이 문서에서는 이 기능을 설명하지 않을 것입니다.)

../../../_images/grass_location1.png

알래스카 로케이션에 있는 GRASS 데이터

GRASS 로케이션에 데이터 가져오기

탐색기에서 드래그&드롭으로 데이터를 쉽게 가져올 수 있는 방법은 드래그&드롭으로 GRASS 로케이션에 데이터 가져오기 를 참조하세요.

이 절에서는 QGIS 알래스카 데이터셋이 제공한 GRASS LOCATION ‘alaska’로 래스터 및 벡터 데이터를 전통적인 방식으로 가져오는 방법을 예제를 통해 설명하겠습니다. 따라서 QGIS 알래스카 데이터셋으로부터 (Sample Data 참조) 랜드커버 래스터 맵 landcover.img 와 벡터 GML 파일 lakes.gml 을 사용합니다.

  1. QGIS를 구동하고 GRASS 플러그인을 불러온 상태인지 확인하십시오.

  2. GRASS 툴바에서, grassOpenMapset Open MAPSET 아이콘을 클릭해서 MAPSET 마법사를 여십시오.

  3. Select as GRASS database the folder grassdata in the QGIS Alaska dataset, as LOCATION ‘alaska’, as MAPSET ‘demo’ and click [OK].
  4. 그리고 grassTools Open GRASS tools 아이콘을 클릭하십시오. GRASS 툴박스 대화창이 열립니다.

  5. landcover.img 래스터 맵을 가져오려면, Modules Tree 탭에서 r.in.gdal 모듈을 클릭하십시오. 이 GRASS 모듈을 통해 GRASS LOCATION 으로 GDAL 지원 래스터 파일을 가져올 수 있습니다. r.in.gdal 모듈 대화창이 열릴 것입니다.

  6. QGIS 알래스카 데이터셋에서 raster 폴더를 찾아 landcover.img 파일을 선택하십시오.

  7. As raster output name, define landcover_grass and click [Run]. In the Output tab, you see the currently running GRASS command r.in.gdal -o input=/path/to/landcover.img output=landcover_grass.
  8. When it says Successfully finished, click [View output]. The landcover_grass raster layer is now imported into GRASS and will be visualized in the QGIS canvas.
  9. lakes.gml GML 파일을 가져오려면, Modules Tree 탭에서 v.in.ogr 모듈을 클릭하십시오. 이 GRASS 모듈을 통해 GRASS LOCATION 으로 OGR 지원 벡터 파일을 가져올 수 있습니다. v.in.ogr 모듈 대화창이 열릴 것입니다.

  10. QGIS 알래스카 데이터셋에서 gml 폴더를 찾아 lakes.gml 파일을 선택하십시오.

  11. As vector output name, define lakes_grass and click [Run]. You don’t have to care about the other options in this example. In the Output tab you see the currently running GRASS command v.in.ogr -o dsn=/path/to/lakes.gml output=lakes\_grass.
  12. When it says Succesfully finished, click [View output]. The lakes_grass vector layer is now imported into GRASS and will be visualized in the QGIS canvas.

새 GRASS 로케이션 생성하기

이 예제에서, 피트 단위를 사용하는 알버 정적도법(Alber’s Equal Area projection)으로 투영된 예시 GRASS LOCATION ‘alaska’를 예시 데이터로 사용합니다. 이 다음에 나오는 GRASS 관련 절, 항에서 설명하는 모든 예시 및 예제에서 이 예시 GRASS LOCATION ‘alaska’를 사용할 것입니다. 사용자 컴퓨터에 QGIS 예시 데이터셋을 다운로드하고 설치하는 편이 좋습니다. (Sample Data 를 참조하세요.)

  1. QGIS를 구동하고 GRASS 플러그인을 불러온 상태인지 확인하십시오.

  2. QGIS 알래스카 데이터셋에서 (Sample Data 참조) alaska.shp shapefile을 가시화하십시오. (파일에서 레이어 불러오기 를 참조하세요.)

  3. GRASS 툴바에서, grassNewMapset New mapset 아이콘을 클릭해서 MAPSET 마법사를 여십시오.

  4. Select an existing GRASS database (GISDBASE) folder grassdata, or create one for the new LOCATION using a file manager on your computer. Then click [Next].
  5. 이 마법사를 통해 기존 LOCATION 안에 새 MAPSET 을 생성하거나 (새 맵셋 추가하기 참조) 또는 새 LOCATION 을 처음부터 생성할 수 있습니다. radioButtonOn Create new location 옵션을 체크하십시오. (QGIS에서 새 GRASS 로케이션 또는 새 맵셋 생성하기 그림을 참조하세요.)

  6. Enter a name for the LOCATION – we used ‘alaska’ – and click [Next].
  7. radioButtonOn Projection 라디오 버튼을 체크해서 투영체 목록을 활성화한 다음 투영체를 선택하십시오.

  8. 알버 정적도법 알래스카 (피트 단위) 투영체를 사용할 것입니다. 이 투영체가 EPSG ID 2964 라는 사실을 이미 알고 있으므로, 검색 란에 해당 문자열을 입력할 수 있습니다. (주의 사항: 또다른 LOCATION 과 그 투영체에 대해 이 과정을 반복하려 하는데 ESPG ID를 기억하지 못 하는 경우, 상태 바의 우하단에 있는 projectionEnabled CRS Status 아이콘을 클릭하십시오. (투영 작업 참조))

  9. Filter 란에 2964 를 입력해서 투영체를 선택하십시오.

  10. Click [Next].
  11. To define the default region, we have to enter the LOCATION bounds in the north, south, east, and west directions. Here, we simply click on the button [Set current QGIS extent], to apply the extent of the loaded layer alaska.shp as the GRASS default region extent.
  12. Click [Next].
  13. LOCATION 안에 MAPSET 도 정의해야 합니다. (새 LOCATION 을 생성하는 경우 꼭 필요한 단계입니다.) 사용자가 원하는 대로 명명할 수 있지만, 이 예제에서는 ‘demo’ 라고 하겠습니다. GRASS가 PERMANENT 라고 불리는 MAPSET 을 자동적으로 생성할 것입니다. PERMANENT 는 프로젝트 용 핵심 데이터, 데이터의 공간 범위 및 좌표계 정의를 저장하기 위해 고안됐습니다. (참고 문헌 및 웹사이트 에서 소개하는 Neteler, M., and Mitasova, H. (2008)을 참조하세요.)

  14. Check out the summary to make sure it’s correct and click [Finish].
  15. LOCATION 인 ‘alaska’와 2개의 MAPSETs ‘demo’ 및 ‘PERMANENT’가 생성됐습니다. 현재 열려 있는 작업 맵셋은 사용자가 정의한 대로 ‘demo’입니다.

  16. GRASS 툴바에서 비활성 상태였던 일부 도구들이 이제 활성화됐다는 사실을 주목하십시오.

../../../_images/create_grass_location.png

QGIS에서 새 GRASS 로케이션 또는 새 맵셋 생성하기

작업 단계가 너무 많다고 생각할 수도 있겠지만, 사실 LOCATION 을 생성할 수 있는 매우 빠른 방법으로 그렇게 나쁘지는 않습니다. 이제 LOCATION ‘alaska’에 데이터를 가져올 준비가 끝났습니다. (GRASS 로케이션에 데이터 가져오기 를 참조하세요.) 아니면 QGIS 알래스카 데이터셋 Sample Data 에 포함된 예시 GRASS LOCATION ‘alaska’에 있는 기존 벡터 및 래스터 데이터를 사용해서 바로 GRASS 벡터 데이터 모델 절로 넘어갈 수도 있습니다.

새 맵셋 추가하기

사용자는 본인이 생성한 GRASS MAPSET 에 대해서만 쓰기 권한을 가집니다. 즉 사용자 본인의 MAPSET 을 읽고 쓰는 것 이외에도 다른 사용자의 MAPSET 에 있는 맵을 읽을 수 있다는 뜻입니다. (다른 사용자도 사용자의 맵을 읽을 수 있습니다.) 그러나 사용자는 오직 본인이 생성한 MAPSET 에 있는 맵만을 수정하거나 제거할 수 있습니다.

모든 MAPSET 은 현재 경계 좌표값과 현재 선택한 래스터 해상도를 저장하는 WIND 파일을 포함하고 있습니다. (참고 문헌 및 웹사이트 에서 소개하는 Neteler, M., and Mitasova, H. (2008) 및 GRASS 영역 도구 를 참조하세요.)

  1. QGIS를 구동하고 GRASS 플러그인을 불러온 상태인지 확인하십시오.

  2. GRASS 툴바에서, grassNewMapset New mapset 아이콘을 클릭해서 MAPSET 마법사를 여십시오.

  3. LOCATION ‘alaska’가 있는 GRASS 데이터베이스(GISDBASE) 폴더 grassdata 를 선택하십시오. LOCATION ‘alaska’에 ‘test’라는 심화 MAPSET 을 추가하려 합니다.

  4. Click [Next].
  5. We can use this wizard to create a new MAPSET within an existing LOCATION or to create a new LOCATION altogether. Click on the radio button radioButtonOn Select location (see figure_grass_new_location) and click [Next].
  6. MAPSET 에 대해 test 라는 명칭을 입력하십시오. 마법사 대화창 하단에 기존 MAPSET 및 해당 소유자의 목록이 표시됩니다.

  7. Click [Next], check out the summary to make sure it’s all correct and click [Finish].

GRASS 벡터 데이터 모델

디지타이즈 작업 전에 “GRASS 벡터 데이터 모델”을 이해하고 있어야 합니다. 일반적으로, GRASS는 위상 벡터 모델을 이용합니다. 즉 면(area)을 닫힌 폴리곤으로 표현하는 것이 아니라 하나 이상의 경계로 표현한다는 뜻입니다. 인접한 두 면 사이의 경계를 한 번에 디지타이즈하고, 두 면이 해당 경계를 공유한다는 것입니다. 이 경계는 연결되어 빈자리 없이 닫힌 상태여야만 합니다. 면의 중심(centroid) 이 면을 정의하고, 라벨의 위치가 됩니다.

경계 및 중심 이외에도, 벡터 맵은 포인트 및 라인을 담고 있을 수 있습니다. 이 모든 도형 항목들이 벡터 하나에 혼합되어 있을 수 있으며, 하나의 GRASS 벡터 맵 안에 서로 다른 소위 ‘레이어’들로 표현될 것입니다. 따라서 GRASS에서는, 레이어가 벡터 또는 래스터 맵이 아니라 벡터 레이어 내부의 ‘층(level)’이 됩니다. 이런 개념을 주의해서 구분해야만 합니다. (다만 도형 항목들을 혼합할 수 있다고는 해도, GRASS에서조차 벡터 네트워크 분석과 같은 특별한 경우에만 사용되는 흔치 않은 상황입니다. 일반적으로, 서로 다른 도형 항목들을 서로 다른 레이어에 저장하는 편이 좋을 겁니다.)

하나의 벡터 데이터셋에 여러 ‘레이어’를 저장할 수 있습니다. 예를 들면, 벡터 하나 안에 평야, 삼림, 호수 등을 저장할 수 있습니다. 인접한 삼림과 호수는 동일한 경계를 공유할 수 있지만, 각각 개별 속성 테이블을 보유합니다. 또 경계에 속성을 붙일 수도 있습니다. 삼림과 호수 사이의 경계가 도로이기 때문에 도로가 고유한 속성 테이블을 보유하는 경우를 예로 들 수 있겠죠.

GRASS에서 객체의 ‘레이어’는 숫자로 된 ‘레이어’ 값으로 정의됩니다. 한 데이터셋(예를 들어 삼림 또는 호수를 표현하는 도형) 안에 여러 레이어가 있는 경우 ‘레이어’는 숫자로 지정됩니다. 현재로서는 숫자로만 지정할 수 있지만, 앞으로는 GRASS 사용자 인터페이스 상에서 명칭으로 지정할 수 있게 될 예정입니다.

속성은 GRASS LOCATION 내부에 dBase, SQLite3으로 저장하거나, 또는 외부 데이터베이스 테이블에, 예를 들어 PostgreSQL, MySQL, Oracle 등에 저장할 수 있습니다.

데이터베이스 테이블에 있는 속성은 category 값을 통해 도형 항목과 링크되어 있습니다.

categoty (키, ID)는 도형 원시형(primitive)에 첨부된 정수로, 데이터베이스 테이블에 있는 유일 키 열을 가리키는 링크로 사용됩니다.

참고

GRASS 벡터 모델 이해하기

The best way to learn the GRASS vector model and its capabilities is to download one of the many GRASS tutorials where the vector model is described more deeply. See http://grass.osgeo.org/documentation/manuals/ for more information, books and tutorials in several languages.

새 GRASS 벡터 레이어 생성하기

새 GRASS 벡터 레이어를 생성하려면, 탐색기에 있는 맵셋의 컨텍스트 메뉴에서 다음 액션 가운데 하나를 선택하십시오:

  • New Point Layer: 새 포인트 레이어를 추가합니다.

  • New Line Layer: 새 라인 레이어를 추가합니다.

  • New Polygon Layer: 새 폴리곤 레이어를 추가합니다.

그리고 대화창에서 명칭을 입력하십시오. 새 벡터 맵이 생성되어 맵 캔버스에 편집 모드 상태로 추가될 것입니다. 레이어 유형을 선택한다고 해도 벡터 맵 안에 디지타이즈할 수 있는 도형 유형이 제한되지는 않습니다. GRASS에서는, 하나의 벡터 맵 안에 모든 도형 유형을 (포인트, 라인 및 폴리곤을) 구조화시킬 수 있습니다. 레이어 유형은 맵 캔버스에 레이어를 추가하기 위해서만 사용됩니다. 왜냐하면 QGIS는 레이어가 특정 유형일 것을 요구하기 때문입니다.

기존 벡터 맵의 컨텍스트 메뉴에서 앞에서 설명한 액션 가운데 하나를 선택하면, 기존 벡터 맵에 레이어를 추가할 수도 있습니다.

GRASS에서는, 하나의 레이어 안에 모든 도형 유형을 (점, 선 및 면을) 구조화시킬 수 있습니다. GRASS가 위상 벡터 모델을 사용하므로, 새 GRASS 벡터 생성 시 도형 유형을 선택할 필요가 없기 때문입니다. QGIS에서 shapefile을 생성하는 것과는 다릅니다. 왜냐하면 shapefile은 단순 객체 벡터 모델을 사용하기 때문입니다. (Creating new vector layers 을 참조하세요.)

GRASS 벡터 레이어 디지타이즈 및 편집하기

표준 QGIS 다지타이즈 작업 도구를 사용해서 GRASS 벡터 레이어를 디지타이즈할 수 있습니다. 하지만 다음 사실들 때문에 사용자가 알고 있어야 할 몇몇 특수성 또한 존재합니다:

  • GRASS 위상 모델 대 QGIS 단순 객체

  • GRASS 모델의 복잡성

    • 단일 맵 안의 다중 레이어

    • 단일 맵 안의 멀티 도형 유형

    • 다중 레이어에서 다중 객체가 도형을 공유

다음 문단부터 이 특수성들을 설명하겠습니다.

저장, 변경 사항 무시, 실행 취소, 재실행

경고

편집 작업 동안 이루어진 모든 변경 사항은 즉시 벡터 맵과 관련 속성 테이블에 작성됩니다.

각 편집 작업마다 변경 사항을 작성하지만, 실행 취소/재실행할 수 있고 또는 편집 작업 종료 시 모든 변경 사항을 무시할 수도 있습니다. 실행 취소 또는 변경 사항 무시 기능을 이용하는 경우, 벡터 맵과 속성 테이블에 원본 상태를 다시 작성합니다.

이런 습성에는 다음과 같은 두 가지 중요한 이유가 있습니다:

  • GRASS 벡터의 본질은 사용자가 본인의 작업을 원하고 있고 작업이 갑자기 중단되는 경우 (예를 들어 정전 시) 변경 데이터를 저장한 상태인 편이 낫다는 확신에서 나오기 때문입니다.

  • 위상 데이터를 효과적으로 편집하려면 위상적 정확성에 관한 정보를 가시화해야 하는데, 변경 사항을 GRASS 벡터 맵에 작성하는 경우에만 맵에서 그런 정보를 얻을 수 있기 때문입니다.

툴바

GRASS 레이어를 편집하는 경우 ‘디지타이즈 작업 툴바’에서 다음과 같은 몇몇 특정 도구를 사용할 수 있습니다:

아이콘

도구

목적

capturePoint New Point

새 포인트를 디지타이즈합니다.

captureLine New Line

새 라인을 디지타이즈합니다.

captureBoundary New Boundary

새 경계를 디지타이즈합니다.

captureCentroid New Centroid

새 중심(라벨 위치)을 디지타이즈합니다.

capturePolygon New Closed Boundary

새 닫힌 경계를 디지타이즈합니다.

표: GRASS 디지타이즈 작업 - GRASS 디지타이즈 작업 도구

참고

GRASS에서 폴리곤을 디지타이즈하기

GRASS에서 폴리곤을 생성하고 싶다면, 먼저 폴리곤의 경계를 디지타이즈합니다. 그리고 닫힌 경계 안에 중심(라벨 포인트)을 추가합니다. 그 이유는 위상 벡터 모델은 언제나 폴리곤의 경계가 아니라 중심에 폴리곤의 속성 정보를 링크시키기 때문입니다.

카테고리

‘cat’으로 줄여 부르는 일이 많은 카테고리는 일종의 ID입니다. 이 명칭은 GRASS 벡터가 category 라는 단일 속성만 보유하던 시절에 시작됐습니다. 카테고리는 도형과 속성 사이의 링크로 사용됩니다. 단일 도형이 여러 카테고리를 보유할 수도 있기 때문에, 서로 다른 레이어들 안에 있는 여러 객체들을 나타낼 수도 있습니다. 현재, QGIS 편집 도구를 사용해서 레이어 하나 당 오직 하나의 카테고리만 할당할 수 있습니다. 새 객체는 유일한 새 카테고리를 자동적으로 할당받게 됩니다. 경계를 제외하고 말이죠. 경계는 보통 면을 형성할 뿐 선형 객체를 타나내지는 않지만, 이후에 – 예를 들어 다른 레이어에서 – 경계에 대한 속성을 정의할 수 있습니다.

언제나 현재 편집 중인 레이어에서만 새 카테고리를 생성할 수 있습니다.

QGIS 편집 도구를 통해 카테고리에 더 많은 카테고리를 할당할 수는 없습니다. 그런 데이터는 아마도 다중 객체로 표현되어, 서로 다른 레이어들에 있는 개별 객체인 경우에도 삭제될 수도 있습니다.

속성

현재 편집 중인 레이어의 속성만 수정할 수 있습니다. 벡터 맵이 레이어를 하나 이상 담고 있는 경우, 다른 레이어의 객체는 그 속성을 편집할 수 없다고 경고하기 위해 모든 속성이 <not editable (layer #)> 로 설정될 것입니다. 그 이유는 QGIS가 레이어 하나 당 하나의 고정된 필드 집합만 지원하는 반면 다른 레이어는 다른 필드 집합을 보유하고 있을 수도 있고, 또 보통 보유하고 있기 때문입니다.

도형 원시형에 할당된 카테고리가 없는 경우, 유일한 새 카테고리가 자동적으로 할당되어 해당 도형의 속성을 변경할 때 속성 테이블 안에 새 레코드를 생성합니다.

참고

테이블에 있는 속성을 대규모로 – 예를 들어 Using the Field Calculator 를 사용해서 – 업데이트하고 싶은데 사용자가 업데이트하고 싶지 않은, 카테고리가 없는 객체(주로 경계)가 존재할 경우, ‘고급 필터’를 cat is not null 로 설정해서 해당 객체를 필터링할 수 있습니다.

편집 스타일

위상 심볼은 위상 데이터를 효과적으로 편집하는 데 필수 불가결합니다. 편집 작업 시작 시, 레이어 상에 특화된 ‘GRASS 편집’ 렌더링 작업자를 자동적으로 설정하며 편집 작업 종료 시 원래 렌더링 작업자로 되돌립니다. 레이어 속성 대화창의 Style 탭에서 스타일을 사용자 지정할 수도 있습니다. 다른 모든 스타일과 마찬가지로, 스타일을 프로젝트 파일에 저장할 수도 있고 개별 파일에 저장할 수도 있습니다. 스타일을 사용자 지정하는 경우, 명칭은 변경하지 마십시오. 왜냐하면 편집 작업을 다시 시작할 때 명칭을 사용해서 스타일을 리셋하기 때문입니다.

참고

레이어 편집 중에 프로젝트 파일을 저장하지 마십시오. 레이어가 변경되지 않았을 경우 아무 의미도 가지지 못 하는 ‘편집 스타일’과 함께 레이어를 저장할 것이기 때문입니다.

스타일은 속성 테이블에 topo_symbol 이라는 필드로 일시적으로 추가된 위상 정보를 기반으로 합니다. 편집 작업 종료 시 이 필드는 자동적으로 제거됩니다.

참고

속성 테이블에서 topo_symbol 필드를 제거하지 마십시오. 렌더링 작업자가 해당 열에 의존하기 때문에 객체가 보이지 않게 될 것입니다.

스냅

면을 형성하려면, 연결된 경계의 꼭짓점들이 정확히 동일한 좌표를 보유하고 있어야 합니다. 맵 캔버스와 벡터 맵이 동일한 좌표계인 경우에만 스냅 도구를 사용해서 동일한 좌표를 부여할 수 있습니다. 그렇지 않은 경우, 벡터 맵 좌표를 맵 캔버스 좌표로 변환하고 다시 그 반대로 변환하는 과정에서 표현 오류 및 좌표계 변환 때문에 좌표가 조금씩 달라질 수도 있습니다.

참고

편집 작업 시 레이어의 좌표계를 맵 캔버스에도 적용하십시오.

제약 사항

한 번에 동일 벡터 안에 있는 여러 레이어들을 동시 편집할 수는 없습니다. 주된 이유는 단일 데이터 소스에 대해 여러 실행 취소 스택(stack)을 처리하는 것이 불가능하기 때문입니다.

nix osx 리눅스 및 맥 상에서는 한 번에 하나의 GRASS 레이어만 편집할 수 있습니다. 데이터베이스 드라이버를 랜덤한 순서로 종료할 수 없는 GRASS의 버그 때문입니다. 현재 GRASS 개발자들이 이 문제를 해결하고 있는 중입니다.

참고

GRASS 편집 권한

사용자가 편집하고자 하는 GRASS MAPSET 의 소유자여야만 합니다. 사용자의 소유가 아닌 MAPSET 에 있는 데이터 레이어를 편집하는 것은, 사용자가 쓰기 권한을 가지고 있더라도 불가능합니다.

GRASS 영역 도구

GRASS에서 래스터 레이어를 작업하는 경우 (공간 작업창을 설정하는) 영역(region) 정의가 중요합니다. 벡터 분석은 기본적으로 설정한 어느 영역 정의에도 제약을 받지 않습니다. 그러나 새로 생성한 모든 래스터는 원본의 범위 및 해상도에 상관없이 현재 정의된 GRASS 영역의 공간 범위 및 해상도를 적용받게 됩니다. 현재 GRASS 영역은 $LOCATION/$MAPSET/WIND 파일에 저장되는데, 이 파일은 동서남북 방향의 경계, 열 및 행의 개수, 수직 및 수평 공간 해상도를 정의합니다.

grassRegion Display current GRASS region 버튼을 통해 QGIS 맵 캔버스에서 GRASS 영역의 가시성을 켜고 끌 수 있습니다.

The region can be modified in ‘Region’ tab in ‘GRASS Tolls’ dock widget. Type in the new region bounds and resolution, and click [Apply]. If you click on [Select the extent by dragging on canvas] you can select a new region interactively with your mouse on the QGIS canvas dragging a rectangle.

g.region GRASS 모듈은 사용자의 래스터 분석 작업을 위해 적절한 영역 범위 및 해상도를 정의할 수 있는 훨씬 많은 파라미터를 제공하고 있습니다. GRASS 툴박스 를 통해 이 파라미터들을 사용할 수 있습니다.

GRASS 툴박스

grassTools Open GRASS Tools GRASS 툴박스는 선택한 GRASS LOCATIONMAPSET 안에 있는 데이터를 작업할 수 있는 GRASS 모듈 기능을 제공하고 있습니다. GRASS 툴박스를 이용하려면, 먼저 사용자가 쓰기 권한을 보유하고 있는 (사용자가 해당 MAPSET 을 생성한 경우 보통 당연히 보유하고 있습니다) LOCATIONMAPSET 을 열어야 합니다. 분석 작업 도중에 새로 래스터 및 벡터 레이어를 생성하는 경우 현재 선택 중인 LOCATIONMAPSET 에 작성해야 하기 때문입니다.

../../../_images/grass_toolbox_moduletree.png

GRASS 툴박스 및 모듈 트리

GRASS 모듈로 작업하기

GRASS 툴박스에 있는 GRASS 셸을 통해, 명령 줄 인터페이스에서 거의 모든 (300개가 넘는) GRASS 모듈을 사용할 수 있습니다. 좀 더 사용자 친화적인 작업 환경을 제공하기 위해, GRASS 플러그인 툴박스 내부의 그래픽 인터페이스 대화창에서 약 200개의 GRASS 모듈 및 기능을 사용할 수 있습니다.

A complete list of GRASS modules available in the graphical Toolbox in QGIS version 2.18 is available in the GRASS wiki at http://grass.osgeo.org/wiki/GRASS-QGIS_relevant_module_list.

GRASS 툴박스의 내용을 사용자 지정할 수도 있습니다. 이 과정은 GRASS 툴박스 사용자 지정하기 에서 설명하고 있습니다.

GRASS 툴박스 및 모듈 트리 그림에서 알 수 있는 바와 같이, 테마 별로 그룹화된 Modules Tree 또는 검색 가능한 Modules List 탭을 통해 알맞은 GRASS 모듈을 찾을 수 있습니다.

모듈의 아이콘을 클릭하면, 툴박스 대화창에 새 탭이 추가될 것입니다. 이 탭은 Options, OutputManual 이라는 하위 탭 3개를 보유하고 있습니다.

옵션

Options 탭은 보통 QGIS 맵 캔버스에 가시화된 래스터 및 벡터 레이어를 선택하고 해당 모듈에 특화된 파라미터를 입력해서 모듈을 실행할 수 있는 간소화된 대화창을 담고 있습니다.

../../../_images/grass_module_option.png

GRASS 툴박스: 모듈 옵션

이 대화창을 간소하게 유지하기 위해, 대화창에 표시되는 모듈 파라미터들이 완전하지 않은 경우가 많습니다. 심화 모듈 파라미터 및 플래그를 사용하고 싶다면, GRASS 셸을 실행해서 명령 줄에서 모듈을 구동해야 합니다.

QGIS 1.8 버전부터 Options 탭의 간소화된 모듈 대화창 하단에 [Show Advanced Options] 버튼을 지원하고 있습니다. 현재에는 활용법을 보여주기 위한 목적으로 v.in.ascii 모듈에만 추가돼 있지만, QGIS 향후 버전에서는 GRASS 툴박스에 있는 좀 더 많은 또는 모든 모듈에 추가될 수도 있습니다. 이 버튼을 누르면 GRASS 셸로 전환할 필요없이 대화창에서 완전한 GRASS 모듈 옵션을 사용할 수 있습니다.

산출물

../../../_images/grass_module_output.png

GRASS 툴박스: 모듈 산출물

The Output tab provides information about the output status of the module. When you click the [Run] button, the module switches to the Output tab and you see information about the analysis process. If all works well, you will finally see a Successfully finished message.

사용자 설명서

../../../_images/grass_module_manual.png

GRASS 툴박스: 모듈 사용자 설명서

Manual 탭은 GRASS 모듈의 HTML 도움말 페이지를 표시합니다. 심화 모듈 파라미터 및 플래그를 확인하는 데, 또는 해당 모듈의 목적에 관한 심도 있는 지식을 얻기 위해 이 탭을 사용할 수 있습니다. 각 모듈의 사용자 설명서 페이지 맨 끝에, Main Help index, Thematic indexFull index 를 가리키는 링크들이 있습니다. 이 링크들은 각각 g.manual 모듈이 제공하는 주요 도움말 색인, 테마 색인, 전체 색인으로 연결됩니다.

참고

결과를 즉시 표시하기

사용자의 맵 캔버스에 계산 결과를 즉시 표시하고 싶다면, 모듈 탭 하단에 있는 [View Output] 버튼을 누르면 됩니다.

GRASS 모듈 예제

다음 예제들이 일부 GRASS 모듈의 강력한 기능을 보여줄 것입니다.

등고선 생성하기

첫 번째 예제는 표고 래스터(DEM)로부터 벡터 등고선 맵을 생성하는 것입니다. 이 예시에서는 사용자가 GRASS 로케이션에 데이터 가져오기 에서 설명한 대로 LOCATION ‘alaska’를 설정했다고 가정합니다.

  • 먼저, grassOpenMapset Open mapset 아이콘을 클릭하고 LOCATION ‘alaska’를 선택해서 로케이션을 여십시오.

  • 이제 grassTools Open GRASS tools 아이콘을 클릭해서 툴박스를 여십시오.

  • 도구 범주 목록에서 Raster ‣ Surface Management ‣ Generate vector contour lines 를 더블클릭하십시오.

  • 이제 r.contour 모듈을 한 번 클릭하면 앞에서 설명한 것처럼 (GRASS 모듈로 작업하기 참조) 모듈 대화창이 열릴 것입니다.

  • Name of input raster map 옵션에 gtopo30 이라고 입력하십시오.

  • Increment between Contour levels selectNumber 옵션의 값을 100으로 입력하십시오. (이렇게 하면 등고선을 100미터 간격으로 생성할 것입니다.)

  • Name for output vector map 옵션에서 명칭을 ctour_100 으로 입력하십시오.

  • Click [Run] to start the process. Wait for several moments until the message Successfully finished appears in the output window. Then click [View Output] and [Close].

알래스카가 넓은 영역이기 때문에, 전체를 표시하는 데 시간이 좀 걸릴 겁니다. 렌더링이 종료된 다음, 벡터 속성 대화창 에서 설명한 대로 레이어 속성 대화창을 열어서 라인 색상을 변경하면 표고 레스터 위에 중첩한 등고선이 명확하게 보이도록 할 수 있습니다.

그 다음, 알래스카 중심부에 있는 좁은 산지 지역으로 확대하십시오. 가까이 확대해보면 등고선이 급격히 꺾여 있다는 사실을 알 수 있을 겁니다. GRASS는 벡터 맵의 전체 형태를 유지하면서도 살짝 수정할 수 있는 v.generalize 모듈을 제공하고 있습니다. 이 모듈은 서로 다른 목적에 따라 서로 다른 알고리즘을 여럿 사용합니다. 몇몇 (예를 들면 더글러스-패커 및 꼭짓점 감축) 알고리즘은 꼭짓점 가운데 일부를 제거해서 라인을 단순화시킵니다. 산출되는 벡터는 더 빨리 불러올 수 있을 것입니다. 사용자가 너무나 상세한 벡터를 가지고 있지만, 매우 소축척의 맵을 생성하기 때문에 세밀한 사항이 필요없는 경우 이런 공간 처리를 하는 것이 유용합니다.

참고

단순화 도구

QGIS도 GRASS v.generalize 모듈의 더글러스-패커 알고리즘과 동일하게 작동하는 Vector ‣ Geometry Tools ‣ Simplify geometries 도구를 보유하고 있다는 사실을 기억하십시오.

하지만, 이 예제의 목적은 다릅니다. r.contour 모듈이 생성한 등고선의 날카로운 각도를 매끄럽게 다듬어야 합니다. v.generalize 모듈의 알고리즘 가운데, 체이킨 (또는 에르미트 스플라인) 알고리즘이 바로 이런 처리를 할 수 있습니다. 다만 이런 알고리즘들이 벡터에 더 많은 꼭짓점들을 추가 할 수 있다는 사실을 잘 알고 있어야 합니다. 이런 경우 벡터를 불러오는 데 시간이 더 걸릴 수도 있습니다.

  • GRASS 툴박스를 열고 Vector ‣ Develop map ‣ Generalization 범주를 더블클릭한 다음, v.generalize 모듈을 클릭해서 모듈 옵션 대화창을 여십시오.

  • Name of input vector 옵션에 ‘ctour_100’ 옵션이 표시돼 있는지 확인하십시오.

  • From the list of algorithms, choose Chaiken’s. Leave all other options at their default, and scroll down to the last row to enter in the field Name for output vector map ‘ctour_100_smooth’, and click [Run].
  • The process takes several moments. Once Successfully finished appears in the output windows, click [View output] and then [Close].
  • 래스터 배경에서 벡터가 더 잘 보이도록 그리고 원본 등고선과 대조되도록 벡터의 색상을 변경할 수도 있습니다. 새 등고선이 원본의 전체 형태를 잘 보전하면서도 원본보다 더 매끄러워졌다는 사실을 알 수 있습니다.

../../../_images/grass_toolbox_vgeneralize.png

벡터 맵을 매끄럽게 만드는 GRASS v.generalize 모듈

참고

r.contour의 다른 활용법

동등한 다른 상황에서도 앞에서 설명한 처리 과정을 사용할 수 있습니다. 예를 들어 강수량 데이터 래스터 맵이 있을 경우, 동일한 방법으로 등강수량(isohyetal) 선 벡터 맵을 생성할 수 있습니다.

음영기복도 3D 효과 생성하기

표고 레이어를 표시하고 맵에 3D 효과를 주는 데 쓰이는 몇 가지 방법들이 있습니다. 앞에서 보인 등고선을 활용하는 것도 지형도 생산에 자주 쓰이는 인기 있는 방법 가운데 하나입니다. 3D 효과를 줄 수 있는 또다른 방법이 바로 음영기복도입니다. 먼저 DEM(표고) 래스터에서 각 셀의 경사(slope) 및 경사방향(aspect)을 계산한 다음, 하늘에 있는 태양의 위치를 시뮬레이션하고 각 셀에 그 반사율(reflectance)을 적용해서 음영기복도 효과를 생성합니다. 즉, 태양을 향해 있는 경사는 밝아지고 태양을 등지고 있는 경사는 (그림자가 져서) 어두워집니다.

  • gtopo30 표고 래스터를 불러오는 것으로 이 예제를 시작하겠습니다. GRASS 툴박스를 연 다음, 래스터 범주에 있는 Spatial analysis ‣ Terrain analysis 를 더블클릭해서 지형 분석 대화창을 여십시오.

  • 그리고 r.shaded.relief 를 클릭해서 모듈을 여십시오.

  • azimuth angle selectNumber 옵션에서 방위각을 270에서 315로 변경하십시오.

  • Enter gtopo30_shade for the new hillshade raster, and click [Run].
  • 공간 처리 과정이 완료되면, 음영기복 래스터를 맵에 추가하십시오. 회색조로 표시되는 것을 볼 수 있을 것입니다.

  • 음영기복도와 함께 gtopo30 레이어의 색상을 보려면, 범례에서 음영기복도를 gtopo30 맵 아래로 이동시킨 다음 gtopo30 레이어의 속성 대화창을 여십시오. Transparency 탭에서 투명도 수준을 약 25%로 설정하십시오.

이제 gtopo30 표고 레이어가 색상표 및 투명도가 설정된 상태로 회색조인 음영기복도 위에 표시되었을 것입니다. 음영기복도가 어떤 시각 효과를 주는지 보려면, gtopo30_shade 레이어를 껐다가 다시 켜보십시오.

GRASS 셸 사용하기

QGIS의 GRASS 플러그인은 GRASS 초보자로서 모든 모듈 및 옵션에 익숙하지 않은 사용자를 위해 설계돼 있습니다. 따라서, 툴박스에 있는 모듈 가운데 일부는 사용할 수 있는 모든 옵션을 표시하지 않으며, 일부는 아예 나타나지도 않습니다. GRASS 셸(또는 콘솔)은 사용자가 툴박스 트리에 나타나지 않는 이런 부가적인 GRASS 모듈을 사용할 수 있게 해주며, 또한 툴박스에 간소화된 기본 파라미터들만 표시되는 모듈의 부가적인 옵션들도 사용할 수 있게 해줍니다. 이번 예제에서는 앞에서 소개한 r.shaded.relief 모듈의 부가적인 옵션을 사용하는 법을 보여줄 것입니다.

../../../_images/grass_toolbox_shell.png

GRASS 셸: r.shaded.relief 모듈

r.shaded.relief 모듈은 zmult 파라미터를 받을 수 있는데, 이 파라미터는 표고 값을 X/Y 좌표 단위를 기준으로 증가시켜서 음영기복 효과를 더욱 두드러지게 만듭니다.

  • Load the gtopo30 elevation raster as above, then start the GRASS Toolbox and click on the GRASS shell. In the shell window, type the command r.shaded.relief map=gtopo30 shade=gtopo30_shade2 azimuth=315 zmult=3 and press [Enter].
  • 공간 처리 과정이 종료된 후, Browse 탭을 선택하고 새 gtopo30_shade2 래스터를 더블클릭해서 QGIS 맵 캔버스에 표시하십시오.

  • 앞에서 설명한 대로, 범례에서 음영기복 래스터를 gtopo30 래스터 아래로 이동시킨 다음, 색상이 적용된 gtopo30 레이어의 투명도를 확인하십시오. 첫 번째 음영기복도를 사용했을 때보다 3D 효과가 더욱 두드러진다는 사실을 알 수 있을 겁니다.

../../../_images/grass_toolbox_shadedrelief.png

GRASS r.shaded.relief 모듈로 생성한 음영기복도 표시하기

벡터 맵에서의 래스터 통계

다음 예제에서는 GRASS 모듈이 어떻게 래스터 데이터를 합치고 벡터 맵에 있는 각 폴리곤에 대한 통계 열들을 추가하는지 보여줄 것입니다.

  • Again using the Alaska data, refer to GRASS 로케이션에 데이터 가져오기 to import the trees shapefile from the shapefiles directory into GRASS.
  • 이제 중간 단계를 처리해야 합니다 – 가져온 삼림 맵을 (경계 및 중심 둘 다 포함한) 완전한 GRASS 면 벡터로 만들려면 중심을 추가해야만 합니다.

  • 툴박스에서 Vector ‣ Manage features 를 선택한 다음, v.centroids 모듈을 여십시오.

  • Name for output vector map 옵션에서 명칭을 forest_areas 로 입력한 다음 모듈을 실행하십시오.

  • 이제 forest_areas 벡터를 불러와서 삼림 유형을 – 낙엽수림, 상록수림, 혼효수림 – 서로 다른 색상으로 표시하십시오. 레이어 속성 대화창의 Symbology 탭에서 Legend type selectString 옵션을 ‘Unique value’로 선택하고 Classification field 옵션을 ‘VEGDESC’으로 설정하십시오. (Style Properties 절의 Symbology 탭에 관한 설명을 참조하세요.)

  • 그리고 GRASS 툴박스 대화창을 다시 열고 다른 맵으로 Vector ‣ Vector update 를 여십시오.

  • v.rast.stats 모듈을 클릭한 다음 gtopo30forest_areas 를 입력하십시오.

  • Only one additional parameter is needed: Enter column prefix elev, and click [Run]. This is a computationally heavy operation, which will run for a long time (probably up to two hours).
  • 마지막으로, forest_areas 레이어의 속성 테이블을 열고 각 삼림 폴리곤에 대해 elev_min, elev_max, elev_mean 등을 포함한 새 열들 여럿이 추가된 것을 확인하십시오.

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>

The parser reads this definition and creates a new tab inside the Toolbox when you select the module. A more detailed description for adding new modules, changing a module’s group, etc., can be found on the QGIS wiki at http://hub.qgis.org/projects/quantum-gis/wiki/Adding_New_Tools_to_the_GRASS_Toolbox.