SlideShare une entreprise Scribd logo
1  sur  37
1
2011년 10월 14일
OpenGeo Suite 기술 세미나
목 차
I OpenGeo Suite 설치
Ⅲ GeoServer
Ⅳ GeoEXT
Ⅴ Performance Tuning
II PostGIS
OpenGeo Suite 기술 세미나
Ⅰ. OpenGeo Suite 설치
4
Ⅰ. OpenGeo Suite 설치
제품 구성
• GeoEXT(OpenLayers+ExtJS):
웹에서 지도 콘트롤과 UI 제공
• GeoWebCache:
지도 컨텐츠를 타일단위 캐시
• GeoServer:
공간자료를 지도형태
(WMS, WFS, WCS, KML 등)로 서
비스
• PostGIS :
DBMS로서 공간자료를 유지관리
5
Ⅰ. OpenGeo Suite 설치
다운로드 및 설치
http://opengeo.org/products/suite/register/
6
Ⅰ. OpenGeo Suite 설치
OpenGeo Suite 시작
Tomcat과 포트충돌 (8080)
포트수정(8088)
정상구동 시작
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 로그
OpenGeo Suite 기술 세미나
Ⅱ. PostGIS
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
10
Ⅱ. PostGIS
PostgreSQL Query
 pgAdmin III  툴  Query tool
 pgAdmin III  객체브라우저  대상 테이블(오른쪽 마우스)  스크립트  SELECT 스크립트
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)) Google
FROM
public.cities
WHERE "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)) Area
FROM
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#OpenGISWKBWKT
http://spatialreference.org/ref/?search=korea
12
Ⅱ. PostGIS
공간 Query
-- 사우디 MBR의 도시 조회
SELECT name, country
FROM cities
WHERE the_geom @
(
SELECT the_geom
FROM public."WorldCountries"
WHERE placename = 'Saudi Arabia'
);
-------------------------------------------
"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#Operators
http://postgis.refractions.net/documentation/manual-1.5/reference.html#Spatial_Relationships_Measurements
http://postgis.refractions.net/documentation/manual-1.5/ST_Contains.html
-- 사우디 geometry 내의 도시 조회
SELECT name, country
FROM cities
WHERE ST_Contains(
(
SELECT the_geom
FROM public."WorldCountries"
WHERE placename = 'Saudi Arabia'
),
the_geom
);
-------------------------------------------
"Mecca";"Saudi Arabia"
"Al Madinah";"Saudi Arabia"
"Ar Riyad";"Saudi Arabia"
"Jiddah";"Saudi Arabia"
 포함되는 경우
 포함 안 되는 경우
13
Ⅱ. PostGIS
Format 변홖
-- Formatting
SELECT
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.cities
WHERE "name" = 'Seoul';
-----------------------------------------------------
"0101000020E610000000000020DBBB5F40000000C06BC54240";  geometry
"001001000000000000000000 333273_@000000000300k305B@";  WKB
"001001000000 346020000000000000000 333273_@000000000300k305B@";“  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
14
Ⅱ. PostGIS
QGIS에서 보기
 Quantum GIS  Layer  Add PostGIS Layer
수도인 도시만
필터링!
http://www.qgis.org/wiki/Download
15
Ⅱ. PostGIS
Shape으로 저장
 Quantum GIS  Layers  cities (오른쪽 클릭)  Save as…
OpenGeo Suite 기술 세미나
Ⅲ. GeoServer
17
GeoServer
Ⅲ. GeoServer
GeoServer가 하는일
WMS
PNG
JPEG
GIF
Tiff
KML
KMZ
SVG
GeoRSS
PDF
OpenLayers
AtomPub
WCS
ArcGrid
Text Debug Grid
BMP
GeoTIFF
TIFF
PNG
JPEG
WFS
WMS
WCS
Vector
Data
Raster
Data
Feature
Object
Formatted
Map
Coverage
Data
요청 영역에 해당하는 점, 선, 폴리곤 등의 도형 객
체를 제공.
어떻게 그려야 하는지는 사용자에게 맡긴다.
요청 영역에 해당하는 지도를 이미지나 심벌이 포
함된 벡터로 제공.
어디서나 동일하게 해석할 수 있는 심벌로 렌더링
요청 영역에 해당하는 레스터 GIS 자료(분류, 그리
드값 등)를 제공
이미지 형태로 제공되어도 셀의 값에 의미가 있다.
WFS
GML2
GML2-GZIP
GML3.1
GML3.2
GeoJSON
CSV
 WFS Sample
http://labs.metacarta.com/flickrbrowse/flickr.py/flickr?format=WFS&sort=i
nterestingness-
desc&service=WFS&request=GetFeatures&srs=EPSG:4326&maxfeatures
=100&bbox=-180,-90,180,90
 WMS Sample
http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?LAYERS=Found
ation.GTOPO30&VERSION=1.3.0&EXCEPTIONS=INIMAGE&SERVICE=WM
S&REQUEST=GetMap&STYLES=&FORMAT=image/jpeg&SRS=EPSG:432
6&BBOX=-135,-270,135,270&WIDTH=768&HEIGHT=384
 WCS Sample
GeoServer Admin Page  Demo  WCS request builder
18
Ⅲ. GeoServer
data_dir
• GeoServer에서 사용할 모든 데이터는 서버의 data_dir에 있어야 한다.
• 기본적으로 OpenGeo Suite 설치한 User 폴더의 .opengeo/data_dir 혹은 GeoServer설치 폴더의 data_dir
• 데시보드 Preferences 텝의 Data Directory 에서 변경 가능
• GEOSERVER_DATA_DIR 홖경 변수에서도 변경 가능
• 서비스할 데이터, 심벌, 워크스페이스 구성, GWC 캐시 등이 들어간다.
• 반드시 여유공간이 많은 디스크로 설정해야 한다.
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:UsersAdministrator.opengeodata_dirdataWorldMap 에 worldmap.zip 압축 해제
2. C:UsersAdministrator.opengeodata_dirdatabluemarble 에 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
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 등록
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 등록
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. 영상이 잘 보이는지 확인
위성영상 등록
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
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. 수도는 크게, 일반 도시는 작게 보이고 젂 지구영역으로 축소시 수도만 보이는지 확인
조건에 따른 심벌
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 선택
OpenGeo Suite 기술 세미나
Ⅳ. GeoEXT
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/
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>
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
검색어 샘플
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&re
quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form
at=application/openlayers&srs=EPSG:4326&bbox=110,20,150,50
http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&re
quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form
at=application/openlayers&srs=EPSG:900913&bbox=12245143.9872601,22
73030.92698769,16697923.618991,6446275.84101716
http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&re
quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form
at=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&re
quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form
at=application/openlayers&srs=EPSG:32652&bbox=-
1516012.385514,2328845.36574506,1998458.72659911,5753394.63053658
WGS84
Google
TM중부
UTM52N
좌표계 변홖된
범위 계산
SQL
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&s
tyles=&width=660&height=330&format=application/openlayers&srs=EPSG:7165&bbox=-852821.081908005,1
04613.151209606,2604316.19091138,3579939.07740313
OpenGeo Suite 기술 세미나
Ⅴ. Performance Tuning
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
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일 = 604800
7. [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
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]을 눌러 작업 시작
캐시 미리 만들기
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
큰 도형 분할
OpenGeo Suite 기술 세미나
Q&A
감사합니다.

Contenu connexe

En vedette

오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS
JungHwan Yun
 

En vedette (11)

Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
 
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
 
오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS오픈소스 GIS 교육 - PostGIS
오픈소스 GIS 교육 - PostGIS
 
QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현 QGIS 고급 및 PyQGIS - 김기웅, 임영현
QGIS 고급 및 PyQGIS - 김기웅, 임영현
 
공간정보거점대학 - PyQGIS 및 플러그인 개발
공간정보거점대학 - PyQGIS 및 플러그인 개발공간정보거점대학 - PyQGIS 및 플러그인 개발
공간정보거점대학 - PyQGIS 및 플러그인 개발
 
공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정공간정보거점대학 1.geo server_고급과정
공간정보거점대학 1.geo server_고급과정
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초
 
GeoServer 2.4.x 한국어 사용자 지침서
GeoServer 2.4.x 한국어 사용자 지침서GeoServer 2.4.x 한국어 사용자 지침서
GeoServer 2.4.x 한국어 사용자 지침서
 
오픈소스 GIS 개요
오픈소스 GIS 개요오픈소스 GIS 개요
오픈소스 GIS 개요
 
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
 
도시 설계와 GIS 기술의 관계
도시 설계와 GIS 기술의 관계도시 설계와 GIS 기술의 관계
도시 설계와 GIS 기술의 관계
 

Plus de BJ Jang

[Foss4 g2013]the architecture of mobile traffic map service final
[Foss4 g2013]the architecture of mobile traffic map service final[Foss4 g2013]the architecture of mobile traffic map service final
[Foss4 g2013]the architecture of mobile traffic map service final
BJ Jang
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
BJ Jang
 

Plus de BJ Jang (16)

Mago3D Barcelona ICGC(카탈루니아 지형 및 지질연구소) 발표자료
Mago3D Barcelona ICGC(카탈루니아 지형 및 지질연구소) 발표자료Mago3D Barcelona ICGC(카탈루니아 지형 및 지질연구소) 발표자료
Mago3D Barcelona ICGC(카탈루니아 지형 및 지질연구소) 발표자료
 
공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습공간SQL을 이용한 공간자료분석 기초실습
공간SQL을 이용한 공간자료분석 기초실습
 
오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료
 
2017년 나의 계획
2017년 나의 계획2017년 나의 계획
2017년 나의 계획
 
오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습오픈소스 개발을 위한 Git 사용법 실습
오픈소스 개발을 위한 Git 사용법 실습
 
QGIS 소개 및 ArcMap과의 비교
QGIS 소개 및 ArcMap과의 비교QGIS 소개 및 ArcMap과의 비교
QGIS 소개 및 ArcMap과의 비교
 
PyQGIS 개발자 쿡북
PyQGIS 개발자 쿡북PyQGIS 개발자 쿡북
PyQGIS 개발자 쿡북
 
Open Source based GIS devlopment cases by Gaia3D_20150417
Open Source based GIS devlopment cases by Gaia3D_20150417Open Source based GIS devlopment cases by Gaia3D_20150417
Open Source based GIS devlopment cases by Gaia3D_20150417
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
Managing Multi-DBMS on a Single UI , a Web-based Spatial DB Manager-FOSS4G A...
Managing Multi-DBMS on a Single UI, a Web-based Spatial DB Manager-FOSS4G A...Managing Multi-DBMS on a Single UI, a Web-based Spatial DB Manager-FOSS4G A...
Managing Multi-DBMS on a Single UI , a Web-based Spatial DB Manager-FOSS4G A...
 
올챙이 국제스타 만들기 20141023
올챙이 국제스타 만들기 20141023올챙이 국제스타 만들기 20141023
올챙이 국제스타 만들기 20141023
 
Github를 이용한 협동개발 20141001
Github를 이용한 협동개발 20141001Github를 이용한 협동개발 20141001
Github를 이용한 협동개발 20141001
 
Big size meteorological data processing and mobile displaying system using ...
Big size meteorological data processing and mobile displaying system using ...Big size meteorological data processing and mobile displaying system using ...
Big size meteorological data processing and mobile displaying system using ...
 
[Foss4 g2014 korea] qgis를 플랫폼으로 한 파이썬기반 공간통계 구현 사례
[Foss4 g2014 korea] qgis를 플랫폼으로 한 파이썬기반 공간통계 구현 사례[Foss4 g2014 korea] qgis를 플랫폼으로 한 파이썬기반 공간통계 구현 사례
[Foss4 g2014 korea] qgis를 플랫폼으로 한 파이썬기반 공간통계 구현 사례
 
[Foss4 g2013]the architecture of mobile traffic map service final
[Foss4 g2013]the architecture of mobile traffic map service final[Foss4 g2013]the architecture of mobile traffic map service final
[Foss4 g2013]the architecture of mobile traffic map service final
 
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
 

OpenGeo Suite세미나 20111014

  • 2. OpenGeo Suite 기술 세미나 목 차 I OpenGeo Suite 설치 Ⅲ GeoServer Ⅳ GeoEXT Ⅴ Performance Tuning II PostGIS
  • 3. OpenGeo Suite 기술 세미나 Ⅰ. OpenGeo Suite 설치
  • 4. 4 Ⅰ. OpenGeo Suite 설치 제품 구성 • GeoEXT(OpenLayers+ExtJS): 웹에서 지도 콘트롤과 UI 제공 • GeoWebCache: 지도 컨텐츠를 타일단위 캐시 • GeoServer: 공간자료를 지도형태 (WMS, WFS, WCS, KML 등)로 서 비스 • PostGIS : DBMS로서 공간자료를 유지관리
  • 5. 5 Ⅰ. OpenGeo Suite 설치 다운로드 및 설치 http://opengeo.org/products/suite/register/
  • 6. 6 Ⅰ. OpenGeo Suite 설치 OpenGeo Suite 시작 Tomcat과 포트충돌 (8080) 포트수정(8088) 정상구동 시작
  • 7. 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 로그
  • 8. OpenGeo Suite 기술 세미나 Ⅱ. PostGIS
  • 9. 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
  • 10. 10 Ⅱ. PostGIS PostgreSQL Query  pgAdmin III  툴  Query tool  pgAdmin III  객체브라우저  대상 테이블(오른쪽 마우스)  스크립트  SELECT 스크립트
  • 11. 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)) Google FROM public.cities WHERE "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)) Area FROM 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#OpenGISWKBWKT http://spatialreference.org/ref/?search=korea
  • 12. 12 Ⅱ. PostGIS 공간 Query -- 사우디 MBR의 도시 조회 SELECT name, country FROM cities WHERE the_geom @ ( SELECT the_geom FROM public."WorldCountries" WHERE placename = 'Saudi Arabia' ); ------------------------------------------- "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#Operators http://postgis.refractions.net/documentation/manual-1.5/reference.html#Spatial_Relationships_Measurements http://postgis.refractions.net/documentation/manual-1.5/ST_Contains.html -- 사우디 geometry 내의 도시 조회 SELECT name, country FROM cities WHERE ST_Contains( ( SELECT the_geom FROM public."WorldCountries" WHERE placename = 'Saudi Arabia' ), the_geom ); ------------------------------------------- "Mecca";"Saudi Arabia" "Al Madinah";"Saudi Arabia" "Ar Riyad";"Saudi Arabia" "Jiddah";"Saudi Arabia"  포함되는 경우  포함 안 되는 경우
  • 13. 13 Ⅱ. PostGIS Format 변홖 -- Formatting SELECT 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.cities WHERE "name" = 'Seoul'; ----------------------------------------------------- "0101000020E610000000000020DBBB5F40000000C06BC54240";  geometry "001001000000000000000000 333273_@000000000300k305B@";  WKB "001001000000 346020000000000000000 333273_@000000000300k305B@";“  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
  • 14. 14 Ⅱ. PostGIS QGIS에서 보기  Quantum GIS  Layer  Add PostGIS Layer 수도인 도시만 필터링! http://www.qgis.org/wiki/Download
  • 15. 15 Ⅱ. PostGIS Shape으로 저장  Quantum GIS  Layers  cities (오른쪽 클릭)  Save as…
  • 16. OpenGeo Suite 기술 세미나 Ⅲ. GeoServer
  • 17. 17 GeoServer Ⅲ. GeoServer GeoServer가 하는일 WMS PNG JPEG GIF Tiff KML KMZ SVG GeoRSS PDF OpenLayers AtomPub WCS ArcGrid Text Debug Grid BMP GeoTIFF TIFF PNG JPEG WFS WMS WCS Vector Data Raster Data Feature Object Formatted Map Coverage Data 요청 영역에 해당하는 점, 선, 폴리곤 등의 도형 객 체를 제공. 어떻게 그려야 하는지는 사용자에게 맡긴다. 요청 영역에 해당하는 지도를 이미지나 심벌이 포 함된 벡터로 제공. 어디서나 동일하게 해석할 수 있는 심벌로 렌더링 요청 영역에 해당하는 레스터 GIS 자료(분류, 그리 드값 등)를 제공 이미지 형태로 제공되어도 셀의 값에 의미가 있다. WFS GML2 GML2-GZIP GML3.1 GML3.2 GeoJSON CSV  WFS Sample http://labs.metacarta.com/flickrbrowse/flickr.py/flickr?format=WFS&sort=i nterestingness- desc&service=WFS&request=GetFeatures&srs=EPSG:4326&maxfeatures =100&bbox=-180,-90,180,90  WMS Sample http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?LAYERS=Found ation.GTOPO30&VERSION=1.3.0&EXCEPTIONS=INIMAGE&SERVICE=WM S&REQUEST=GetMap&STYLES=&FORMAT=image/jpeg&SRS=EPSG:432 6&BBOX=-135,-270,135,270&WIDTH=768&HEIGHT=384  WCS Sample GeoServer Admin Page  Demo  WCS request builder
  • 18. 18 Ⅲ. GeoServer data_dir • GeoServer에서 사용할 모든 데이터는 서버의 data_dir에 있어야 한다. • 기본적으로 OpenGeo Suite 설치한 User 폴더의 .opengeo/data_dir 혹은 GeoServer설치 폴더의 data_dir • 데시보드 Preferences 텝의 Data Directory 에서 변경 가능 • GEOSERVER_DATA_DIR 홖경 변수에서도 변경 가능 • 서비스할 데이터, 심벌, 워크스페이스 구성, GWC 캐시 등이 들어간다. • 반드시 여유공간이 많은 디스크로 설정해야 한다.
  • 19. 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:UsersAdministrator.opengeodata_dirdataWorldMap 에 worldmap.zip 압축 해제 2. C:UsersAdministrator.opengeodata_dirdatabluemarble 에 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
  • 20. 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 등록
  • 21. 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 등록
  • 22. 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. 영상이 잘 보이는지 확인 위성영상 등록
  • 23. 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
  • 24. 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. 수도는 크게, 일반 도시는 작게 보이고 젂 지구영역으로 축소시 수도만 보이는지 확인 조건에 따른 심벌
  • 25. 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 선택
  • 26. OpenGeo Suite 기술 세미나 Ⅳ. GeoEXT
  • 27. 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/
  • 28. 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>
  • 29. 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 검색어 샘플
  • 30. 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&re quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form at=application/openlayers&srs=EPSG:4326&bbox=110,20,150,50 http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&re quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form at=application/openlayers&srs=EPSG:900913&bbox=12245143.9872601,22 73030.92698769,16697923.618991,6446275.84101716 http://demo.grida.kr:8088/geoserver/wms?service=WMS&version=1.1.0&re quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form at=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&re quest=GetMap&layers=WorldMap&styles=&width=660&height=330&form at=application/openlayers&srs=EPSG:32652&bbox=- 1516012.385514,2328845.36574506,1998458.72659911,5753394.63053658 WGS84 Google TM중부 UTM52N 좌표계 변홖된 범위 계산 SQL
  • 31. 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&s tyles=&width=660&height=330&format=application/openlayers&srs=EPSG:7165&bbox=-852821.081908005,1 04613.151209606,2604316.19091138,3579939.07740313
  • 32. OpenGeo Suite 기술 세미나 Ⅴ. Performance Tuning
  • 33. 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
  • 34. 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일 = 604800 7. [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
  • 35. 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]을 눌러 작업 시작 캐시 미리 만들기
  • 36. 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 큰 도형 분할
  • 37. OpenGeo Suite 기술 세미나 Q&A 감사합니다.