개요

geoserver에 레이어그룹 설정 방법에 대하여 설명하려 한다.

브라우저에서 레이어를 호출 할 때 다수의 레이어를 호출하면 속도 저하의 원인이 된다. 이를 해결하기위해 레이어를 그룹화 하여

한번의 호출로 레이어를 그룹화된 레이어를 호출한다. (단 개별 레이어 온/오프 에 있어 문제가 생길 수 있다.)


레이어 생성과 스타일 적용에 대한 내용은 이전에 게시한 지오서버 서비스 설정을 참고하면 된다. https://progworks.tistory.com/6?category=810021

용도지역에 대한 데이터는 국가공간정보포털 오픈마켓을 이용하였다. http://data.nsdi.go.kr/dataset


레이어 그룹 설정

지오서버 사이드 메뉴 데이터 > 레이어 그룹을 선택하고 '새로운 레이어 그룹 생성하기' 버튼을 클릭한다.


레이어 그룹 생성하기 화면에서 '레이어 추가하기' 버튼을 선택하여 추가할 레이어를 선택한다.


레이어를 추가 하고, 작업공간 지정 및 '데이터 최소경계 영역 계산하기' 버튼을 눌러 바운더리를 생성한후 저장한다.

* 레이어 그룹화 하려는 레이어의 좌표계는 동일하게 설정하고 그리기 순서를 조정한다.


저장한 그룹레이어를 확인해 보자




개요

지오서버를 설치하고 SHP파일을 이용하여 서비스를 발행하는 방법을 설명


1. 지오서버 설치

공식 지오서버설치 사용자 메뉴얼 

설치 후 GeoServer 메인화면

기본 아이디 비밀번호는  admin/geoserver 이다.


2. 작업공간 추가

레이어를 발행 하거나 등록하려면 작업공간을 추가해야 한다.
왼쪽 사이드 메뉴 데이터 > 작업공간  버튼을 클릭하면 작업공간을 생성하는 페이지가 나온다.

작업공간 페이지


새로운 작업공간 제출


3. 저장소 생성

작업공간을 추가한 뒤에 저장소를 생성한다.

저장소 생성


새로운 데이터 저장소

"벡터 데이터 저장소", "레스터 데이터 저장소", "기타 데이터 저장소" 3가지의 저장소가 존재 하는데 기본적으로 shp파일을 저장할 저장소를 생성 하겠다.

* oracle 데이터베이스를 사용한다면 이곳을 참고하기 바란다.

https://docs.geoserver.org/latest/en/user/data/database/oracle.html


새로운 벡터 데이터 저장소 추가


저장소를 생성하면 새로운 레이어 화면이 나오는데 여기서 발행하기 버튼을 선택하여 발행 할 수도 있으나 레이어 메뉴에서 레이어를 발행해보겠다.


4. 레이어 발행



새로운 레이어 추가하기 버튼을 선택하면 저장소를 선택하는 셀렉트 박스가 나오고 위에서 만든 progworks:tl_emd 를 선택한다.

우후 새로운 레이어 메뉴로 이동하며, 리스트에 해당 데이터의 발행하기 버튼을 선택한다.


발행하기 버튼을 선택하면 레이어 편집 메뉴로 이동한다.

여기서 제일 중요한 부분은 아래 쪽 공간 좌표 체계, 레이어 최소경계 영역 부분이다.

원본 데이터 좌표체계는 위에서 올린 shp 파일 디렉토리에 같은 이름의 prj 파일이 존재하면 해당 좌표계를 자동 선택해준다.

레이어 최소 경계영역에 '데이터로부터 계산하기' 와 '원본 영역으로부터 계산하기' 버튼을 선택하여 최소경계 영역을 설정해준다.


저장이 완료되면 데이터 > 레이어 미리보기 버튼을 클릭하여 이동 후 발행한 레이어에 Openlayers 버튼을 선택하여 레이어를 확인 할 수 있다.

5. 스타일 등록


이름과 작업공간을 지정하고, "기본 스타일을 생성합니다." 영역에 있는 생성하기 ...  버튼을 클릭하여 기본 스타일을 불러온다.

아래의 주소에서 폴리곤 스타일에 대한 사용자 메뉴얼을 참고하였다.

https://docs.geoserver.org/stable/en/user/styling/sld/cookbook/polygons.html


메뉴얼 내용중 Polygon with styled label 타이틀의 SLD 내용을 카피하여 저장했다.

<FeatureTypeStyle>
     <Rule>
       <PolygonSymbolizer>
         <Fill>
           <CssParameter name="fill">#40FF40</CssParameter>
         </Fill>
         <Stroke>
           <CssParameter name="stroke">#FFFFFF</CssParameter>
           <CssParameter name="stroke-width">2</CssParameter>
         </Stroke>
       </PolygonSymbolizer>
       <TextSymbolizer>
         <Label>
           <ogc:PropertyName>name</ogc:PropertyName>
         </Label>
         <Font>
           <CssParameter name="font-family">Arial</CssParameter>
           <CssParameter name="font-size">11</CssParameter>
           <CssParameter name="font-style">normal</CssParameter>
           <CssParameter name="font-weight">bold</CssParameter>
         </Font>
         <LabelPlacement>
           <PointPlacement>
             <AnchorPoint>
               <AnchorPointX>0.5</AnchorPointX>
               <AnchorPointY>0.5</AnchorPointY>
             </AnchorPoint>
           </PointPlacement>
         </LabelPlacement>
         <Fill>
           <CssParameter name="fill">#000000</CssParameter>
         </Fill>
         <VendorOption name="autoWrap">60</VendorOption>
         <VendorOption name="maxDisplacement">150</VendorOption>
       </TextSymbolizer>
     </Rule>
   </FeatureTypeStyle>



레이어 메뉴에서 레이어 편집


지오서버에서 제공하는 기본 polygon 스타일을 변경 시켰다.



단순화 작업 (벡터 > 도형도구 > 단순화)

geoserver에 읍면동 데이터(shp)를 등록하여 WFS서비스를 사용했다. 해당 데이터의 용량은 55MB로 전국레벨에서 벡터(WFS)서비스를 사용하기에 무리가 있어 QGIS를 사용하여 단순화 작업에 들어갔다.
 

 

단순화 작업이 끝난 후에 레이어의 단순화 모양이 예상과 다르게 나왔다.

다시한번 허용범위를 1m 지정하고 단순화 작업을 실행했지만 결과는 동일하게 나타났다.
이유는 투영좌표계에 따라서 QGIS가 사용하는 단위가 다르기 때문이다.
현재 읍면동데이터의 좌표계는 WGS84 EPSG:4326을 사용하고 있다.
(Proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0)

 

QGIS는 계산시 CRS의 단위를 사용하는데 EPSG:4326와 같은 지리좌표체계(CRS)는 단위로 degrees를 사용한다. 계산을 위해서 meters, feet 단위를 가지는 투영좌표계를 사용해야한다.

 

데이터의 좌표계를 meters 단위를 사용하는 EPSG:5174로 변경하여 다시한번 단순화 작업을 실행하였다.
(Proj4: +proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs)

버텍스 개수가 줄어 들고 단순화작업이 정상적으로 이루어졌다.

 

개요

PaaS를 구현하는 클라우드 서비스로써 파스타 (CloudFoundry 계열) 플랫폼에서 제공하는 경량 컨테이너에서 동작하는 OGC WMS(Web Map Service)의 GetMap 인터페이스를 Sping Web 과 Java Graphics2D를 이용하여 구현한 후,
이를 클러스터링하여 OpenLayers에 통합하여 서비스 UI를 구현함

 

 

목적

클라우드서비스(PaaS)가 제공하는 컨테이너 환경에서 GIS응용어플리케이션이 만족할만한 성능을 제공하는지 확인함

 

환경구성

1. Server : Linux Container, 가상서버 위에 설치되는 DBMS
2. DBMS : Postgre + PostGIS
3. WAS(Web Application Server) : Apache Tomcat

 

개발환경 및 배포

1. 이클립스에서 일반 웹앱을 제작하는 방법을 준수하고,
   배포서버를 이클립스에 등록된 서버 중 CloudFoundry를 지정하고 연결계정을 등록하여 해당 서버로 배포함
2. 최초 제작된 웹 앱(WMS)을 복사하여 어플리케이션 명칭을 변경하여, 필요한 갯수만큼 클라우드(CloudFoundry)에 배포
   ( 웹 어플리케이션의 수평적 확장 적용)

구현

1. 다양한 데이터프로바이더 수용을 위해 성능제약이 존재하는 지오서버 등의 Pakage SW 사용을 배제하고
2. DBMS가 반환하는 결과목록을 일반적으로 적용되는 GIS 자료구조( WKB, WKT)로 변환하지않고, 직접 자바 도형(java.awt.Shape) 으로 변환
  (지오서버가 제공하는 WMS 대비 2배 이상의 성능 향상 확인)

구현결과

1. 연속지적도(전국 SHP 파일 용량 기준 약 30GB)를 기준으로 8개의 웹 앱으로 클러스터링 했을 경우,
   맵 타일 제작 과정 없이도 동적 지도서비스가 가능함을 확인
2. 수평확장되는 웹 앱(WMS)의 갯수만큼 성능 향상 확인 (저비용 서버 확장)
3. DBMS(1) + 컨테이너(8)의 구성만으로도 동시 접속자 100명 이상 수용가능함을 확인

 

성능향상을 위한 개선 사항

1. 인프라 레벨에서 물리 또는 가상으로 이용될 수 있는 가속장치가 있을 경우,
   렌더링시켜야하는 도면데이터 조회 후 이미지 렌더링 속도 약 20% 향상 가능
2. 데이터 프로바이더(DBMS) 계층의 수직적 확장 (가상 코어 증설) 및
   수평확장 (가상 서버 증설) 을 통해 동시에 수용할 수 있는 사용자 증가

 

적용 및 응용 분야

1. 실시간 변경되는 공간정보의 실시간 서비스 발행
2. 저비용으로 고성능 GIS 응용 서비스 제공

 

결론

1. 가상서버, 경량 컨테이너를 제공하는 물리서버의 성능 향상으로 클라우드컴퓨팅 환경에서 GIS 서비스가 충분한 성능을 제공함을 확인
2. 경우에 따라 흔히 GIS엔진이라고 하는 패키지SW 사용을 배제하고, 공간DBMS를 이용하는 코드의 최적화만으로 충분한 성능을 제공함을 확임

국가공간정보포털 오픈마켓에서는 다양한 종류의 공간정보 관련 공공데이터를 제공한다. 

또한 국가공간정보포털에서 제공하는 데이터의 파일 포맷은 여러가지가 있지만 대부분의 데이터가 shp 포맷으로 제공된다.

QGIS를 이용하여 SHP 포맷의 데이터를 DXF 포맷으로 변환하는 방법에 대하여 알아보자.

 

1. 먼저 QGIS에서 SHP 포맷의 데이터를 오픈한다.

 QGIS : ver2.18.22

 활용 데이터 : 건물통합정보마스터_대구 (활용 데이터 출처 : 국가공간정보포털 오픈마켓)

 활용 데이터 좌표계 : Bessel/중부(200,000/500,000) EPSG : 5174

 

2. Layers Panel에서 DXF로 변환이 필요한 데이터 오른쪽 클릭

 

 - 데이터 오른쪽 클릭 후, 다른이름으로 저장 버튼 클릭

 

3. 새 이름으로 벡터 레이어 저장하기

 다른이름으로 저장 클릭 시, 새 이름으로 벡터 레이어 저장하기 화면이 나타난다.

- 형식 : 저장 파일 포맷을 선택하는 부분

 - File name : 파일의 이름 

 - 탐색(File name) : 저장 위치

 - 좌표계 : 파일의 좌표계 선택

 

4.  결과 

국가공간정보 포털에서  "연속지적도_서울_영등포구" 자료를 받아 Postgresql에 저장 하여 사용 하던 도중 배경지도와 이격이 발생하는 부분을 발견 하였다.

해당 좌표계는 Bessel  EPSG:5174 이다.

Postgresql 에서 해당 좌표계를 조회해 보자.

SELECT * FROM SPATIAL_REF_SYS WHERE SRID = 5174;

srtext 컬럼값은

"PROJCS["Korean 1985 / Modified Central Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6162"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01 (...)"

proj4text 컬럼값은

"+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs "

 

http://epsg.io/ 에서 확인해 보면 해당 좌표계에 문제는 없어 보였다. 

이격이 발생한 이유는 이곳에서 찾을 수 있었다.

http://www.ngii.go.kr/kor/board/view.do?rbsIdx=44&key=%EC%A2%8C%ED%91%9C%EB%B3%80%ED%99%98&keyField=search1&idx=63

평행이동량(m) 회전량() 축척변화(ppm)
Δx Δy Δz Rx Ry Rz λ
-115.80 +474.99 +674.11 -1.16 +2.31 +1.63 +6.43
 

+towgs84(타원체 변환 계수) 값을 추가하여 해당 좌표계를 추가 해야 한다. 

국내 좌표계 towgs84 파라미터 값 계산에 대한 정보는 이곳을 참조하면 된다.https://groups.google.com/forum/#!topic/osgeo-kr/0oMKjzyLPW4

 

타워체 변환 계수 값을 추가 하여 좌표계를 새로 생성해 보자.우선 사용할 srid 값과 srtext, proj4text 값을 살펴보면

+towgs84  추가 srtext

"PROJCS["Korean 1985 / Modified Central Belt",GEOGCS["Korean 1985",DATUM["Korean_Datum_1985",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43],AUTHORITY["EPSG","6162"]],PRIMEM["Gree (...)"

+tpwgs84 추가 proj4text 

"+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43"
 
 
타원체 변환 계수 값을 추가한 좌표계 생성

 

좌표계를 생성 하고 해당 좌표계에 대하여 geometry 정보도 업데이트 시켜야 한다.

"SELECT UpdateGeometrySRID('table_name', 'geometry column', 900916)"

 

이후 새로 생성한 EPSG:900916 사용, 배경지도와 이격이 사라짐을 확인 하였다.

 

 

#1 환영합니다 !!

공간정보 활용을 위한 정보를 공유합니다. 무료 개방되고 있는 공간정보와 PostGIS, QGIS 등 공개SW를 잘 이용하려는 목적으로 운영되는 모임입니다.

 

 

 

+ Recent posts