opengeo suite세미나 20111014

37
1 2011 년 10 년 14 OpenGeo Suite 년 년년

Upload: bj-jang

Post on 25-May-2015

775 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: OpenGeo Suite세미나 20111014

1

2011 년 10 월 14 일

OpenGeo Suite 의 활용

Page 2: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

목 차

I OpenGeo Suite 설치

Ⅲ GeoServer

Ⅳ GeoEXT

Ⅴ Performance Tuning

II PostGIS

Page 3: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

Ⅰ. OpenGeo Suite 설치

Page 4: OpenGeo Suite세미나 20111014

4

Ⅰ. OpenGeo Suite 설치

제품 구성

• GeoEXT(OpenLayers+ExtJS):웹에서 지도 콘트롤과 UI 제공

• GeoWebCache:지도 컨텐츠를 타일단위 캐시

• GeoServer:공간자료를 지도형태 (WMS, WFS, WCS, KML 등 ) 로 서비스

• PostGIS :DBMS 로서 공간자료를 유지관리

Page 5: OpenGeo Suite세미나 20111014

5

Ⅰ. OpenGeo Suite 설치

다운로드 및 설치

http://opengeo.org/products/suite/register/

Page 6: OpenGeo Suite세미나 20111014

6

Ⅰ. OpenGeo Suite 설치

OpenGeo Suite 시작

Tomcat 과 포트충돌 (8080)

포트수정 (8088)

정상구동 시작

Page 7: OpenGeo Suite세미나 20111014

7

Ⅰ. OpenGeo Suite 설치

Dashboard 의 기능

서비스 시작 / 종료 • PostGIS 와 GeoServer 동시에 시작 /종료

데이터 관리 • PostGIS 로 Shape 올리기• GeoServer 로 데이터 올리기• PostgreSQL 데이터 관리 (pgAdmin)

레이어 관리 • 레이어 확인 (GeoExplorer)• 레이어 스타일 관리 (Styler)• 레이어 피처 편집 (GeoEditor)• 레이어 캐시 설정 (GWC)

설정관리 • 포트관리 (GeoServer, PostGIS)• GeoServer 데이터 폴더 관리• 암호관리 (GeoServer, PostGIS)• PostGIS 관리 (pqAdmin)• GeoServer 관리 (Admin Page)• 레이어 캐시 설정 (GWC)

관련문서 연결 • Getting Started• FAQ• PostGIS Documentation• GeoServer Documentation• GeoWebCache Documentation• GeoEditor Documentation• Styler Documentation• GeoExplorer Documentation

로그 확인 • GeoServer 로그

Page 8: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

Ⅱ. PostGIS

Page 9: OpenGeo Suite세미나 20111014

9

Ⅱ. PostGIS

Shape 올리기 • Username: postgres 기본 관리자 유저• Password: postgres 기본 암호• Server Host: localhost 내 컴퓨터에 설치한 경우• Service Port: 54321 데시보드에서 설정한 PostGIS 포트• Database: Administrator 설치한 OS 유저의 유저명• Destination Schema: public 기본 스키마• SRID: 4326 WGS84 경위도 EPSG 코드 (spatial_ref_sys 테이블에 있는 값 )• Destination Table: cities 로드할 Shape 파일명과 동일• Geometry Column: the_geom 공간컬럼명• DBF file character encoding: CP949 한글 윈도우 기본 코드페이지

Dashboard PostGIS Import shapefiles pgAdmin III Plugins PostGIS Shapefile and DBF Loader [ 시작 ] 모든 프로그램 OpenGeo Suite pgShapeLoader

Page 10: OpenGeo Suite세미나 20111014

10

Ⅱ. PostGIS

PostgreSQL Query

pgAdmin III 툴 Query tool pgAdmin III 객체브라우저 대상 테이블 ( 오른쪽 마우스 ) 스크립트 SELECT 스크립트

Page 11: OpenGeo Suite세미나 20111014

11

Ⅱ. PostGIS

GIS 계산

-- 좌표계 변환SELECT ST_AsText(the_geom) LonLat, ST_AsText(ST_Transform(the_geom, 2097)) TmMid, ST_AsText(ST_Transform(the_geom, 32652)) Utm52N, ST_AsText(ST_Transform(the_geom, 900913)) GoogleFROM public.citiesWHERE "name" = 'Seoul';------------------------------------------------------------"POINT(126.935249328613 37.542350769043)";"POINT(194278.313179724 449211.939204225)";"POINT(317589.398888947 4157043.12438647)";"POINT(14130367.3189785 4514975.53386539)"

-- 영역 , 둘레 , 면적 계산SELECT placename, ST_AsText(ST_Envelope(the_geom)) Envelope, ST_Length(ST_Transform(ST_Boundary(the_geom), 2097)) perimeter, ST_Area(ST_Transform(the_geom, 2097)) AreaFROM public."WorldCountries"where placename like '%Korea%';-----------------------------------------------------------------------"North Korea";"POLYGON((124.323951721191 37.6713790893555,124.323951721191 43.0060997009277,130.697418212891 43.0060997009277,130.697418212891 37.6713790893555,124.323951721191 37.6713790893555))";2435167.84243881;122713186231.607"South Korea";"POLYGON((126.125816345215 33.192211151123,126.125816345215 38.625244140625,129.586868286133 38.625244140625,129.586868286133 33.192211151123,126.125816345215 33.192211151123))";2209246.0231036;96546624592.7897

http://suite.opengeo.org/docs/postgis/postgis/html/ch04.html#OpenGISWKBWKThttp://spatialreference.org/ref/?search=korea

Page 12: OpenGeo Suite세미나 20111014

12

Ⅱ. PostGIS

공간 Query

-- 사우디 MBR 의 도시 조회SELECT name, countryFROM citiesWHERE the_geom @ ( SELECT the_geom FROM public."WorldCountries" WHERE placename = 'Saudi Ara-bia' );-------------------------------------------"Amman";"Jordan""Al Basra";"Iraq""Doha";"Qatar""Mecca";"Saudi Arabia""Bur Sudan";"Sudan""Jerusalem";"Israel""Al Madinah";"Saudi Arabia""Yazd";"Iran""Al Kuwayt";"Kuwait""Ar Riyad";"Saudi Arabia""Jiddah";"Saudi Arabia""Shiraz";"Iran""Tel Aviv-Yafo";"Israel""Abu Zaby";"Untd Arab Em"

http://postgis.refractions.net/documentation/manual-1.5/reference.html#Operatorshttp://postgis.refractions.net/documentation/manual-1.5/reference.html#Spatial_Relationships_Measurementshttp://postgis.refractions.net/documentation/manual-1.5/ST_Contains.html

-- 사우디 geometry 내의 도시 조회SELECT name, countryFROM citiesWHERE ST_Contains( ( SELECT the_geom FROM public."WorldCountries" WHERE placename = 'Saudi Ara-bia' ), the_geom);-------------------------------------------"Mecca";"Saudi Arabia""Al Madinah";"Saudi Arabia""Ar Riyad";"Saudi Arabia""Jiddah";"Saudi Arabia"

포함되는 경우

포함 안 되는 경우

Page 13: OpenGeo Suite세미나 20111014

13

Ⅱ. PostGIS

Format 변환

-- FormattingSELECT the_geom, ST_AsBinary(the_geom), ST_AsEWKB(the_geom), ST_AsText(the_geom), ST_AsEWKT(the_geom), ST_AsGeoJSON(the_geom), ST_AsGML(the_geom), ST_AsKML(the_geom), ST_AsSVG(the_geom), ST_GeoHash(the_geom)FROM public.citiesWHERE "name" = 'Seoul';-----------------------------------------------------"0101000020E610000000000020DBBB5F40000000C06BC54240"; geometry"\001\001\000\000\000\000\000\000 \333\273_@\000\000\000\300k\305B@"; WKB"\001\001\000\000 \346\020\000\000\000\000\000 \333\273_@\000\000\000\300k\305B@";“ EWKB"POINT(126.935249328613 37.542350769043)“; WKT“SRID=4326;POINT(126.935249328613 37.542350769043)"; EWKT"{"type":"Point","coordinates":[126.93524932861328,37.542350769042969]}"; GeoJSON"<gml:Point srsName="EPSG:4326"><gml:coordinates>126.93524932861328,37.542350769042969</gml:coordinates></gml:Point>"; GML"<Point><coordinates>126.93524932861328,37.542350769042969</coordinates></Point>“; KML“cx="126.93524932861328" cy="-37.542350769042969""; SVG"wydm86rkj9qj92me2k56“ GeoHash

http://postgis.refractions.net/documentation/manual-1.5/reference.html#Geometry_Outputs

Page 14: OpenGeo Suite세미나 20111014

14

Ⅱ. PostGIS

QGIS 에서 보기

Quantum GIS Layer Add PostGIS Layer

수도인 도시만 필터링 !

http://www.qgis.org/wiki/Download

Page 15: OpenGeo Suite세미나 20111014

15

Ⅱ. PostGIS

Shape 으로 저장

Quantum GIS Layers cities ( 오른쪽 클릭 ) Save as…

Page 16: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

Ⅲ. GeoServer

Page 17: OpenGeo Suite세미나 20111014

17

GeoServer

Ⅲ. GeoServer

GeoServer 가 하는일

WMSPNGJPEGGIFTiffKMLKMZSVGGeoRSSPDFOpenLayersAtomPub

WCSArcGridText Debug GridBMPGeoTIFFTIFFPNGJPEG

WFS

WMS

WCS

VectorData

RasterData

FeatureObject

FormattedMap

CoverageData

요청 영역에 해당하는 점 , 선 , 폴리곤 등의 도형 객체를 제공 .어떻게 그려야 하는지는 사용자에게 맡긴다 .

요청 영역에 해당하는 지도를 이미지나 심벌이 포함된 벡터로 제공 .어디서나 동일하게 해석할 수 있는 심벌로 렌더링

요청 영역에 해당하는 레스터 GIS 자료 ( 분류 , 그리드값 등 ) 를 제공이미지 형태로 제공되어도 셀의 값에 의미가 있다 .

WFSGML2GML2-GZIPGML3.1GML3.2GeoJSONCSV

WFS Samplehttp://labs.metacarta.com/flickrbrowse/flickr.py/flickr?format=WFS&sort=interestingness-desc&service=WFS&request=GetFeatures&srs=EPSG:4326&maxfeatures=100&bbox=-180,-90,180,90WMS Samplehttp://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?LAYERS=Foundation.GTOPO30&VERSION=1.3.0&EXCEPTIONS=INIMAGE&SERVICE=WMS&REQUEST=GetMap&STYLES=&FORMAT=image/jpeg&SRS=EPSG:4326&BBOX=-135,-270,135,270&WIDTH=768&HEIGHT=384WCS SampleGeoServer Admin Page Demo WCS request builder

Page 18: OpenGeo Suite세미나 20111014

18

Ⅲ. GeoServer

data_dir

• GeoServer 에서 사용할 모든 데이터는 서버의 data_dir 에 있어야 한다 .• 기본적으로 OpenGeo Suite 설치한 User 폴더의 .opengeo/data_dir 혹은 GeoServer 설치 폴더의 data_dir• 데시보드 Preferences 텝의 Data Directory 에서 변경 가능• GEOSERVER_DATA_DIR 환경 변수에서도 변경 가능• 서비스할 데이터 , 심벌 , 워크스페이스 구성 , GWC 캐시 등이 들어간다 .• 반드시 여유공간이 많은 디스크로 설정해야 한다 .

Page 19: OpenGeo Suite세미나 20111014

19

Ⅲ. GeoServer

데이터 올리기 (1)

1. http://demo.grida.kr/demo/sample/worldmap.zip : 벡터 세계지도 샘플2. http://demo.grida.kr/demo/sample/bluemarble_wgs84_tif.zip : 한반도지역 위성영상 ( 나사

블루마블 )

샘플 다운로드

1. C:\Users\Administrator\.opengeo\data_dir\data\WorldMap 에 worldmap.zip 압축 해제2. C:\Users\Administrator\.opengeo\data_dir\data\bluemarble 에 bluemarble_wgs84_tif.zip

압축 해제

data_dir 에 복사

1. http://localhost:8088/geoserver 에 접속2. admin / geoserver 로 로그인3. 왼쪽 Data 항목 중 Workspaces 선택4. Add new workspace 선택5. Name 에 demo, Namespace 에 http://demo.grida.kr 입력하고 [Submit]

Workspace

Page 20: OpenGeo Suite세미나 20111014

20

Ⅲ. GeoServer

데이터 올리기 (2)

1. 왼쪽 Data 항목 중 Stores 선택2. Add new store 선택3. Directory of spatial files (shapefiles) 선택4. Workspace 에 demo, Data Source Name 에 WorldMap, Directory of shapefiles 에

file:data/WorldMap 입력하고 [Save]5. 왼쪽 Data 항목 중 Layers 선택6. Add layer from 에 demo:WorldMap 선택7. 레이어 리스트에 있는 LatLon 의 Publish 를 선택8. Declared SRS 에 EPSG:4326 입력9. Compute from data 선택10.Compute from native bounds 선택11. [Save] 선택12. Layers 리스트 중 추가한 LatLon 레이어가 등록 되었는지 확인13. 왼쪽 Data 항목 중 Layers 선택14. Add layer from 에 demo:WorldMap 선택15. 레이어 리스트에 있는 모든 레이어의 Publish 를 선택하여 상기 과정 반복16. 왼쪽 Data 항목 중 Layer Preview 선택17. 레이어 리스트 중 demo:WorldCountries 의 OpenLayers 선택18. 국가들이 잘 보이는지 확인

Shape Layer 등록

Page 21: OpenGeo Suite세미나 20111014

21

Ⅲ. GeoServer

데이터 올리기 (3)

1. 왼쪽 Data 항목 중 Stores 선택2. Add new store 선택3. PostGIS 선택4. Workspace 에 demo, Data Source Name 에 PostGIS, host 에 localhost, port 에 54321,

database 에 Administrator, schema 에 public, user 에 postgres, passwd 에 postgres입력하고 [Save]

5. 왼쪽 Data 항목 중 Layers 선택6. Add layer from 에 demo:PostGIS 선택7. 레이어 리스트에 있는 cities 의 Publish 를 선택8. Compute from data 선택9. Compute from native bounds 선택10. [Save] 선택11. Layers 리스트 중 추가한 cities 레이어가 등록 되었는지 확인12. 왼쪽 Data 항목 중 Layer Preview 선택13. 레이어 리스트 중 demo:cities 의 OpenLayers 선택14. 도시들이 잘 보이는지 확인

PostGIS 등록

Page 22: OpenGeo Suite세미나 20111014

22

Ⅲ. GeoServer

데이터 올리기 (4)

1. 왼쪽 Data 항목 중 Stores 선택2. Add new store 선택3. GeoTIFF 선택4. Workspace 에 demo, Data Source Name 에 bluemarble, URL 에 file:data/

bluemarble/wgs84.tif 입력하고 [Save]5. 왼쪽 Data 항목 중 Layers 선택6. Add layer from 에 demo:bluemarble 선택7. 레이어 리스트에 있는 wgs84 의 Publish 를 선택8. Declared SRS 에 EPSG:4326 입력9. [Save] 선택10. Layers 리스트 중 추가한 wgs84 레이어가 등록 되었는지 확인11. 왼쪽 Data 항목 중 Layer Preview 선택12. 레이어 리스트 중 demo:wgs84 의 OpenLayers 선택13. 영상이 잘 보이는지 확인

위성영상 등록

Page 23: OpenGeo Suite세미나 20111014

23

Ⅲ. GeoServer

심벌라이징 (1)

1. 왼쪽 Data 항목 중 Style 선택2. Add new style 선택3. Name 에 demo_cities 입력4. Copy from existing style 에서 point 선택하고 copy… 누르기5. 20 행의 <CssParameter name="fill">#FF0000</CssParameter> 의 색 값을 #DDDDDD

로 변경6. [Validate] 버튼 눌러 상단에 No validation errors. 메시지 확인7. [Submit] 눌러 종료8. 왼쪽 Data 항목 중 Layers 선택9. 레이어 리스트 중 demo 웍스페이스의 cities 레이어 선택10.Publishing 탭 선택11. Default Style 에서 demo_cities 선택12. [Save] 버튼 눌러 종료13. 왼쪽 Data 항목 중 Layer Preview 선택14. 레이어 리스트 중 demo:cities 레이어의 Styler 선택15. Styler 창의 왼쪽 하단 Legend 에서 Red square 선택16. Name 에 City, Symbol 에 circle, Size 에 3 입력17. Stroke 에 체크 하고 Style 에 solid, Color 에 #000000, Width 에 1 입력18. [Save] 눌러 완료하여 변경 확인

Point Symbol

Page 24: OpenGeo Suite세미나 20111014

24

Ⅲ. GeoServer

심벌라이징 (2)

1. 왼쪽 하단 Legend 에서 [Add new] 선택2. Name 에 Capital, Symbol 에 square, Size 에 6 입력3. Fill color 에 파란색 선택4. Style 창에서 Labels 탭 선택5. Label Features 체크6. Label values 에서 name 선택7. Arial 을 폰트로 선택하고 Halo 에 체크8. Advanced 탭을 선택9. Limit by condition 체크 하고 조건 입력하는 곳에서 capital, =, Y 입력 ( 수도만 필터링 )10. [Save] 눌러 완료11. 왼쪽 하단 Legend 에서 City 선택12. Style 창에서 Labels 탭 선택13.Label Features 체크14. Label values 에서 name 선택 15.Arial 을 폰트로 선택하고 Halo 에 체크16.Advanced 탭을 선택17.Limit by scale 체크하고 Min scale limit 체크 . 1 에 30000000 입력18.Limit by condition 체크 하고 조건 입력하는 곳에서 capital, <>, Y 입력 ( 수도 아닌 것만 )19. 수도는 크게 , 일반 도시는 작게 보이고 전 지구영역으로 축소시 수도만 보이는지 확인

조건에 따른 심벌

Page 25: OpenGeo Suite세미나 20111014

25

Ⅲ. GeoServer

Layer Group

※ LayerGroup 을 이용하면 여러 레이어로 구성된 지도를 쉽게 서비스 할 수 있다 .

1. 왼쪽 Data 항목 중 Layer Groups 선택2. Add new layer group 선택3. Name 에 WorldMap 입력4. [Add Layer…] 선택5. wgs84 레이어 선택6. [Add Layer…] 선택7. WorldCountries 레이어 선택8. [Add Layer…] 선택9. LatLon 레이어 선택10. [Add Layer…] 선택11.cities 레이어 선택12. [Generate Bounds] 선택13. [Save] 선택하여 완료14. 왼쪽 Data 항목 중 Layer Preview 선택15. WorldMap 레이어 그룹의 OpenLayers 선택

Page 26: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

Ⅳ. GeoEXT

Page 27: OpenGeo Suite세미나 20111014

27

Ⅳ. GeoEXT

GeoEXT 란 ?

OpenLayers ExtJS

• ExtJS 는 주로 고급 UI 를 쉽게 구현하기 위해 사용• jQuery 는 자비스크립트 코딩을 단순화 하기 위해 사용

• 둘 다 자바스크립트 라이브러리• 여러 브라우저에서 동일한 코딩으로 동작하도록 크로스 브라우징을 지원

• 웹에서 지도 콘트롤 제공• 구글 , 야후 , 빙 등 상용지도 부착• WMS, WFS, KML 등 표준 컨텐츠 부착• 지도상에 객체를 그리고 편집• 지도와 객체들의 이벤트 처리

• Grid, Tree, Chart, Tab, Window 등 다양한 콘트롤 제공

• Desktop Application 느낌의 UI• 크로스 브라우징 제공• GIS 데이터 조작을 위한 UI 작성

ExtJS vs jQuery

http://www.sencha.com/products/extjshttp://www.openlayers.org/

Page 28: OpenGeo Suite세미나 20111014

28

Ⅳ. GeoEXT

간단한 샘플

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <meta name="apple-mobile-web-app-capable" content="yes"> <title>OpenLayers Example</title> <link rel="stylesheet" href="../theme/default/style.css" type="text/css"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <h1 id="title">OpenLayers Example</h1> <div id="tags">simple, basic</div> <p id="shortdesc"> Demonstrate a simple map with an overlay that includes layer switching controls. </p> <div id="map" class="smallmap"></div> <div id="docs"> <p>This is a basic example demonstrating the use of a map with two layers and a few controls.</p> <p>View the <a href="example.js" target="_blank">example.js</a> source to see how this is done.</p> </div> <script src="../OpenLayers.js"></script>

<script>var map = new OpenLayers.Map("map");

var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: "basic"});

var dm_wms = new OpenLayers.Layer.WMS( "Canadian Data", "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap", { layers: "bathymetry,land_fn,park,drain_fn,drainage," + "prov_bound,fedlimit,rail,road,popplace", transparent: "true", format: "image/png" }, {isBaseLayer: false, visibility: false});

map.addLayers([ol_wms, dm_wms]);map.addControl(new OpenLayers.Control.LayerSwitcher());map.zoomToMaxExtent();</script> </body> </html>

Page 29: OpenGeo Suite세미나 20111014

29

Ⅳ. GeoEXT

샘플 찾기

OpenLayers 는 샘플이 잘 되어 있어 다음 경로에서 검색하면 잘 나온다 .Class Documentation 에서 상세한 설명을 볼 수 있다 .

1. 다음의 경로에 웹 브라우저로 접속한다 . http://www.openlayers.org/dev/examples/2. 상단 검색창에 원하는 검색어를 입력한다 .3. 아래 나온 검색 결과 중 원하는 것을 선택한다 .4. 샘플 페이지의 동작을 확인한다 .5. 원하던 샘플이라면 오른쪽 마우스를 눌러 소스 보기를 한다 .6. 소스를 바탕으로 자신의 웹 지도에 기능을 구현한다 .

• 구글 지도를 어떻게 부착해야 하지 ? google• 풍선 도움말을 붙일 수 없을까 ? popup• 폴리곤을 그릴 수는 없나 ? polygon• KML 을 붙일 수도 있나 ? kml• WMS 도 가능한가 ? wms• 지도가 이동된 때에 뭔가 할 수 없을까 ? move event• 스마트폰용 지도도 가능한가 ? mobile

검색어 샘플

Page 30: OpenGeo Suite세미나 20111014

30

Ⅳ. GeoEXT

다양한 좌표계 이용

select ST_AsText(ST_Transform(ST_SetSRID(ST_LineFromText('LINESTRING(110 20, 150 50)'), 4326), 900913));select ST_AsText(ST_Transform(ST_SetSRID(ST_LineFromText('LINESTRING(110 20, 150 50)'), 4326), 2097));select ST_AsText(ST_Transform(ST_SetSRID(ST_LineFromText('LINESTRING(110 20, 150 50)'), 4326), 32652));

http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=WorldMap&styles=&width=660&height=330&format=application/openlayers&srs=EPSG:4326&bbox=110,20,150,50

http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=WorldMap&styles=&width=660&height=330&format=application/openlayers&srs=EPSG:900913&bbox=12245143.9872601,2273030.92698769,16697923.618991,6446275.84101716

http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=WorldMap&styles=&width=660&height=330&format=application/openlayers&srs=EPSG:2097&bbox=-1599161.20365349,-1401708.62964815,1839996.14666927,2091714.20629109

http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=WorldMap&styles=&width=660&height=330&format=application/openlayers&srs=EPSG:32652&bbox=-1516012.385514,2328845.36574506,1998458.72659911,5753394.63053658

WG

S84

Google

TM

중부

UTM

52

N

좌표계 변환된범위 계산

SQL

Page 31: OpenGeo Suite세미나 20111014

31

Ⅳ. GeoEXT

사용자 정의 좌표계

목적

• 비표준 좌표계인 UTMK 좌표계를 사용해 보자 !

좌표계 정보 검색

• http://spatialreference.org/ref/?search=korea• SR-ORG:7165: UTMK 선택

GeoServer 용 정보 입력

• SpatialReferences.org UTMK 화면에서 GeoServer 선택• 좌표계 정보 복사• data_dir/user_projections/epsg.properties 파일 오픈• 제일 하단에 좌표계 정보 붙여 넣고 저장• GeoServer 재기동

PostGIS 용 정보 입력

• SpatialReferences.org UTMK 화면에서 PostGIS 선택• SQL 복사 • pgAdmin 으로 PostgreSQL 의 Administrator 데이터 베이스에 접속• Query 창 띠우고 복사한 SQL 붙여 넣고 [F5] 눌러 실행

테스트

• select ST_AsText(ST_Transform(ST_SetSRID(ST_LineFromText('LINESTRING(110 20, 150 50)'), 4326), 97165));

• http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=WorldMap&styles=&width=660&height=330&format=application/openlayers&srs=EPSG:7165&bbox=-852821.081908005,104613.151209606,2604316.19091138,3579939.07740313

Page 32: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

Ⅴ. Performance Tuning

Page 33: OpenGeo Suite세미나 20111014

33

Web Browser

GIS Server

Ⅴ. Performance Tuning

Web Cache Logic

URI 요청

Browser Cache 확인

있는가 ?

유효기간 ?

Browser Cache Hit!

End

헤더에 If-Modified-Since:LastModifiedTime 붙여 요청

컨텐츠 요청

304 not modified

새 버전이 있는가 ?컨텐츠 생산 (GeoServer)

GWC 에 있는가 ?

컨텐츠 전송

컨텐츠 사용

No

Yes

Remain

Expire

No

Yes

0.1 ms

10 ms

50 ms

No

Yes

500 ms

Page 34: OpenGeo Suite세미나 20111014

34

Ⅴ. Performance Tuning

Cache Time 설정

1. GeoServer Admin 화면 접속2. 왼쪽 Data 항목 중 Layers 선택3. WorldCountries Layer 선택4. Publishing 탭 선택5. Edit Layer 아래 Response Cache Headers 체크6. Cache Time 에 초단위로 컨텐츠 유효기간 604800 (7 일 ) 입력 . 60초 * 60 분 *24 시간 * 7 일

= 6048007. [Save] 눌러 완료

Cache Header 설정

1. GeoServer Admin 화면 접속2. 왼쪽 Data 항목 중 Layer Preview 선택3. demo:WorldCountries Layer 의 OpenLayers 선택4. 지도창이 뜨면 Http 헤더 분석도구로 Response 확인 (Chrome [F12], FireFox FireBug, IE

HttpWatch)5. Response Header 부분에 Expires, Cache-Control: max-age=604800 값이 추가되었음을

확인6. 휠로 줌 인 , 줌 아웃 반복 별로 빨라지지 않은 것 같다 ㅠㅠ7. 지도 우상단의 옵션버튼 클릭8. Tiling 에서 Tiled 선택9. 휠로 줌 인 , 줌 아웃 반복 이번엔 확실히 빨라진 것이 보인다 .

Cache Test

Cache 가 되려면 Tiled 로 호출하여야만 한다 !http://wiki.osgeo.org/wiki/WMS_Tiling_Client_Recommendation

Page 35: OpenGeo Suite세미나 20111014

35

Ⅴ. Performance Tuning

GeoWebCache

1. 왼쪽 Setting 항목 중 GeoWebCache 선택2. WMS Integration 에서 Enable direct WMS integration 에 체크 되어 있는지 확인 3. Data_dir/gwc 폴더에 보면 캐시가 이미지로 쌓이는 것을 확인 가능

GWC 활성화

1. 상단의 GWC Home Page 선택2. [F5] 를 눌러 최신 현황으로 갱신 (3초의 갭이 있음 )

GWC 통계확인

1. 상단의 GWC Demos Page 선택2. 캐시를 만들려는 레이어 혹은 레이어 그룹의 Seed this layer 선택3. 캐시를 만들기 위해 사용할 쓰레드 수 선택4. 없는 타일만 생산하도록 Seed- generate missing tiles 선택5. Grid Set 에서 사용할 좌표계 선택 (4326, 900913, 레이어 고유의 좌표계 지원 )6. 사용할 이미지 형태 선택 ( 이 형태로 호출해야지만 캐시가 유효 )7. 캐시를 만들 Zoom start 와 Zoom end 를 선택 (0 은 전지구 스케일 , 한단 올라갈 때마다 2배

확대 )8. 캐시가 필요한 영역의 Bounding Box 입력 ( 입력 안하면 전체 범위 )9. [Submit] 을 눌러 작업 시작

캐시 미리 만들기

Page 36: OpenGeo Suite세미나 20111014

36

Ⅴ. Performance Tuning

데이터 간략화

1. WFS 에만 해당하는 기법임2. 도형컬럼과 키컬럼만이 있도록 레이어를 구성하는 것이 좋다 .3. 지적 등의 자료에는 보통 수십 개의 컬럼이 존재4. WFS 등 XML 로 데이터 가져올 때 컬럼수에 따른 부하가 더 커진다 .5. 도형과 키 필드만을 가져와 나머지 속성은 필요시 DB 에 조회하는 방식으로 개발하는 것 권정

컬럼 최소화

1. 도형에서 불필요하게 많은 점을 제거2. 주로 더글라스푸커 간략화 알고리즘 사용3. Quantum GIS 에서 Vector Geometry Tools Simplify geometries 기능을 이용해 수행 가능4. 디스플레이 축척에 맞는 정도로 간략화 해주는 것이 좋음5. 확대되었을 때와 축소되었을 때 서로 다른 정도로 간략화된 레이어를 보여주면 더 효과적

도형 간략화

1. 한반도 전체가 그려진 피처를 땅을 표현하기 위해 계속 켜놓는 경우 등에 매우 느려지는 현상 발생2. 동단위의 지역을 보고 있을 때도 땅 색 표현을 위해 수십만개 점을 가진 한반도를 계속 그림3. 길고 점이 많은 폴리라인의 경우도 동일 현상 발생4. 객체들을 일정 크기로 썰어 주면 해결 가능5. QGIS 에서 Research Tools Vector grid 로 그리드 만들어 Geoprocessing Tools Intersect

큰 도형 분할

Page 37: OpenGeo Suite세미나 20111014

OpenGeo Suite 기술 세미나

Q&A

감사합니다 .