공간정보거점대학 1.geo server_고급과정

41
2014 년 1 년 20 년 년년년년년 년년년년 년년년년 년년 년년 GIS 년년 년년 년년년년년년년 년년년 ([email protected]) GeoServer 년년 한한한 한한

Upload: bj-jang

Post on 02-Dec-2014

4.146 views

Category:

Education


2 download

DESCRIPTION

GeoServer 고급과정 교제입니다. 2014년 1월 20일 이화여대에서 진행되었습니다. 실제 데이터를 가공하고 서버에 올려 GeoServer에서 서비스 하는 과정들이 담겨 있습니다.

TRANSCRIPT

Page 1: 공간정보거점대학 1.geo server_고급과정

2014 년 1 월 20 일 국토교통부 공간정보 거점대학

오픈 소스 GIS 심화 과정

가이아쓰리디㈜장병진 ([email protected])

GeoServer 고급

한국어 지부

Page 2: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])2

목차

I. 벡터자료를 이용한 지도서비스 - QGIS 에서 지도 구성하기 - OpenGeo Explorer 를 이용한 Pub-lish

- GeoServer 에서 지도 서비스하기

II. 대용량 위성사진 서비스 - World Image 로 서비스 - GeoTiff 로 서비스 - 성능개선 및 지도와 서비스

III. WPS 를 이용한 고급 스타일링 - Heat Map, Point Cluster 샘플 - PostGIS 에 GIS 업체자료 올리기 - WPS 를 이용한 스타일 적용

IV. 공간자료와 통계의 연결 - PostGIS 에 행정구역 자료 올리기 - PostGIS 에 인구통계 올리기 - 인구수를 색상으로 표현하기 - 인구와 성비를 그래프로 표현하기

Page 3: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])

0. GeoServer 란 ?

3

GIS 데이터를 웹에 공개 (Publish) 하기 위한 서버

지원 운영 체제

MS Windows Mac OSX Linux, Unix

라이선스

GPL

기반 언어

JAVA

최신버전

2.4.3

GeoServer

WMS

WFS

WCS

VectorSource

RasterSource

FormattedMap

FeatureObject

CoverageData

png, jpeg, gif

GML, GeoJSON

ArcGrid, Geo-Tiff, bmp

Vector Source: Shape, GeoDB(PostGIS, Oracle Spatial 등 )Raster Source: GeoTiff, World Image, IMG, ArcGrid

Page 4: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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 년 전국 주민등록 인구통계

Page 5: 공간정보거점대학 1.geo server_고급과정

I. 벡터자료를 이용한 지도서비스

- 일러두기 -

• 본 자료는 모두 Creative Commons License CC-BY-NC 을 따릅니다 .

• 본 교재에서 사용하는 샘플 데이터 셋은 실제 정보와 다르므로 교육용 이외에는 사용할 수 없습니다 .

Page 6: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])

1) 데이터 다운로드– http://osgeo.ipdisk.co.kr 접속– HDD1/Edu/20140120_ 이화여대 /02_ 실습예제 /

01_GeoServer/VectorMap.zip 다운로드

2) 벡터지도 폴더 만들기– 윈도우 탐색기 실행– C:\OpenGisEdu\Data\VectorMap.zip 파일 오른쪽 클릭– 압축 풀기 메뉴 선택– [ 압축 풀기 ] 선택

3) 파일확인– C:\OpenGisEdu\Data\VectorMap 에 Shape 파일들이 있는지

확인

실습 데이터 설정

I-1. QGIS 에서 지도 구성하기

Page 7: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])7

I-1. QGIS 에서 지도 구성하기

1) QGIS 실행– [ 시작 ] 버튼 – QGIS Dufour – QGIS Desktop 2.0.1 클릭

2) 벡터 레이어 추가– 레이어 – 벡터 레이어 추가 메뉴 선택– [ 탐색 ] 버튼 클릭– C:\OpenGisEdu\Data\VectorMap 폴더로 이동– [Ctrl-A] 눌러 전체 선택– [ 확인 ]– [Open]

3) 필요 레이어만 정렬– 아래서부터 World_Admin, Major_Routes, World_Cities

순으로 배열되게 레이어 트리 조정– 다른 레이어는 모두 꺼서 안보이게

QGIS 에서 Shape 파일 읽기

Page 8: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])8

I-1. QGIS 에서 지도 구성하기

1) 땅 심벌 지정– World_Admin 레이어 더블클릭– 스타일 선택– 저장된 스타일에서 land 심볼 선택– [OK]

2) 도로 심벌 지정– Major_Routes 레이어 더블클릭– 스타일 선택– 저장된 스타일에서 road 심볼 선택– [OK]– 다시 Major_Routes 레이어 더블클릭– 심볼 레이어 군에서 위의 단순선 선택– 캡 스타일에서 평평하게 선택– 아래 단순선도 동일하게 수정

단순 심볼 부여

Page 9: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])9

I-1. QGIS 에서 지도 구성하기

1) 도시명 표출– World_Cities 레이어 더블클릭– 라벨 선택– 이 레이어의 라벨 앞의 선택 체크– NAME_LOCAL 컬럼 선택– 배치 선택– 점으로부터의 거리 선택– 사분위에서 하단 중앙 선택– [OK]

2) 인구별 표현 변경– World_Cities 레이어 더블클릭– 스타일 선택– ‘ 단일심볼’을 선택하여 ‘분류된’으로 변경– 컬럼을 POPULATION 으로 변경– 심볼에서 city 선택– [ 분류 ] 버튼 클릭– ‘900K to 3 Million’ 의 심볼 더블클릭– 단순 마커 선택– 크기 1.5 로 변경– [OK]– [OK]

속성기반 심볼 부여 3) 표시도시 필터링– World_Cities 레이어 더블클릭– 일반 정보 선택– [ 질의 생성기 ] 클릭– POPULATION 선택– [ 샘플 ] 클릭– 프로바이더별 필터 표현식이 아래처럼 되게 설정– "POPULATION" = '10K to 25K' OR "POPULATION“ = '250K to 900K'

Page 10: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])10

I-1. QGIS 에서 지도 구성하기

심볼 적용 결과 좀더 손을 보면

Page 11: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])11

I-2. OpenGeo Explorer 를 이용한 Publish

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]

OpenGeo Explorer 설치

Page 12: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])12

I-2. OpenGeo Explorer 를 이용한 Publish

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]

GeoServer 에 올리기

Page 13: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])13

I-2. OpenGeo Explorer 를 이용한 Publish

QGIS 스타일을 SLD 로 저장– QGIS 레이어 트리에서 World_Cities 를 더블클릭– 레이어 속성 창 하단의 [ 스타일 저장 ] 클릭– C:\OpenGisEdu\Data\World_Cities.sld 로 저장

Data 폴더로 Shape 복사– 탐색기 실행– C:\OpenGisEdu\Data\VectorMap 폴더로 이동– World_Cities_3857.* 파일 선택해 복사– [ 시작 ]- 모든 프로그램 -OpenGeo Suite 3.0.2-

GeoServer Data Directory 메뉴 선택– Data\edu 폴더로 이동하여 World_Cities_3857

폴더 생성– 붙여넣기

QGIS 에서 SLD 만들기

Page 14: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])14

I-3. GeoServer 에서 지도 서비스하기

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] 클릭

수동 Publish

Page 15: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])15

I-3. GeoServer 에서 지도 서비스하기

자동생산 SLD 의 문제점– 텍스트가 나오지 않음– 많은 테그에 se: 가 붙어야 함– 표준과 달라 매뉴얼의 샘플 참조 힘듦

수정된 SLD– World_Cities_3857_fix.sld– Encoding 을 EUC-KR 로 수정– xmlns:se=http://www.opengis.net/se 제거– Se: 테그 제거– TextSymbolizer 추가– 한글폰트 적용

스타일 수정 <?xml version="1.0" encoding="EUC-KR"?>

<StyledLayerDescriptor version="1.0.0"

xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescrip-tor.xsd"

xmlns="http://www.opengis.net/sld"

xmlns:ogc="http://www.opengis.net/ogc"

xmlns:xlink="http://www.w3.org/1999/xlink"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<NamedLayer>

<Name>World_Cities_3857</Name>

<UserStyle>

<Title>World_Cities_3857</Title>

<Abstract>World_Cities_3857</Abstract>

<FeatureTypeStyle>

<Rule>

<Name>>3 Million</Name>

<ogc:Filter>

<ogc:PropertyIsEqualTo>

<ogc:PropertyName>POPULATION</ogc:PropertyName>

<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>

<Label>

<ogc:PropertyName>NAME_LOCAL</ogc:PropertyName>

</Label>

<Font>

<CssParameter name="font-family"> 맑은 고딕 </CssParameter>

<CssParameter name="font-size">12</CssParameter>

</Font>

<LabelPlacement>

<PointPlacement>

<AnchorPoint>

<AnchorPointX>0.5</AnchorPointX>

<AnchorPointY>1</AnchorPointY>

</AnchorPoint>

<Displacement>

<DisplacementX>0</DisplacementX>

<DisplacementY>-5</DisplacementY>

</Displacement>

</PointPlacement>

</LabelPlacement>

<Halo>

<Radius>2</Radius>

<Fill>

<CssParameter name="fill">#ffffff</CssParameter>

<CssParameter name="fill-opacity">0.6</CssParameter>

</Fill>

</Halo>

<Fill>

<CssParameter name="fill">#000000</CssParameter>

<CssParameter name="fill-opacity">1.0</CssParameter>

</Fill>

</TextSymbolizer>

</Rule>

<Rule>

<Name>900K to 3 Million</Name>

<ogc:Filter>

<ogc:PropertyIsEqualTo>

<ogc:PropertyName>POPULATION</ogc:PropertyName>

<ogc:Literal>900K to 3 Million</ogc:Literal>

</ogc:PropertyIsEqualTo>

</ogc:Filter>

<PointSymbolizer>

<Graphic>

<Mark>

<WellKnownName>circle</WellKnownName>

<Fill>

<CssParameter name="fill">#000000</CssParameter>

</Fill>

</Mark>

<Size>3</Size>

</Graphic>

</PointSymbolizer>

<TextSymbolizer>

<Label>

<ogc:PropertyName>NAME_LOCAL</ogc:PropertyName>

</Label>

<Font>

<CssParameter name="font-family"> 맑은 고딕 </CssParameter>

<CssParameter name="font-size">10</CssParameter>

</Font>

<LabelPlacement>

<PointPlacement>

<AnchorPoint>

<AnchorPointX>0.5</AnchorPointX>

<AnchorPointY>1</AnchorPointY>

</AnchorPoint>

<Displacement>

<DisplacementX>0</DisplacementX>

<DisplacementY>-5</DisplacementY>

</Displacement>

</PointPlacement>

</LabelPlacement>

<Halo>

<Radius>2</Radius>

<Fill>

<CssParameter name="fill">#ffffff</CssParameter>

<CssParameter name="fill-opacity">0.6</CssParameter>

</Fill>

</Halo>

<Fill>

<CssParameter name="fill">#000000</CssParameter>

<CssParameter name="fill-opacity">1.0</CssParameter>

</Fill>

</TextSymbolizer>

</Rule>

</FeatureTypeStyle>

</UserStyle>

</NamedLayer>

</StyledLayerDescriptor>

Page 16: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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]

레이어 그룹 만들기

Page 17: 공간정보거점대학 1.geo server_고급과정

II. 대용량 위성사진 서비스

- 일러두기 -

• 본 자료는 모두 Creative Commons License CC-BY-NC 을 따릅니다 .

• 본 교재에서 사용하는 샘플 데이터 셋은 제공 기관 및 원작자에게 라이선스가 있습니다 .

Page 18: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])18

II-1. World Image 로 서비스

위성영상 확인

실습 데이터 설정– http://osgeo.ipdisk.co.kr 접속– HDD1/Edu/20140120_ 이화여대 /02_

실습예제 /01_GeoServer/LANDSAT8.zip 다운로드

– C:\OpeGisEdu\Data 에 복사– 압축 해제

QGIS 에서 불러오기– QGIS 실행– 레이어 – 래스터 레이어 추가 메뉴 선택– 파일이름 옆의 파일종류 [GDAL]JPEG 선택– 모든 jpg 파일 선택– [ 열기 ]

투명처리– 레이어 트리에서 가장 위 영상 더블클릭– 투명도 선택– 추가적인 no data vlaue 에 0 입력– [OK]

영상출처 : http://earthexplorer.usgs.gov/

Page 19: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])19

II-1. World Image 로 서비스

위성영상 복사– C:\OpenGisEdu\Data\LANDSAT8 을

사용자 \.opengeo\data_dir\data 폴더에 복사 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

GeoServer 에 올리기

Page 20: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])20

II-2. GeoTiff 로 서비스

데이터 작업용 명령 프롬프트– [ 시작 ]- 모든 프로그램 -QGIS Dufour-OSGeo4W 메뉴 선택– Cd C:\OpenGisEdu\Data\LANDSAT8

변환용 배치파일 생성– Dir *.jpg /b > conv.bat– Notepad++ 실행하여 conv.bat 열기– 찾기 - 바꾸기… 메뉴– 찾을 단어 : \r\n, 바꿀 단어 : 빈칸 하나– 찾기방식 : 확장– [ 모두바꾸기 ]– 내용 제일 앞에 다음 내용 추가

• gdalwarp -s_srs EPSG:32652 -t_srs EPSG:3857 -of GTiff -r cubic -srcn-odata 0

– 내용 제일 뒤에 다음 내용 추가• landsat8_korea.tif

– 저장 변환작업 실행

– 다시 명령 프롬프트 창으로 돌아와– Conv

참고 사이트– http://gdal.org/gdalwarp.html– http://gdal.org/gdal_utilities.html

GeoTiff 데이터 생성

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

Page 21: 공간정보거점대학 1.geo server_고급과정

작업 시간이 매우 오래 걸립니다 . 식사하고 합시다 !!!

Page 22: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])22

II-2. GeoTiff 로 서비스

위성영상 복사– C:\OpenGisEdu\Data\LANDSAT8\landsat8_korea.tif 을

사용자 \.opengeo\data_dir\data\LANDSAT8 폴더에 복사 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 탭 선택

[질문 ] 왜 서해안과 제주 일부가 일본으로 갔을까 ?

GeoTiff 를 레이어로 올리기

Page 23: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])23

II-3. 성능개선 및 지도와 서비스

Overview 생성– 명령 프롬프트로 돌아와– gdaladdo -r average landsat8_korea.tif 2 4 8 16 32

위성영상 복사– C:\OpenGisEdu\Data\LANDSAT8\landsat8_korea.tif 을

사용자 \.opengeo\data_dir\data\LANDSAT8 폴더에 덮어 쓰기 변경 적용

– GeoServer 관리 화면– Server Status 메뉴– Configuration and catalog 의 [Reload] 클릭

확인 – Layer Preview– Search 에 land 입력– landsat8_korea 영상의 [Go] 선택

성능 평가– Chrome 브라우저에서 [F12]– Network 탭 선택– 5~10 배 정도 속도향상 확인– 영상품질 향상 , 용량감소 확인

참고 사이트– http://gdal.org/gdaladdo.html

GeoTiff 에 Overview 추가

Page 24: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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

영상을 포함한 레이어그룹 구성

Page 25: 공간정보거점대학 1.geo server_고급과정

III. WPS 를 이용한 고급 스타일링

- 일러두기 -

• 본 자료는 모두 Creative Commons License CC-BY-NC 을 따릅니다 .

• 본 교재에서 사용하는 샘플 데이터 셋은 제공 기관 및 원작자에게 라이선스가 있습니다 .

Page 26: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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/

샘플 확인

Page 27: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])27

III-1. Heat Map, Point Cluster 샘플

제공되는 WPS 리스트– GeoServer 관리화면에서– 상단의 GeoServer 마크 눌러 Welcome

화면으로 가서– 우측의 Service Capabilities 의 WPS-1.0.0 선택

HeatMap 의 인자 확인– Demo – WPS request builder– gs:heatmap 선택– 하단에 나오는 인자들 확인– http://

localhost:8080/geoserver/ows?service=wps&version=1.0.0&request=DescribeProcess&identifier=gs:Heatmap

PointStacker 의 인자 확인– gs:PointStacker 선택– 하단에 나오는 인자들 확인– http://

localhost:8080/geoserver/ows?service=wps&version=1.0.0&request=DescribeProcess&identifier=gs:PointStacker

WPS 명세 확인

Page 28: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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 행 이후 빈 데이터 제거– 저장

자료 확보

Page 29: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])29

III-2. PostGIS 에 GIS 업체자료 올리기

테이블 생성– [ 시작 ]- 모든 프로그램 -OpenGeo Suite 3.0.2-pgAdmin– Server Groups – Servers – OpenGeoSuite 더블클릭– Databases – geoserver – Schemas – opengeo – Tables 오른쪽 클릭– New Table… 메뉴– Properties 탭의 Name 에 gis_corp 입력– Columns 탭의 [Add]– Name: id, Data type: integer, [OK]– Name: corp_name, Data Type: character varying, Length: 100, [OK]– Name: addr, Data Type: character varying, Length: 200, [OK]– Name: lon, Data Type: real, [OK]– 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:\OpenGisEdu\Data\gis_related_company_20130227.csv'

WITH DELIMITER ','

CSV HEADER– [F5] 키

PostGIS 에 올리기CREATE TABLE opengeo.gis_corp

(

id integer NOT NULL,

corp_name character varying(100),

addr character varying(200),

lon real,

lat real,

CONSTRAINT gis_corp_pkey PRIMARY KEY (id )

);

ALTER TABLE opengeo.gis_corp OWNER TO postgres;

Page 30: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])30

III-3. WPS 를 이용한 스타일 적용

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]

SQL View Layer 만들기

Page 31: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])31

III-3. 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 에 안 나타날 수도 있습니다 .

WPS 스타일 적용하기

Page 32: 공간정보거점대학 1.geo server_고급과정

IV. 공간자료와 통계의 연결

- 일러두기 -

• 본 자료는 모두 Creative Commons License CC-BY-NC 을 따릅니다 .

• 본 교재에서 사용하는 샘플 데이터 셋은 제공 기관 및 원작자에게 라이선스가 있습니다 .

Page 33: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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:\OpenGisEdu\Data\SIG_201311 에 압축 풀기– 좌표계 정보 확인 : Bessel 타원체의 UTM-K– 해당 좌표계 EPSG 코드 확인 : http://osgeo.kr/17

좌표계 변환– OSGeo4W 명령 프롬프트 실행– 데이터가 있는 폴더로 이동

cd OpenGisEdu\Data\SIG_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

데이터 받기 및 좌표계 변환

Page 34: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])34

IV-1. PostGIS 에 행정구역 자료 올리기

Shape 파일을 SQL 로 변환– Shp2PgSql 명령이 있는 폴더로 이동

Cd “c:\Program Files (x86)\OpenGeo\OpenGeo Suite\pgsql\9.1\bin”– SQL 생성

shp2pgsql -c -s 3857 -i -I -W CP949 C:\OpenGisEdu\Data\SIG_201311\TL_SCCO_SIG_3857.shp opengeo.sig > C:\OpenGisEdu\Data\SIG.sql

– -s 옵션 뒤에 좌표계 , -W 옵션뒤에 코드페이지가 들어가야 함을 명심 Psql 로 데이터 올리기

– 용량이 크거나 덤프가 포함된 sql 은 psql 커맨드로 실행하는 것이 좋다 .

psql -h localhost -p 54321 -U postgres -d geoserver -f C:\OpenGisEdu\Data\SIG.sql

GeoServer 레이어로 등록– GeoServer 관리화면에서– Layers – Add a new resource– Sig – Publish

등록 확인– Layer Preview

SQL 로 만들어 올리기

Page 35: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])35

IV-2. PostGIS 에 인구통계 올리기

주민등록 인구통계 데이터 받기– http://rcps.egov.go.kr:8081/jsp/stat/ppl_stat_jf.jsp– [엑셀다운로드 ]

엑셀에서 csv 만들기– 엑셀파일 열기– 총인구수 , 세대수 , 남자인구수 , 여자인구수의 셀 서식을 1000 단위 구분기호 없게 변경

– CSV 로 저장– 엑셀 종료

CSV 편집– 저장된 CSV 를 Notepad++ 열기– 헤더 부분 한 줄로 수정– 찾기 – 바꾸기 메뉴– 찾기 방식 : 정규표현식– 찾을 단어 : .*\(– 바꿀 단어 : – [ 모두 바꾸기 ]– 찾기 방식 : 일반– 찾을 단어 : ),– 바꿀 단어 : ,– [ 모두 바꾸기 ]– 저장

데이터 받기 및 다듬기

Page 36: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])36

IV-2. PostGIS 에 인구통계 올리기

PostGIS 테이블 만들기– pgAdmin 에서– OpenGeoSuite – Databases – geoserver – Schemas – opengeo – Tables

오른쪽 클릭– New Table…– Name: population_2013– 컬럼 및 기본 키 추가

PostGIS 에 데이터 임포트– pgAdmin 에서– SQL Editor 띄워서– COPY 명령으로 데이터 부어 넣기

COPY opengeo.population_2013(admin_id, pop_tot, household, num_per_house, pop_man, pop_woman, sex_ratio)

FROM 'c:\OpenGisEdu\Data\ppl_20140107110532.csv'

WITH DELIMITER ','

CSV HEADER– 뭘 잘못 했을까요 ?– 오류는 한가지 뿐인가요 ?

PostGIS 에 인구통계 올리기CREATE TABLE opengeo.population_2013

(

admin_id character(10) NOT NULL,

pop_tot integer,

household integer,

num_per_house real,

pop_man integer,

pop_woman integer,

sex_ratio real,

CONSTRAINT population_2013_pkey PRIMARY KEY (admin_id )

) WITH ( OIDS=FALSE);

ALTER TABLE opengeo.population_2013 OWNER TO postgres;

Page 37: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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 와 연결– SQL Editor 탭– [F5] 눌러 실행– 데이터가 나오나요 ? 무엇을 수정해야 할까요 ?

뷰 만들기– pgAdmin 에서– OpenGeoSuite – Databases – geoserver – Schemas – opengeo 오른쪽

클릭– New View…– Name: sig_pop_2013_view– Definition 탭– 만들어 둔 SQL 입력– [OK]

행정구역과 인구를 볼 수 있는 뷰 만들기

SELECT

sig.sig_cd,

sig.sig_kor_nm,

sig.geom,

population_2013.pop_tot,

population_2013.household,

population_2013.num_per_house,

population_2013.pop_man,

population_2013.pop_woman,

population_2013.sex_ratio

FROM

opengeo.sig,

opengeo.population_2013

WHERE

sig.sig_cd||'00000' = population_2013.admin_id;

Page 38: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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:\OpenGisEdu\Data\sig_pop.sld 에 저장

인구밀도 표현을 위한 스타일 만들기

Page 39: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])39

IV-3. 인구수를 색상으로 표현하기

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: &quot;104508.4286&quot;

PostGIS 에 인구통계 올리기

Page 40: 공간정보거점대학 1.geo server_고급과정

국가공간정보 거점대학 오픈 소스 GIS 심화 과정 장병진 ([email protected])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 도 시도

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.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/StyledLay-erDescriptor.xsd">  <NamedLayer>    <Name>Pi Chart</Name>    <UserStyle>      <Title>Pi Chart</Title>

      <FeatureTypeStyle>        <!--FeatureTypeName>Feature</Feature-TypeName--><Rule>  <Name>Chart</Name>  <!--MinScaleDenominator>100</MinScaleDe-nominator>  <MaxScaleDenominator>500000</MaxScaleDe-nominator-->  <PointSymbolizer>    <Graphic>      <ExternalGraphic>        <OnlineResource          xlink:href="http://chart?cht=p&amp;chd=t:${pop_man},${pop_woman}&amp;chco=0000FF,FF0000&amp;chf=bg,s,FFFFFF00" />        <Format>application/chart</Format>      </ExternalGraphic>      <Size>        <ogc:Add>          <ogc:Literal>20</ogc:Literal>          <ogc:Mul>            <ogc:Div>              <ogc:PropertyName>pop_tot</ogc:PropertyName>              <ogc:Literal>100000.0</ogc:Literal>            </ogc:Div>            <ogc:Literal>5</ogc:Literal>          </ogc:Mul>        </ogc:Add>      </Size>    </Graphic>  </PointSymbolizer></Rule>      </FeatureTypeStyle>    </UserStyle>  </NamedLayer></StyledLayerDescriptor>

Page 41: 공간정보거점대학 1.geo server_고급과정

감사합니다 .

Q&A

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