2. 목차
I. 벡터자료를 이용한 지도서비스
III. WPS를 이용한 고급 스타일링
- QGIS에서 지도 구성하기
- Heat Map, Point Cluster 샘플
- OpenGeo Explorer를 이용한 Publish
- PostGIS에 GIS 업체자료 올리기
- GeoServer에서 지도 서비스하기
- WPS를 이용한 스타일 적용
II. 대용량 위성사진 서비스
IV. 공간자료와 통계의 연결
- World Image로 서비스
- PostGIS에 행정구역 자료 올리기
- GeoTiff로 서비스
- PostGIS에 인구통계 올리기
- 성능개선 및 지도와 서비스
- 인구수를 색상으로 표현하기
- 인구와 성비를 그래프로 표현하기
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
2
장병진 (bjjang@gaia3d.com)
3. 0. GeoServer란?
GIS 데이터를 웹에 공개(Publish)하기 위한 서버
지원 운영 체제
GeoServer
MS Windows
Mac OSX
Linux, Unix
WMS
WFS
GPL
Raster
Source
기반 언어
최신버전
png, jpeg, gif
Feature
Object
GML, GeoJSON
WCS
Coverage
Data
ArcGrid, GeoTiff,
bmp
Vector
Source
라이선스
JAVA
Formatted
Map
Vector Source: Shape, GeoDB(PostGIS, Oracle Spatial 등)
Raster Source: GeoTiff, World Image, IMG, ArcGrid
2.4.3
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
3
장병진 (bjjang@gaia3d.com)
4. 0. 강의자료 준비
필요 프로그램
– OpenGeo Suite Community Edition 3.0.2
• GeoServer 2.2.1
• PostgreSQL 9.1.4
• PostGIS 2.0
• http://boundlessgeo.com/solutions/opengeo-suite/download/
– QGIS 2.0.1
• http://qgis.org/en/site/forusers/download.html
– Notepad++
• http://notepad-plus-plus.org/download/
필요 자료
– Http://osgeo.ipdisk.co.kr osgeo/osgeo
– /HDD1/Edu/20140120_이화여대/02_실습예제
– 한반도 벡터지도
– 한반도 LANDSAT 8 영상
– 2013년 현재 국내 GIS 관련 업체 현황
– 2013년 전국 행정구역도
– 2013년 전국 주민등록 인구통계
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
4
장병진 (bjjang@gaia3d.com)
5. I. 벡터자료를 이용한 지도서비
스
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다.
6. I-1. QGIS에서 지도 구성하기
실습 데이터 설정
1) 데이터 다운로드
– http://osgeo.ipdisk.co.kr 접속
– HDD1/Edu/20140120_이화여대/02_실습예제
/01_GeoServer/VectorMap.zip 다운로드
2) 벡터지도 폴더 만들기
– 윈도우 탐색기 실행
– C:OpenGisEduDataVectorMap.zip 파일 오른쪽 클릭
– 압축 풀기 메뉴 선택
– [압축 풀기] 선택
3) 파일확인
– C:OpenGisEduDataVectorMap 에 Shape 파일들이 있는지 확인
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
장병진 (bjjang@gaia3d.com)
7. I-1. QGIS에서 지도 구성하기
QGIS에서 Shape 파일 읽기
1) QGIS 실행
– [시작]버튼 – QGIS Dufour – QGIS Desktop 2.0.1 클릭
2) 벡터 레이어 추가
– 레이어 – 벡터 레이어 추가 메뉴 선택
– [탐색] 버튼 클릭
– C:OpenGisEduDataVectorMap 폴더로 이동
– [Ctrl-A] 눌러 전체 선택
– [확인]
– [Open]
3) 필요 레이어만 정렬
– 아래서부터 World_Admin, Major_Routes, World_Cities 순으로
배열되게 레이어 트리 조정
– 다른 레이어는 모두 꺼서 안보이게
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
7
장병진 (bjjang@gaia3d.com)
8. I-1. QGIS에서 지도 구성하기
단순 심볼 부여
1) 땅 심벌 지정
– World_Admin 레이어 더블클릭
– 스타일 선택
– 저장된 스타일에서 land 심볼 선택
– [OK]
2) 도로 심벌 지정
– Major_Routes 레이어 더블클릭
– 스타일 선택
– 저장된 스타일에서 road 심볼 선택
– [OK]
– 다시 Major_Routes 레이어 더블클릭
– 심볼 레이어 군에서 위의 단순선 선택
– 캡 스타일에서 평평하게 선택
– 아래 단순선도 동일하게 수정
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
8
장병진 (bjjang@gaia3d.com)
9. I-1. QGIS에서 지도 구성하기
속성기반 심볼 부여
1) 도시명 표출
– World_Cities 레이어 더블클릭
– 라벨 선택
– 이 레이어의 라벨 앞의 선택 체크
– NAME_LOCAL 컬럼 선택
– 배치 선택
– 점으로부터의 거리 선택
3) 표시도시 필터링
– World_Cities 레이어 더블클릭
– 일반 정보 선택
– [질의 생성기] 클릭
– POPULATION 선택
– [샘플] 클릭
– 프로바이더별 필터 표현식이 아래처럼 되게 설정
– "POPULATION" = '10K to 25K' OR "POPULATION“ = '250K to 900K'
– 사분위에서 하단 중앙 선택
– [OK]
2) 인구별 표현 변경
– World_Cities 레이어 더블클릭
– 스타일 선택
– ‘단일심볼’을 선택하여 ‘분류된’으로 변경
– 컬럼을 POPULATION으로 변경
– 심볼에서 city 선택
– [분류] 버튼 클릭
– ‘900K to 3 Million’의 심볼 더블클릭
– 단순 마커 선택
– 크기 1.5로 변경
– [OK]
– [OK]
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
9
장병진 (bjjang@gaia3d.com)
10. I-1. QGIS에서 지도 구성하기
심볼 적용 결과
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
좀더 손을 보면
10
장병진 (bjjang@gaia3d.com)
11. I-2. OpenGeo Explorer를 이용한 Publish
OpenGeo Explorer 설치
OpenGeo Explorer 란?
– QGIS UI를 이용해 GeoServer 와 PostGIS를 편하게 관리하는 툴
– http://qgis.boundlessgeo.com/static/docs/
설치 과정
– QGIS에서 플러그인-플러그인 관리 및 설치 메뉴 선택
– 설정 선택
– 실험적인 플러그인도 표시 체크
– [추가…] 버튼 선택
– 이름에 Boundless plugin repository 입력
– URL에 http://qgis.boundlessgeo.com/plugins.xml 입력
– [OK]
– 더 찾기 선택
– 검색에 OpenGeo 입력
– OpenGeo Explorer 선택
– [플러그인 설치] 클릭
– [Close]
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
11
장병진 (bjjang@gaia3d.com)
12. I-2. OpenGeo Explorer를 이용한 Publish
GeoServer에 올리기
GeoServer 실행
– OpenGeo Suite Dashboard 에서 [Startup]
GeoServer 연결 설정
– QGIS의 OpenGeo explorer 탭에서 GeoServer catalogs 오른쪽 클릭
– New Catalog 메뉴 선택
– 접속을 위한 정보 입력후 [OK]
새 Workspace 만들기
– QGIS의 OpenGeo explorer 탭에서 GeoServer catalogs 확장
– GeoServer Workspaces 오른쪽 클릭
– New Workspace 메뉴 선택
– 이름에 edu, URI에 edu.osgeo.kr 입력
– 추가된 edu 선택하고 Set as default workspace 선택
QGIS 레이어 올리기
– QGIS의 OpenGeo explorer 탭에서 QGIS project 확장
– QGIS Layers에서 모든 레이어 선택
– Publish Layer 메뉴 선택
– [OK]
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
12
장병진 (bjjang@gaia3d.com)
13. I-2. OpenGeo Explorer를 이용한 Publish
QGIS에서 SLD 만들기
QGIS 스타일을 SLD로 저장
– QGIS 레이어 트리에서 World_Cities를 더블클릭
– 레이어 속성 창 하단의 [스타일 저장] 클릭
– C:OpenGisEduDataWorld_Cities.sld로 저장
Data 폴더로 Shape 복사
– 탐색기 실행
– C:OpenGisEduDataVectorMap 폴더로 이동
– World_Cities_3857.* 파일 선택해 복사
– [시작]-모든 프로그램-OpenGeo Suite 3.0.2-GeoServer
Data Directory 메뉴 선택
– Dataedu 폴더로 이동하여 World_Cities_3857 폴더 생
성
– 붙여넣기
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
13
장병진 (bjjang@gaia3d.com)
14. I-3. GeoServer에서 지도 서비스하기
수동 Publish
GeoServer 관리화면 접속
– http://localhost:8080/geoserver 접속
– Admin / geoserver 로 로그인
스타일 추가
– Styles - Add a new style
– [파일선택] 클릭, 저장해둔 SLD 선택
– [Upload…] 클릭, [Submit] 클릭
스토어 추가
– Stores – Add new Stores
– Shapefile 선택
– Data Source Name에 World_Cities_3857 입력
– DBF charset에 EUC-KR 선택
– [Save] 클릭
레이어 추가
– New Layer 화면에서 World_Cities_3857의 Publish 클릭
– Compute from data 클릭
– Compute from native bounds 클릭
– Publishing 탭 선택
– Default Style에 World_Cities_3857 선택
– [Save] 클릭
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
14
장병진 (bjjang@gaia3d.com)
15. I-3. GeoServer에서 지도 서비스하기
스타일 수정
<?xml version="1.0" encoding="EUC-KR"?>
<StyledLayerDescriptor version="1.0.0"
자동생산 SLD의 문제점
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
– 텍스트가 나오지 않음
xmlns:ogc="http://www.opengis.net/ogc"
– 많은 테그에 se:가 붙어야 함
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xmlns:xlink="http://www.w3.org/1999/xlink"
<NamedLayer>
– 표준과 달라 매뉴얼의 샘플 참조 힘듦
<Name>World_Cities_3857</Name>
수정된 SLD
<UserStyle>
<Title>World_Cities_3857</Title>
– World_Cities_3857_fix.sld
<Abstract>World_Cities_3857</Abstract>
<FeatureTypeStyle>
– Encoding을 EUC-KR로 수정
<Rule>
<Name>>3 Million</Name>
– xmlns:se=http://www.opengis.net/se 제거
<ogc:Filter>
– Se: 테그 제거
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>POPULATION</ogc:PropertyName>
– TextSymbolizer 추가
<ogc:Literal>>3 Million</ogc:Literal>
</ogc:PropertyIsEqualTo>
– 한글폰트 적용
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#000000</CssParameter>
<CssParameter name="fill">#000000</CssParameter>
</Fill>
</Mark>
<Size>6</Size>
</Graphic>
</PointSymbolizer>
<TextSymbolizer>
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
<Label>
15
장병진 (bjjang@gaia3d.com)
<ogc:PropertyName>NAME_LOCAL</ogc:PropertyName>
16. I-3. GeoServer에서 지도 서비스하기
레이어 그룹 만들기
레이어 그룹의 필요성
– 클라이언트의 편리한 호출
– 레이어들의 순서 정의
– 레이어별 심볼 부여
레이어 그룹 정의
– GeoServer 관리화면에서
– Layer Groups – Add new layer group
– Name에 EduMap
– [Add Layer…] 클릭
– 밑에 깔려야 하는 레이어부터 추가
– World_Admin
– Water_Poly
– Water_Line
– Minor_Routes
– Major_Routes
– World_Cities
– [Generate Bounds] 클릭
– [Save]
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
16
장병진 (bjjang@gaia3d.com)
17. II. 대용량 위성사진 서비스
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 제공 기관 및 원작자에게 라이선스가 있습니다.
18. II-1. World Image로 서비스
위성영상 확인
실습 데이터 설정
– http://osgeo.ipdisk.co.kr 접속
– HDD1/Edu/20140120_이화여대/02_실습예제
/01_GeoServer/LANDSAT8.zip 다운로드
– C:OpeGisEduData에 복사
– 압축 해제
QGIS에서 불러오기
– QGIS 실행
– 레이어 – 래스터 레이어 추가 메뉴 선택
– 파일이름 옆의 파일종류 [GDAL]JPEG 선택
– 모든 jpg 파일 선택
– [열기]
투명처리
– 레이어 트리에서 가장 위 영상 더블클릭
– 투명도 선택
– 추가적인 no data vlaue에 0 입력
– [OK]
영상출처: http://earthexplorer.usgs.gov/
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
18
장병진 (bjjang@gaia3d.com)
19. II-1. World Image로 서비스
GeoServer에 올리기
위성영상 복사
– C:OpenGisEduDataLANDSAT8 을
사용자.opengeodata_dirdata 폴더에 복사
GeoServer 관리페이지 접속
– http://localhost:8080/geoserver/
– Stores – Add new Store
– Raster Data Source – World Image
– [Browse…]
– data/LANDSAT8/LC81140342013261LGN00.jpg 선택
– Data Source Name에 LC81140342013261LGN00 입력
– [Save]
레이어 추가
– New Layer에서 [Publish] 선택
– Declared SRS에 EPSG:32652 입력
– SRS handling에 Force declared 선택
– [Compute from native bounds] 클릭
– [Save]
확인
– Layer Preview
– Search에 LC 입력
– 등록된 영상의 [Go] 선택
– 결과: java.lang.OutOfMemoryError: Java heap space
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
19
장병진 (bjjang@gaia3d.com)
20. II-2. GeoTiff로 서비스
GeoTiff 데이터 생성
데이터 작업용 명령 프롬프트
– [시작]-모든 프로그램-QGIS Dufour-OSGeo4W 메뉴 선택
– Cd C:OpenGisEduDataLANDSAT8
변환용 배치파일 생성
– Dir *.jpg /b > conv.bat
– Notepad++ 실행하여 conv.bat 열기
– 찾기-바꾸기… 메뉴
– 찾을 단어: rn, 바꿀 단어: 빈칸 하나
– 찾기방식: 확장
– [모두바꾸기]
– 내용 제일 앞에 다음 내용 추가
• gdalwarp -s_srs EPSG:32652 -t_srs EPSG:3857 -of GTiff -r cubic -srcnodata 0
– 내용 제일 뒤에 다음 내용 추가
• landsat8_korea.tif
– 저장
변환작업 실행
– 다시 명령 프롬프트 창으로 돌아와
– Conv
참고 사이트
– http://gdal.org/gdalwarp.html
– http://gdal.org/gdal_utilities.html
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
20
gdalwarp -s_srs EPSG:32652 -t_srs
EPSG:3857 -of GTiff -r cubic -srcnodata 0
LC81140342013261LGN00.jpg
LC81140352013261LGN00.jpg
LC81140362013261LGN00.jpg
LC81150332013300LGN00.jpg
LC81150342013300LGN00.jpg
LC81150352013300LGN00.jpg
LC81150362013300LGN00.jpg
LC81150372013300LGN00.jpg
LC81160342013259LGN00.jpg
LC81160352013259LGN00.jpg
LC81160362013259LGN00.jpg
LC81160372013259LGN00.jpg
landsat8_korea.tif
장병진 (bjjang@gaia3d.com)
22. II-2. GeoTiff로 서비스
GeoTiff를 레이어로 올리기
위성영상 복사
– C:OpenGisEduDataLANDSAT8landsat8_korea.tif 을
사용자.opengeodata_dirdataLANDSAT8 폴더에 복사
GeoServer 관리페이지 접속
– Stores – Add new Store
– Raster Data Source – GeoTIFF
– [Browse…]
– data/LANDSAT8/landsat8_korea.tif선택
– Data Source Name에 landsat8_korea 입력
– [Save]
레이어 추가
– New Layer에서 [Publish] 선택
– Native SRS가 EPSG:3857 임을 확인
– [Save]
확인
– Layer Preview
– Search에 land 입력
– 등록된 영상의 [Go] 선택
성능 평가
– Chrome 브라우저에서 [F12]
– Network 탭 선택
[질문] 왜 서해안과 제주 일부가 일본으로 갔을까?
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
22
장병진 (bjjang@gaia3d.com)
23. II-3. 성능개선 및 지도와 서비스
GeoTiff에 Overview 추가
Overview 생성
– 명령 프롬프트로 돌아와
– gdaladdo -r average landsat8_korea.tif 2 4 8 16 32
위성영상 복사
– C:OpenGisEduDataLANDSAT8landsat8_korea.tif 을
사용자.opengeodata_dirdataLANDSAT8 폴더에 덮어 쓰기
변경 적용
– GeoServer 관리 화면
– Server Status 메뉴
– Configuration and catalog의 [Reload] 클릭
확인
– Layer Preview
– Search에 land 입력
– landsat8_korea 영상의 [Go] 선택
성능 평가
– Chrome 브라우저에서 [F12]
– Network 탭 선택
– 5~10배 정도 속도향상 확인
– 영상품질 향상, 용량감소 확인
참고 사이트
– http://gdal.org/gdaladdo.html
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
23
장병진 (bjjang@gaia3d.com)
24. II-3. 성능개선 및 지도와 서비스
영상을 포함한 레이어그룹 구성
EduMap Layer Group에 영상 추가
– Layer Groups에서 EduMap 선택
– [Add Layer…]
– Edu:landsat8_korea 선택
– 위쪽 화살표로 제일 상단으로 이동
– [Generate Bounds]
– [Save]
미리보기로 확인
– Layer Preview, EduMap 보기
– 무엇이 잘못 되었을까?
좌표계 수정
– Edu Workspace에 속한 모든 레이어 EPSG:3857로 변경
다시 미리보기 확인
– 아까 띄워놓은 미리보기에서 화면 이동
– 해안선이 잘 일치 하는가?
참고 사이트
– http://wiki.openstreetmap.org/wiki/EPSG:3857
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
24
장병진 (bjjang@gaia3d.com)
25. III. WPS를 이용한 고급 스타일
링
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 제공 기관 및 원작자에게 라이선스가 있습니다.
26. III-1. Heat Map, Point Cluster 샘플
샘플 확인
Heat Map 샘플
– GeoServer 관리화면에서
– Layer Preview 메뉴
– Search에 heat 입력
– Pop_heatmap의 [Go]
– Zoom과 pan으로 데이터 확인
– Styles 메뉴
– Heatmap 선택
– XML 확인
Point Cluster 샘플
– GeoServer 관리화면에서
– Layer Preview
– Search에 cluster 입력
– Volcano_cluster의 [Go]
– Zoom과 pan으로 데이터 확인
– Styles 메뉴
– Stacked_point 선택
– XML 확인
비교 사이트
– http://dev.openlayers.org/sandbox/camptocamp/canvas/openlayers/examples/heatMap.html
– http://www.openlayers.org/dev/examples/strategy-cluster-threshold.html
– http://www.ahnguhn.net/mapisode/maps/20130902/
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
26
장병진 (bjjang@gaia3d.com)
27. III-1. Heat Map, Point Cluster 샘플
WPS 명세 확인
제공되는 WPS 리스트
– GeoServer 관리화면에서
– 상단의 GeoServer 마크 눌러 Welcome 화면으로 가
서
– 우측의 Service Capabilities의 WPS-1.0.0 선택
HeatMap의 인자 확인
– Demo – WPS request builder
– gs:heatmap 선택
– 하단에 나오는 인자들 확인
– http://localhost:8080/geoserver/ows?service=wps&v
ersion=1.0.0&request=DescribeProcess&identifier=g
s:Heatmap
PointStacker의 인자 확인
– gs:PointStacker 선택
– 하단에 나오는 인자들 확인
– http://localhost:8080/geoserver/ows?service=wps&v
ersion=1.0.0&request=DescribeProcess&identifier=g
s:PointStacker
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
27
장병진 (bjjang@gaia3d.com)
28. III-2. PostGIS에 GIS 업체자료 올리기
자료 확보
자료 다운로드
– http://www.onspatial.com/2013/03/2013-gis.html
접속
– 온라인 편집 페이지 링크 클릭
– 파일 – 다른이름으로 저장-Microsoft Excel
– gis_related_company_20130227.xlsx 라는 이름으
로 저장
CSV 파일로 변환
– 다운받은 파일 열기
– ID, 회사명, 주소, 경도, 위도만 남기고 컬럼 지우기
– 다른 이름으로 저장
– 파일형식에서 CSV (쉼표로 분리) 선택
– [저장]
코드페이지 변경
– 엑셀 닫고
– Notepad++에서 csv 파일 열어서
– 인코딩 – UTF-8로 변환
– 252행 이후 빈 데이터 제거
– 저장
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
28
장병진 (bjjang@gaia3d.com)
29. III-2. PostGIS에 GIS 업체자료 올리기
PostGIS에 올리기
CREATE TABLE opengeo.gis_corp
테이블 생성
(
– [시작]-모든 프로그램-OpenGeo Suite 3.0.2-pgAdmin
id integer NOT NULL,
– Server Groups – Servers – OpenGeoSuite 더블클릭
– Databases – geoserver – Schemas – opengeo – Tables 오른쪽 클릭
corp_name character varying(100),
– New Table… 메뉴
addr character varying(200),
– Properties 탭의 Name에 gis_corp 입력
lon real,
– Columns 탭의 [Add]
lat real,
– Name: id, Data type: integer, [OK]
– Name: corp_name, Data Type: character varying, Length: 100, [OK]
CONSTRAINT gis_corp_pkey PRIMARY
KEY (id )
– Name: addr, Data Type: character varying, Length: 200, [OK]
);
– Name: lon, Data Type: real, [OK]
ALTER TABLE opengeo.gis_corp OWNER
TO postgres;
– Name: lat, Data Type: real, [OK]
– [OK]로 테이블 생성
– Databases – geoserver – Schemas – opengeo – Tables – gis_corp 오른쪽 클릭
– New Object – New Primary Key
– Columns 탭, Column: id 선택, [Add], [OK]
데이터 부어 넣기
– SQL 아이콘 눌러 SQL Editor 띄우고
– 다음 입력
COPY opengeo.gis_corp(id, corp_name, addr, lon, lat)
FROM „c:OpenGisEduDatagis_related_company_20130227.csv'
WITH DELIMITER ','
CSV HEADER
– [F5] 키
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
29
장병진 (bjjang@gaia3d.com)
30. III-3. WPS를 이용한 스타일 적용
SQL View Layer 만들기
Data Store 만들기
– GeoServer 관리화면에서
– Stores – Add new Store – PostGIS
– 필요정보 입력
SQL View Layer 만들기
– Layers – Add a new resource
– Edu:postgis 선택
– [Configure new SQL view…] 선택
– View Name: gis_corp
– SQL statement
select corp_name, ST_Transform(ST_SetSRID(ST_Point(lon,lat), 4326),
3857) pos
from opengeo.gis_corp
– [Refresh] 선택
– Pos의 SRID에 3857 입력
– [Save]
– [Compute from data]
– [Compute from native bounds]
– [Save]
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
30
장병진 (bjjang@gaia3d.com)
31. III-3. WPS를 이용한 스타일 적용
WPS 스타일 적용하기
SQL View Layer 확인하기
– Layer Preview에서 edu:gis_corp 찾아서 [go]
HeatMap으로 표현하기
– Layers에서 edu:gis_corp 선택
– Publishing 탭
– Default Style: heatmap, [Save]
– 이전에 사용한 미리보기 창에서 확인
Point Cluster로 표현하기
– Layers에서 edu:gis_corp 선택
– Publishing 탭
– Default Style: stacked_point , [Save]
– 이전에 사용한 미리보기 창에서 확인
EduMap Layer Group 수정
– Layer Groups에서 EduMap 선택
– Edu:landsat8_korea
– [Add Layer…] 선택하여 Edu:gis_corp 추가
– [Add Layer…] 선택하여 Edu:gis_corp 한번 더 추가
– 위의 edu:gis_corp 의 스타일을 heatmap으로 변경
– [Save]
[주의] 버그로 스타일을 바꾼 것이 UI에 안 나타날 수도 있습니다.
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
31
장병진 (bjjang@gaia3d.com)
32. IV. 공간자료와 통계의 연결
- 일러두기 • 본 자료는 모두 Creative Commons License CC-BY-NC을 따릅니다.
• 본 교재에서 사용하는 샘플 데이터 셋은 제공 기관 및 원작자에게 라이선스가 있습니다.
33. IV-1. PostGIS에 행정구역 자료 올리기
데이터 받기 및 좌표계 변환
행정구역 데이터 받기
– http://www.gisdeveloper.co.kr/notice/%EC%B5%9C%EC%8B%A0%EC%
8B%A0%ED%96%89%EC%A0%95%EA%B5%AC%EC%97%AD%EB%8F%84%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C
– 김형준님께서 취합해 올리신 전국 시군구 자료 다운로드
– C:OpenGisEduDataSIG_201311 에 압축 풀기
– 좌표계 정보 확인: Bessel 타원체의 UTM-K
– 해당 좌표계 EPSG 코드 확인: http://osgeo.kr/17
좌표계 변환
– OSGeo4W 명령 프롬프트 실행
– 데이터가 있는 폴더로 이동
cd OpenGisEduDataSIG_201311
– EPSG:3857로 좌표계 변환
ogr2ogr -s_srs EPSG:5178 -t_srs EPSG:3857 -f "ESRI Shapefile" skipfailures --config SHAPE_ENCODING "CP949"
TL_SCCO_SIG_3857.shp TL_SCCO_SIG.shp
– 주의: 한글 문제 해결 위해 –config SHAPE_ENCODING "CP949" 필요
– 주의: ogr2ogr은 마지막에 대상 파일이 먼저 나오고 원본 파일이 가장 마지
막에 있어야 한다
– 참고: http://gdal.org/ogr2ogr.html
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
33
장병진 (bjjang@gaia3d.com)
34. IV-1. PostGIS에 행정구역 자료 올리기
SQL로 만들어 올리기
Shape 파일을 SQL로 변환
– Shp2PgSql 명령이 있는 폴더로 이동
Cd “c:Program Files (x86)OpenGeoOpenGeo Suitepgsql9.1bin”
– SQL 생성
shp2pgsql -c -s 3857 -i -I -W CP949
C:OpenGisEduDataSIG_201311TL_SCCO_SIG_3857.shp opengeo.sig >
C:OpenGisEduDataSIG.sql
– -s 옵션 뒤에 좌표계, -W 옵션뒤에 코드페이지가 들어가야 함을 명심
Psql로 데이터 올리기
– 용량이 크거나 덤프가 포함된 sql은 psql 커맨드로 실행하는 것이 좋다.
psql -h localhost -p 54321 -U postgres -d geoserver -f
C:OpenGisEduDataSIG.sql
GeoServer 레이어로 등록
– GeoServer 관리화면에서
– Layers – Add a new resource
– Sig – Publish
등록 확인
– Layer Preview
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
34
장병진 (bjjang@gaia3d.com)
35. IV-2. PostGIS에 인구통계 올리기
데이터 받기 및 다듬기
주민등록 인구통계 데이터 받기
– http://rcps.egov.go.kr:8081/jsp/stat/ppl_stat_jf.jsp
– [엑셀다운로드]
엑셀에서 csv 만들기
– 엑셀파일 열기
– 총인구수, 세대수, 남자인구수, 여자인구수의 셀 서식을 1000단위 구분기호 없게 변
경
– CSV로 저장
– 엑셀 종료
CSV 편집
– 저장된 CSV를 Notepad++열기
– 헤더 부분 한 줄로 수정
– 찾기 – 바꾸기 메뉴
– 찾기 방식: 정규표현식
– 찾을 단어: .*(
– 바꿀 단어:
– [모두 바꾸기]
– 찾기 방식: 일반
– 찾을 단어: ),
– 바꿀 단어: ,
– [모두 바꾸기]
– 저장
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
35
장병진 (bjjang@gaia3d.com)
36. IV-2. PostGIS에 인구통계 올리기
PostGIS에 인구통계 올리기
CREATE TABLE opengeo.population_2013
PostGIS 테이블 만들기
(
– pgAdmin에서
– OpenGeoSuite – Databases – geoserver – Schemas – opengeo – Tables 오른쪽
클릭
– New Table…
admin_id character(10) NOT NULL,
pop_tot integer,
household integer,
num_per_house real,
– Name: population_2013
pop_man integer,
– 컬럼 및 기본 키 추가
pop_woman integer,
PostGIS에 데이터 임포트
sex_ratio real,
– pgAdmin에서
CONSTRAINT population_2013_pkey
PRIMARY KEY (admin_id )
– SQL Editor 띄워서
– COPY 명령으로 데이터 부어 넣기
) WITH ( OIDS=FALSE);
COPY opengeo.population_2013(admin_id, pop_tot, household,
num_per_house, pop_man, pop_woman, sex_ratio)
ALTER TABLE opengeo.population_2013
OWNER TO postgres;
FROM 'c:OpenGisEduDatappl_20140107110532.csv'
WITH DELIMITER ','
CSV HEADER
– 뭘 잘못 했을까요?
– 오류는 한가지 뿐인가요?
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
36
장병진 (bjjang@gaia3d.com)
37. IV-2. PostGIS에 인구통계 올리기
행정구역과 인구를 볼 수 있는 뷰 만들기
뷰를 만들기 위한 쿼리 만들기
– pgAdmin에서
– SQL Editor 띄워서
– Graphical Query Builder 탭
– Geoserver –Schemas – opengeo 확장
– Sig 테이블 끌어 놓고 sig_cd, sig_kor_nm, geom 선택
– Population_2013 테이블 끌어 놓고 admin_id 제외하고 전부 선택
– Sig.sig_cd 끌어서 population_2013.admin_id와 연결
SELECT
– SQL Editor 탭
sig.sig_cd,
– [F5] 눌러 실행
sig.sig_kor_nm,
– 데이터가 나오나요? 무엇을 수정해야 할까요?
sig.geom,
뷰 만들기
population_2013.pop_tot,
– pgAdmin에서
population_2013.household,
– OpenGeoSuite – Databases – geoserver – Schemas – opengeo 오른쪽 클릭
population_2013.num_per_house,
– New View…
population_2013.pop_man,
– Name: sig_pop_2013_view
population_2013.pop_woman,
– Definition 탭
population_2013.sex_ratio
FROM
– 만들어 둔 SQL 입력
opengeo.sig,
– [OK]
opengeo.population_2013
WHERE
sig.sig_cd||'00000' = population_2013.admin_id;
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
37
장병진 (bjjang@gaia3d.com)
38. IV-3. 인구수를 색상으로 표현하기
인구밀도 표현을 위한 스타일 만들기
QGIS에서 PostGIS 레이어 부르기
– QGIS에서
– 레이어 – PostGIS 레이어 추가
– 연결 – 새로 만들기
– 이름: localhost, 호스트: localhost, 포트: 54321, 데이터베이스:
geoserver, 사용자이름:posrgres, 비밀번호: postgres
– [연결 테스트]
– [OK]
– [연결]
– Opengeo 확장
– sig_pop_2013_view 선택
– [추가]
스타일 만들기
– sig_pop_2013_view 레이어 더블클릭
– 스타일 탭
– 단계로 나누어진 선택
– 컬럼: pop_tot, 클레스: 7, 색상표: Oranges, 모드: 등간격
– [분류]
– 10만 단위로 분류 재정의
– [스타일 저장] – SLD 파일
– c:OpenGisEduDatasig_pop.sld 에 저장
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
38
장병진 (bjjang@gaia3d.com)
39. IV-3. 인구수를 색상으로 표현하기
PostGIS에 인구통계 올리기
GeoServer에 스타일 등록
– GeoServer 관리 화면에서
– Styles – Add a new style
– [파일 선택]
– [Upload…]
– [Submit]
레이어 만들기
– Layers – Add a new layer
– Edu:postgis 선택
– Sig_pop_2013_view의 [Publish] 선택
– Declared SRS: EPSG:3857 확인
– [Compute from data] [Compute from native bounds]
– Publishing 탭
– Default style: sig_pop
– [Save]
확인
– Layer Preview
– Edu:sig_pop_2013_view 선택
– 원하던 색상대로 나왔나요? 뭐가 잘못되었을까요?
[주의] QGIS의 등간격 분류값을 그냥 이용한 경우 다음 오류가 납니다.
invalid input syntax for integer: "104508.4286"
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
39
장병진 (bjjang@gaia3d.com)
40. IV-4. 인구와 성비를 그래프로 표현하기
GeoServer Chart Extention 소개
– http://www.onspatial.com/2013/08/geoserver-chart-extension.html
파이차트용 스타일 만들기
– GeoServer 관리 화면에서
– Styles – Add a new style
– Name: PiChart
– Copy from existing style: point [Copy…]
– 웹 페이지에서 PI Chart SLD 주요 부분 복사
– MinScaleDenominator, MaxScaleDenominator 제거
– 참조 컬럼 부분을 pop_nam, pop_woman으로 수정
– 색상을 청색과 적색으로 수정
– 그래프 크기 부분을 pop_tot를 참조하고 적당한 크기가 되게 수정
시간이 되시는 분은 Bar Chart도 시도
국가공간정보 거점대학 오픈 소스 GIS 심화 과정
40
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http:
//www.opengis.net/sld" xmlns:ogc="http://www.opengi
s.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:
xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.0.0/StyledLayerDes
criptor.xsd">
<NamedLayer>
<Name>Pi Chart</Name>
<UserStyle>
<Title>Pi Chart</Title>
<FeatureTypeStyle>
<!-FeatureTypeName>Feature</FeatureTypeName-->
<Rule>
<Name>Chart</Name>
<!--MinScaleDenominator>100</MinScaleDenominator>
<MaxScaleDenominator>500000</MaxScaleDenominator장병진 (bjjang@gaia3d.com)