qgis 고급 및 pyqgis - 김기웅, 임영현

50
2014 년 1 년 6~10 년 년년년년년 년년년년 년년년년 년년 년년 GIS 년년 년년년년년년 년년년 ([email protected] ) / 년년년 ([email protected]) Quantum GIS Tutorial (QGIS 년년 년년 년 PyQGIS) 한한한 한한

Upload: sanghee-shin

Post on 11-May-2015

7.031 views

Category:

Technology


2 download

DESCRIPTION

2014년도 공간정보거점대학 '오픈 소스 GIS 개론 과정' 교육 QGIS 고급 기능 및 PyQGIS - 김기웅([email protected]), 임영현([email protected])

TRANSCRIPT

Page 1: QGIS 고급 및 PyQGIS - 김기웅, 임영현

2014 년 1 월 6~10 일 국토해양부 공간정보 거점대학

오픈 소스 GIS 과정

㈜망고시스템 김기웅 ([email protected]) / 임영현

([email protected])

Quantum GIS Tu-torial

(QGIS 고급 기능 및 PyQGIS)

한국어 지부

Page 2: QGIS 고급 및 PyQGIS - 김기웅, 임영현

III. QGIS 고급 기능

- 일러두기 -

• 본 교재는 미국 하버드 대학교 Center for Geographic Analysis 의 QGIS Workshop Manual 의 내용을 일부 포함하고 있습니다 .

• 하버드 대학교의 해당 자료는 http://maps.cga.harvard.edu/qgis/ 에서 살펴볼 수 있습니다 .

• 하버드 대학교의 자료와 본 자료는 모두 Creative Commons License CC-BY-NC 을 따릅니다 .

• 본 교재에서는 교육의 편의상 Windows 기반의 QGIS 위주로 설명합니다 .

• 본 교재에서 사용하는 이미지의 QGIS 버젼은 교육용 버젼과 다를 수 있으나 , 기능상 차이는 없습니다 .

한국어 지부

Page 3: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

3

III-1. 연결 (Join)

속성 연결 (Tabular Join)

① [Layer] -> [Add Vector Layer] 를 실행하여 , 샘플 데이터 중 admin_emd.shp 열기 ② [Layer] -> [Add Delimited Layer] 를 실행하여 , 샘플 데이터 중 admin_cnt.csv 를 열되 파일 포맷을 ‘ CSV(comma separated value)’ 를 선택하여 열기

‘③ Active Layer’ 로 admin_emd.shp 을 선택한 뒤 , 마우스 오른쪽 버튼을 눌러 [Properties] 실행 ④ [Properties] 창에서 [Joins] 탭 선택한 뒤 , 버튼을 눌러 실행 ‘⑤ Join Layer’ 에 ‘ admin_cnt’ 선택 , ‘Joins Filed’ 와 ‘ Target Field’ 에 모두 EMD_CD 를 선택

⑥ 이후 모두 [OK] 버튼을 눌러 속성 연결한 뒤 속성 조회

Page 4: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

4

III-1. 연결 (Join)

공간적 연결 (Spatial Join)

① [Layer] -> [Add Vector Layer] 를 실행하여 , 샘플 데이터 중 admin_emd.shp 열기 ② [Layer] -> [Add Vector Layer] 를 실행하여 , 앞서 만든 admin_cnt.shp 열기 ③ [Vector] -> [Data Management Tools] -> [Join Attributes by Location] 실행 ‘④ Join Attributes by Location’ 창에서 ‘ Target Vector Layer’ 에 admin_cnt , ‘Join Vector Layer’ 에 ad-min_emd 설정

‘⑤ Output Shape File’ 을 [admin_emd_join] 으로 설정하고 실행 후 테이블 속성 확인

서울시 동 내에 있는 특정 점에 동의 속성 정보를 연결해 주기

Page 5: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

5

벡터 레이어 생성 및 편집 – 1

① [Layer] -> [New] -> [New Shape file layer] 선택 ‘② New Vector Layer’ 창에서 Type 으로 Polygon 설정 .

CRS 는 해당 CRS 설정 ③ 속성 필드 설정을 위해 ‘ New attribute’ 하단의

‘ Name’ 에 ‘ name’ 입력 . Type 은 Text data 설정하고 ‘ Add to attributes list’ 버튼으로 추가

④ 필요한 경우 추가 속성 필드를 설정하고 ‘ Add to at-tributes list’ 버튼으로 추가하고 [OK] 버튼 클릭한 뒤 파일이름을 ‘ new_river.shp’ 로 저장

벡터 레이어 생성

III-2. 벡터 편집

Page 6: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

6

벡터 레이어 생성 및 편집 – 2

디지타이징 환경 설정

① [Settings] -> [Options] 실행

② [Digitize] 탭 선택

③ “Default snap mode’ 를 ‘ To vertex and segment’ 로 설정

④ Default snapping toler-ance 를 10 pixels 로 설정

⑤ Search radius for vertex edits 를 10 pixels 로 설정

III-2. 벡터 편집

※ Map units 와 Pixels 의 차이점…

6

Page 7: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

7

벡터 레이어 생성 및 편집 – 3

디지타이징

① 배경 영상으로 landsat 을 활용 , Active Layer 로 new_river 설정 ② [Layer] -> [Toggle Editing] 을 켜거나 , 도구모음에서 눌러 편집 시작

③ 버튼을 선택하여 객체 생성 시작④ 편집이 끝나면 다시 눌러 편집 모드 종료 후 편집 저장

디지타이징 중이나 편집 시 화면 이동은 스페이스바를 누른 채 마우스 이동

1. 현재 편집 수정2. 편집 모드 설정3. 저장4. 객체 생성5. 객체 이동6. 버텍스나 선 편집7. 선택 객체 삭제8. 객체 잘라내기9. 객체 복사10. 객체 붙여넣기

1

2

3

4

5

6

7

8

9

III-2. 벡터 편집

10

Page 8: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

8

III-3. 레이어 꾸미기

벡터 레이어 다루기 - Categorized

① ‘ 지도 범례 (Layers)’ 에 있는 admin_emd 를 더블클릭하여 [Properties] 창 열기 ② [Properties] 창에서 [Style] 탭 선택 실행 ③ [Style] 탭의 [Transparency] 를 50% 로 설정 ④ [Style] 탭의 스타일 유형을 ‘ Single Symbol’ 에서 ‘ Categorized’ 로 변경 ⑤ [Style] 탭의 [Column] 에서 ‘ SGG_NM’ 필드를 선택하고 적절한 [Color ramp] 를 선택 ⑥ [Classify] 버튼 실행 및 미리 보기를 원하면 [Apply] 버튼을 누르고 , 마음에 들면 [OK] 버튼 클릭

Page 9: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

9

III-3. 레이어 꾸미기

벡터 레이어 다루기 - Graduated

① ‘ 지도 범례 (Layers)’ 에 있는 admin_emd 를 더블클릭하여 [Properties] 창 열기 ② [Properties] 창에서 [Style] 탭 선택 실행 ③ [Style] 탭의 [Transparency] 를 20% 로 설정 ④ [Style] 스타일 유형을 ‘ Single Symbol’ 에서 ‘ Graduated’ 로 변경 ⑤ [Style] 탭의 [Column] 에서 ‘ POP_DEN’ 필드를 선택하고 [Color ramp], [Classes], [Mode] 를 선택 ⑥ [Classify] 버튼 실행 및 미리 보기를 원하면 [Apply] 버튼을 누르고 , 마음에 들면 [OK] 버튼 클릭

Page 10: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

10

래스터 레이어 다루기

III-3. 레이어 꾸미기

① 배포된 ‘ 02_GeoData 폴더’ -> ‘seoul_raster’ 폴더 밑에 있는 dem30, shadedrelief 불러오기② 레이어 순서를 dem30 shaderelief 순으로 정렬③ dem30 레이어를 더블클릭하여 등록정보 불러오기④ [Transparency ] 탭에서 Dem30 레이어의 투명도 40 으로 조절⑤ [Style] 탭에서 [Render Type] 을 singleband pseudocolor 로 선택⑥ Color ramp 선택 후 [Classify] 버튼 클릭 후 [OK] 버튼 눌러 심볼 설정

Page 11: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

11

질의 후 다른 포맷으로 내보내기 ① [ 지도 범례 (Layer)] 에서 admin_emd 선택 후 도구모음에서 (Open Attribute Table) 클릭

② [Attribute Table] 도구에서 클릭 , 또는 선택 , 또는 Citl + F 누름 ( 질의를 통한 Feature 선택 )

③ [Expression based filter] 창의 ‘ Fields and Values’ 에서 ‘ POP2008’ 을 더블클릭 후 ‘④ Expression’ 를 "POP2008" > 23000 와 같이 완성 후 [OK] 버튼 클릭 ⑤ [Layer] -> [Save Selection as Vector File..] 실행 후 Format 을 KML, 저장위치 및 명칭 선택 , CRS 는 Se-

lected CRS WGS84(EPSG:4326) 으로 설정 후 저장 ⑥ 저장된 KML 파일을 더블클릭하여 Google Earth 를 통해 해당 정보 확인 , QGIS 2.0 버전부터는

심볼도 인코딩 됨

III-4. 내보내기

Page 12: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

① [View] -> [Identify Features] 나 도구모음에서 를 누른 뒤 조회하고자 하는 객체를 클릭② 현재 선택된 레이어만이 아닌 다중 레이어를 동시에 조회하고 싶으면 [Settings] -> [Op-

tions] 의 [Map to…] 탭의 Identify Mode 를 ‘ Top down’ 으로 변경 ③ 기타 배경 지도로만 사용하고 속성값을 조회하고 싶지 않은 경우에는 [Project] -> [Project

Properties] 의 [Identify Layers] 에서 Identifiable 체크 박스를 끄면 됨 .

12

속성 정보 조회 (Identify)

III-5. 속성 정보 검색 및 질의

지도에서 레이어의

속성 정보 조회

Page 13: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

① Active Layer 를 admin_emd 로 선택② [Layer] -> [Query...] 메뉴 또는 , TOC 의 admin_emd 에서 마우스 오른쪽 버튼

-> [Filter…] 선택③ [Query Builder] 창에서 [Fields] 는 ‘ SGG_NM’ 더블클릭 , [Operator] 는 ‘ =‘

더블클릭 , [Values] 는 [Sample] 버튼을 선택하여 나오는 리스트에서 ‘강남구’ 더블클릭

④ 아래 [expression] 이 “ SGG_NM” = “ 강남구” 인지를 확인 후 [OK] 버튼 선택⑤ 필터링 된 도형 및 속성정보 확인 후 [Query Builder] 창을 다시 열어 [expres-

sion] 을 모두 삭제하고 [OK] 버튼 선택

13

속성 정보 검색 및 질의 – 1

III-5. 속성 정보 검색 및 질의

레이어 Filter

Page 14: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

① [Layer] -> [Open Attribute Table] 또는 도구모음에서 를 클릭

14

속성 정보 검색 및 질의 – 2

검색

속성값이 아닌 테이블 자체를 관리하고 싶으면 Table Manager PlugIn 을 사용하는 게 편리

III-5. 속성 정보 검색 및 질의

편집 시작 / 종료 선택 피쳐로 지도를 이동 ( 확대 , 축소 없이 )

편집 저장 ( 편집모드 ) 선택 피쳐로 지도를 확대 또는 축소

선택 피쳐 지우기 ( 편집모드 ) 선택 피쳐의 정보를 클립보드에 복사 (WKT)

질의를 통한 피쳐 선택창 열기 필드 삭제 ( 편집모드 )

선택 해제 필드 추가 ( 편집모드 )

선택된 피쳐를 최상위로 올리기 Field calculator ( 필드 계산기 ) 기존 정보를 통한 새로운 정보를 생성 좌표 ( 점 ), 거리 ( 선 ), 면적 ( 면 ) 계산

가능선택 반전

Page 15: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

① 도구모음에서 ( 속성 테이블 보기 ) 클릭 후 ( 질의를 통한 피쳐 선택 ) 선택 ② [Select By Expression] 창에서 아래 조건들을 통하여 몇 개의 피쳐가 선택되는지 확인해

보기

15

속성 정보 검색 및 질의 - 3

질의

2008 년 인구가 23,000 명 이상인 동을 찾기 (218)

“POP2008” > 23000

2008 년 인구가 23,000 명 이상인 동 중 영등포구에 있는 동만 찾기 (6)

“POP2008” > 23000 and “SGG_NM” = ‘ 영등포구’ 2008 년 인구가 23,000 명 이상인 동 중 영등포구 , 관악구 , 중랑구에 있는 동만 찾기 (30)

“POP2008” > 23000 AND “SGG_NM” IN (‘ 영등포구’ , ‘ 관악구’ , ‘ 중랑구’ )

동이름이 ‘신’으로 시작하는 동 모두 찾기 (39)

“EMD_NM” LIKE ‘ 신 %’

III-5. 속성 정보 검색 및 질의

동이름에 ‘신’을 포함하는 동 모두 찾기 (42)

“EMD_NM” LIKE ‘% 신 %’

동이름이 ‘신 XX 동’ 모두 찾기 (16)

“EMD_NM” LIKE ‘ 신 __ 동’

Page 16: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

16

Field Calculator 를 이용한 정보 갱신

III-5. 속성 정보 검색 및 질의

Field Calculator 를 이용하여 속성 정보의 수정 , 변환 , 기하정보 추가 등이 가능

① Field Calculator 는 ‘ Attribute Table Viewer’에서 버튼으로 편집모드 중일때 활성화됨

② Field Calculator 는 연산자 , 수학함수 , 변환함수 , 문자함수 , 기하함수 등을 제공하여 사용자가 필드와 공간 정보를 활용하여 새로운 정보를 생성할 수 있도록 함

③ Field Calculator 는 기존에 존재하는 필드에 값을 계산하거나 계산과 동시에 새로운 필드를 추가할 수 있음

편집시작 / 종료 Field Calculator 버튼

연습 문제 : Field Calculator 를 이용하여 2008 년 동별 인구밀도 구하기※ 인구밀도 : 1 ㎢ 당 인구의 수 , 동별인구를 면적으로 나눈 수 동의 면적의 단위를 ㎢로 변경하기 위해 1,000,000 을 나눔

"POP2008" / ( "Shape_Area" / 1000000) 또는 "POP2008" / ( $area / 1000000)

Page 17: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

17

공간 질의 및 공간 프로세싱 – 1

III-6. 공간 질의 및 공간 프로세싱

8 차선 이상 도로로부터 직선거리 500m 이상 떨어져 있는 소방서 찾기 ① ‘Seoul’ 폴더에서 road_link2 와 firestation 열기 , Active Layer 는 road_link2 선택② 도구모음에서 ( 속성 테이블 보기 ) 클릭 후 ( 질의를 통한 피쳐 선택 ) 선택③ 8 차선 이상 도로 확인 : Expression 으로 “ LANES” >= 8 선택 후 Map 에서 8 차선 이상 도로

확인④ 직선거리 500m 영역만들기 : [Vector] -> [Geoprocessing Tools] -> [Buffer] 를 실행 > Input vector layer : road_link2

> Use only selected features 선택 > Buffer distance : 500

> Dissolve buffer results 선택 > 저장명칭은 [buffered_road.shp] 으로 설정후 버퍼 실행 > TOC 에 결과를 지도에서 확인

Page 18: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

18

공간 질의 및 공간 프로세싱 – 1 ( 계속 )

III-6. 공간 질의 및 공간 프로세싱

8 차선 이상 도로로부터 직선거리 500m 이상 떨어져 있는 소방서 찾기 ⑤ [buffered_road.shp] 으로 부터 떨어져 있는 소방서 찾기 : [Vector] -> [Spatial Query] -> [S-patial Query] 실행

> Select source features from : firestation ( 선택 할 피쳐는 소방서 )

> Where the feature : Is disjoint ( 어떤 피쳐를 선택할지는 포함되지 않은… )

> Reference features of : buffered_road ( 공간적으로 참조되는 피쳐는 버퍼된 도로 )

> [Apply] 버튼을 선택하여 공간 쿼리를 실행하여 선택된 소방서 확인⑥ (Create layer with selected) 버튼을 선택하여 레이어로 생성

Page 19: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

19

공간 질의 및 공간 프로세싱 – 2

동별로 되어 있는 SHP 을 구별 정보로 재가공 ① [admin_emd] 레이어를 활용하여 시군구 경계 레이어 생성

② [Vector] -> [Geoprocessing Tools] ->[Dissolve] 선택 ‘③ Dissolve’ 창에서 Input Vector Layer 로 admin_emd 선택 .

④ 이후 ‘ Dissolve Field’ 로 ‘ SGG_NM’ 선택 . 결과 파일로 ‘ admin_gu.shp’ 지정하고 [OK] 클릭⑤ 결과 파일을 TOC 에 로드하고 [Layer] -> [Labeling] 실행

‘⑥ Layer Labeling Settings’ 창에서 ‘ Label this layer with’ 를 선택하고 SGG_NM 설정 , [OK] 클릭

III-6. 공간 질의 및 공간 프로세싱

Page 20: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

20

공간 질의 및 공간 프로세싱 – 3

한강의 본류 (RIVER_CD = 1) 를 포함하고 있는 구별 한강 면적 구하기 ① ‘Seoul’ 폴더에서 river 열기② river 에서 본류만 선택 : Open Attribute table ( ) -> Select features using an Expression (

) -> Expression 으로 “ RIVER_CD” = ‘1’ 설정 -> 선택 ( )

③ [Vector] -> [Geoprocessing Tools] -> [Intersect] 실행 > Input vector layer : admin_gu

> Intersect layer : river

> Use only selected features 선택 > Output Shapefile : [gu_over_river.shp] 으로 지정④ [OK] 버튼으로 Intersec 를 실행하고 결과를 TOC 에 추가

III-6. 공간 질의 및 공간 프로세싱

Page 21: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

21

공간 질의 및 공간 프로세싱 – 3 ( 계속 )

한강의 본류 (RIVER_CD = 1) 를 포함하고 있는 구별 한강 면적 구하기 ⑤ gu_over_river 에서 같은 구를 하나로 병합 : [Vector] -> [Geoprocessing Tools] -> [Dissolve] 실행

> input vector layer : gu_over_river

> Dissolve field : [SGG_NM]

> Output shapefile : [gu_over_river_dis.shp] 으로 지정⑥ [OK] 버튼으로 Dissolve 를 실행하고 결과를 TOC 에 추가⑦ gu_over_river_dis 에서 Open Attribute table ( ) -> Toggle editing mode ( ) : 편집모드

시작⑧ 필드삭제 ( ) 버튼을 선택하여 [SID_NM], [SGG_NM] 필드를 제외한 나머지 필드 모두 삭제⑨ Open field calculator ( ) 버튼을 선택하여 한강의 면적 계산 > Create a new field

> Output field name : RIVER_AREA

> Output field type : Decimal number

> Output field width : 11 / Precision : 9

> Expression : $area

⑩ [OK] 버튼으로 면적을 계산 후 확인 ⑪ 편집모드를 종료하면서 변경사항 저장

III-6. 공간 질의 및 공간 프로세싱

Page 22: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

22

출력용 지도 만들기

① 출력을 위해 적절히 지도를 디자인 (ex. 서울시 2008 년 인구 주제도 )

② [Project] -> [New Print Composer] 실행 후 , Title 을 적절히 입력 (ex. 서울 주제도 )

③ [Composer] -> [Page Setup] 을 선택하여 , A4 크기의 방향은 가로로 선택 후 [ 확인 ]

④ [View] -> [Zoom Full] 선택 후 ‘ Print Composer’ 창에 지도와 제목 , 범례 , 축척 등을 추가 ⑤ 각 객체들에 대해 스타일링을 적절하게 조절

III-7. 레이아웃 및 출력

Page 23: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

23

8-1. Table Manager

- Attribute 테이블의 필드를 추가 / 삭제 / 복사 하거나 필드의 순서를 변경하고 , 필드의 명칭을 수정하는 등 속성 테이블에 대한 관리

① [Plugins] -> [Manage and Install Plugins…] 선택 ② [Get more] 탭에서 “ table” 로 검색 후 [Table Manager] 설치 ③ Active 레이어를 admin_emd 로 선택하고 , [Vector] -> [Table manager] -> [Table manager] 선택 ④ Attribute 테이블의 필드에 대한 순서변경 , Rename, Delete, Insert, Clone 이 가능하고 변경된 사항을

저장하거나 , 다른 이름으로 저장 하는 등 속성 테이블의 관리가 용이함

III-8. QGIS PlugIns 활용

Page 24: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

24

8-2. Heatmap Plugin (QGIS 2.0.1 기본 설치 )

- Point 레이어의 개수 또는 속성값을 통해 온도지도 (HeatMap) 을 생성 ‘① Seoul’ 폴더에서 [subway_11월승차인원 ] 열기 ( 데이터 출처 : 서울 열린 데이터 광장 )

② [Raster] -> [Heatmap] -> [Heatmap] 실행 > Input point layer : subway_11월승차인원 > Output raster : [heatmap] 으로 저장 > Output format : GeoTIFF

> Radius : 800 meters

> Advanced 체크 선택 > Cell size X : 30 / Cell size Y : 30

> Use weight from field : [RIDE_NUM]

③ [OK] 를 선택하여 온도지도 생성 ④ [heatmap] 의 속성정보에서 스타일 변경

III-8. QGIS PlugIns 활용

Page 25: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

25

8-3. GEarthView Plugin

- QGIS 에서 현재 보고있는 지도를 이미지화 하여 GoogleEarth 에서 볼수 있도록 해주는 플러그인 ① [Plugins] -> [Manage and Install Plugins…] 선택 ② [Get more] 탭에서 “ GEarthView” 로 검색 후 [GEarthView] 설치 ③ [heatmap] 레이어만 Visible 을 선택하고 나머지 레이어는 모두 끄기 ④ [Plugins] -> [GEarthView] -> [GEarthView] 실행

⑤ Google Earth 가 실행되고 현재 QGIS 의 지도가 해당 위치에 나타나는지 확인

III-8. QGIS PlugIns 활용

QGIS 에서 투명도 (Transparency) 를 설정하면 GoogleEarth 에서 투명도가 적용 됨

Page 26: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

26

8-4. Raster Terrain Analysis Plugin (QGIS 2.0.1 기본 설치 )

- DEM(Elevation Layer) 을 활용하여 경사 (Slope), 향 (Aspect), 음영기복 (Hillshade) 등 다양한 지형분석을 수행하는 플러그인

‘① Seoul_raster’ 폴더에서 [dem30] 열기 ② [Raster] -> [Terrain Analysis] -> [Slope] 실행

> Elevation layer : dem30

> Output layer : [slope30] 으로 저장 > Output format : GeoTIFF

> Add result to project 체크 선택 ③ [OK] 를 선택하여 경사도 (Slope) 생성 ④ [slope30] 의 속성정보에서 스타일 변경

III-8. QGIS PlugIns 활용

Page 27: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

27

8-5. Profile Tool Plugin

- DEM(Elevation Layer) 레이어 등 Raster 레이어를 활용하여 사용자가 선택한 구간 (Line)의 종단면 그래프를 생성하는 플러그인

① [Plugins] -> [Manage and Install Plugins…] 선택② [Get more] 탭에서 “ Profile tool” 로 검색 후 [Profile tool] 설치③ TOC 에서 Active 레이어로 dem30 을 선택④ [Plugins] -> [Profile Tool] -> [Terrain Profile] 실행⑤ Profile Tool 창이 나타나면 종단면을 생성할 위치로 확대⑥ 다시 [Plugins] -> [Profile Tool] -> [Terrain Profile] 을 선택하면 마우스 포인터가 십자가로 변하고 종단면 생성을 위해 Map 에 라인을 생성 , 마지막으로 더블클릭하여 라인 생성을 마침⑦ 생성된 종단면 그래프를 확인

III-8. QGIS PlugIns 활용

Page 28: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

28

8-6. Point Sampling Tool Plugin

- Point 의 위치에 해당하는 Polygon 의 값 또는 Raster 의 Value 를 탐색하여 Point 의 속성으로 샘플링( 추가 ) 하는 플러그인

① [Plugins] -> [Manage and Install Plugins…] 선택 ② [Get more] 탭에서 “ Point sampling tool” 로 검색 후 [Point sampling tool] 설치

③ ‘Seoul’ 폴더에서 [policestation], [admin_emd] 열기④ TOC 에는 [policestation], [admin_emd], [slope30], [dem30]

모두 Visible 이 켜져 있어야 함⑤ [Plugins] -> [Analyses] -> [Point sampling tool] 실행 > Layer containing sampling points : policestation

> Layers with fields/bands to get values from

에서 아래의 항목을 선택 - admin_emd : EMD_CD (Polygon)

- slope30 : Band 1 (raster)

- dem30 : Band 1 (raster)

> Output point vector layer : [sampling.shp] 으로 설정 > Add Created layer to the TOC 선택

III-8. QGIS PlugIns 활용

Page 29: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

29

8-6. Point Sampling Tool Plugin ( 계속 )

⑥ [Fields] 탭에서는 추출된 값들이 저장될 필드의 명칭을 설정 할 수 있음 ⑦ [OK] 버튼을 선택하여 분석을 실행 ⑧ [sampling] 레이어의 속성창을 열어 샘플링된 값을 확인

> EMD_CD : [admin_emd] 에서 읍면동코드를 추출 > slope30 : [slope30] 에서 경사도 값을 추출 > dem30 : [dem30] 에서 표고 값을 추출

III-8. QGIS PlugIns 활용

Page 30: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

30

Geoprocessing 툴박스 및 모델러 제공

① [Processing] -> [Toolbox] 실행 ② GDAL/OGR, GRASS, SAGA, R 등 오픈소스 기반의 공간분석 도구 제공

III-9. 고급 Geoprocessing 도구

Page 31: QGIS 고급 및 PyQGIS - 김기웅, 임영현

IV. PyQGIS 익히기-일러두기 –

- 본 교재는 다음의 내용을 토대로 제작되었습니다 .

• PyQGIS Developer Cookbook : http://www.qgis.org/pyqgis-cookbook/index.html

• Quantum GIS API Documentation : http://doc.qgis.org/api/index.html

• FOSS4G Korea Technical Workshop: http://www.osgeo.kr/84

• QGIS Workshop: http://www.qgisworkshop.org/html/workshop/index.html

• Script Runner: http://spatialgalaxy.net/2012/01/29/script-runner-a-plugin-to-run-python-scripts-in-qgis/

• The Python Tutorial: http://docs.python.org/2/tutorial/index.html

한국어 지부

Page 32: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

32

PyQGIS 소개

Python, QT, PyQT

Python in QGIS

Python Console, Python Plugins, Python Applications

개발환경 준비

Python IDLE, QGIS Script Runner

Quantum GIS API 이해

Module: core, gui, analysis…

Interface: QgisInterface(iface), canvas, DataProvider, Layer(Vector, Raster, Plugin

layer), QgsFeature, QgsField, QgsGeometry

Python Coding Style

PyQGIS Console 활용

Accessing & loading vector/raster layer

Accessing geometry & attributes

PyQGIS Script Runner 활용

Layer Operation

IV-1. 목차

Page 33: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

33

PyQGIS 란 ?

IV-1. PyQGIS 소개

QGIS Python bindings

① Python • Python is a fun and powerful programming language used in web applications and

desktop software. It can also be found wrapping OSGeo-backed libraries such as GDAL/OGR, JTS and GEOS

② QT• Qt (pronounced: cute ) is an open-source cross-platform application framework (a

set of tools) developed by Nokia for building graphical user interfaces (GUIs) and software. You’ve probably worked with Qt designed software if you’ve touched these programs: Google Earth, Virtual Box, Skype, Autodesk or Android smart-phones.

③ PyQT• PyQt is a Python binding of the cross-platform GUI toolkit Qt

Page 34: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

34

PyQGIS 를 활용하는 방법

IV-2. Python in QGIS

① Python Console

• a command-line terminal inside QGIS to test ideas and do one-off quick jobs

• ArcGIS Python Window

② Python Plugins

• creating/extending editing tools that interact with data inside the QGIS environment

• ArcGIS ArcToolbox Script

③ Python Applications

• writing Python applications from scratch that are built off QGIS and Qt li-braries. These applications would process spatial data outside the QGIS application but use core functionality under the hood

• ArcGIS Server & Engine + GeoProcessing Script

Page 35: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

35

Script Runner Plugin 설치

IV-3. 개발환경 준비

플러그인 작성없이 외부에서 작성한 PyQGIS 스크립트를 실행하는 도구 ① [Plugins] -> [Manage and Install Plugins…] 실행② [Get more] 탭에서 Script Runner

③ Script Runner plugin 선택 후 설치

출처 : http://spatialgalaxy.net/2012/01/29/script-runner-a-plugin-to-run-python-scripts-in-qgis/

Page 36: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

36

Python IDLE(Integrated DeveLopment Environment) 설치

IV-3. 개발환경 준비

Python 통합 개발 환경 ① http://python.org/download 에 접속② Python 2.7.x 버전 다운로드 후 설치③ 코드 편집용이므로 일반 텍스트 편집기를 이용해도 됨

Page 37: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

37

GIS Objects 및 Application 의 구성

IV-4. Quantum GIS API 이해

출처 : OGC: GO(Geographic Objects )-1 Application Objects. Retired

Page 38: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

38

Plugin 사용하기

IV-4. Quantum GIS API 이해

Quantum GIS API Documentation: http://doc.qgis.org/api/index.html

① 모듈 구성 QGIS core library QGIS gui library. QGIS analysis library.

QgsGeometryAnalyzer QgsOverlayAnalyzer

MapComposer QGIS network analysis library.

② 주요 클래스 QgisInterface(iface) QgsMapCanvas QgsDataProvider QgsLayer

Vector, Raster, Plugin Layer QgsFeature QgsField QgsGeometry

Page 39: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

39

QGIS Data Provider, Map Layer, Feature, Geometry

IV-4. Quantum GIS API 이해

Page 40: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

40

GIS Map Canvas

IV-4. Quantum GIS API 이해

Page 41: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

41

QGIS Vector Layer

IV-4. Quantum GIS API 이해

Page 42: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

42

QGIS Raster Layer

IV-4. Quantum GIS API 이해

Page 43: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

43

Python Coding Style

IV-5. Python Coding Style

① Use 4-space indentation, and no tabs. Tabs introduce confusion, and are best left out.

② Wrap lines so that they don’t exceed 79 characters.③ Use blank lines to separate functions and classes, and larger blocks of code inside func-

tions.④ When possible, put comments on a line of their own.⑤ Use docstrings.⑥ Use spaces around operators and after commas, but not directly inside bracketing con-

structs: a = f(1, 2) + g(3, 4).

⑦ Name your classes and functions consistently The convention is to use CamelCase for classes and lower_case_with_underscores for

functions and methods. Always use self as the name for the first method argument (see A First Look at Classes

for more on classes and methods).⑧ Don’t use fancy encodings if your code is meant to be used in international environments.

Plain ASCII works best in any case.

Page 44: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

44

Python Console 사용

IV-6. PyQGIS Console

QGIS 에 내장된 Python Console 을 사용하여 레이어 다루기

① QGIS 실행 후 seoul shapefile 및 dem 추가② Python 맛보기③ Accessing & loading vector/raster layer

④ Accessing geometry & attributes

from qgis.core import * import qgis.utils

Page 45: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

45

PyQGIS Script Runner

IV-7. PyQGIS Script Runner

Script Runner 를 이용하여 Python IDLE 등에서 작성한 스크립트 실행하기① Plugin 툴바 또는 메뉴에서 Script Runner( ) 실행 ② 실습 파일 편집 및 실행

Page 46: QGIS 고급 및 PyQGIS - 김기웅, 임영현

V. 유용한 정보들

한국어 지부

Page 47: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

47

Plugin 사용하기

V. 유용한 정보들

QGIS 는 기본 플러그인 외에도 다양한 3rd Party 플러그인을 활용 가능 ① [Plugins] -> [Manage and Install Plugins…] 실행

② [Plugin Manager] 창에서 ‘ Settings’ 탭 선택 ③ 우하단의 [Add..] 버튼을 클릭

④ www.qgis.org/wiki/Python_Plugin_Repositories 의 정보를 참조하여 개인적으로 추가

Page 48: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

48

QGIS 메뉴 한글화하기 및 한국 좌표계 설정하기

V. 유용한 정보들

QGIS 에서 한글 메뉴

사용하기

QGIS 에서 한국 좌표계

사용하기

http://www.osgeo.kr/44

http://www.osgeo.kr/15 http://www.osgeo.kr/87

QGIS 에서 1.8 에서 한글

사용하기

http://www.osgeo.kr/75

Page 49: QGIS 고급 및 PyQGIS - 김기웅, 임영현

공간정보 거점대학 오픈 소스 GIS 과정 신상희 ([email protected]), 이민파([email protected])

49

QGIS 관련 정보 얻기

• QGIS 웹 페이지 : http://www.qgis.org

• QGIS 매뉴얼 페이지 : http://www.qgis.org/en/documentation/manuals.html

• PyQGIS 참조 페이지 : http://qgis.org/pyqgis-cookbook/

• QGIS Planet : http://planet.qgis.org/planet/

공식 페이지

• 하버드 대학교 QGIS Workshop 페이지 : http://maps.cga.harvard.edu/qgis/

• UC Davis QGIS Lab 교육 : http://www.plantsciences.ucdavis.edu/plant/qgislabs.htm

• Scratching Surfaces : http://www.surfaces.co.il/?p=872

• Nathans QGIS 블로그 http://woostuff.wordpress.com/

• Spatial Galaxy : http://spatialgalaxy.net/

• OSGeo 한국어 지부 : http://www.osgeo.kr

• OSGeo 한국어 지부 메일링 리스트 : http://groups.google.com/group/osgeo-kr

기타 참조할 곳

IV. 유용한 정보들

Page 50: QGIS 고급 및 PyQGIS - 김기웅, 임영현

감사합니다 .

Q&A

한국어 지부 함께 성장하는 새로운 방법 , 오픈 소스 소프트웨어 !!