GIS

[geoserver] DB연결부터 layer 만들기까지

journey-dev 2023. 5. 20. 17:30

1. 작업공간

: 레이어, 스타일을 저장할 폴더

 

2. 저장소 생성

: 연결할 db 정보 입력

: 이 곳을 통해 이미지의 feature를 알 수 있다.

: user, password - DB의 비번을 적어주는 것임. (pgAdmin 접속시 비번이 아니라)

 

3. 레이어 생성

Layer란 : feature정보(공간정보)를 나타내는 정보다. 

 

✔️3-1) 새로운 SQL뷰 설정하기

나의 경우는 db에 geometry 데이터가 직접 담겨있는게 아니라, 프론트에서 그 데이터로 geom데이터를 만들어서 써야하기 떄문에 직접 db를 조회하는 sql문을 써야한다. 

이 방식으로 하면 db 뷰에서 쿼리를 복잡하게 짜지 않아도 되고, 쿼리에 매개변수를 받을 수 있다.

 

새로운 sql뷰 만들기 클릭

✔️3-2) sql 문 작성

좌표계 설정 > SQL문 작성 > 레이어 영역 계산

 

4. 스타일

✔️ 4-1) 스타일 코드 작성

 

✔️4-2) 적용할 레이어 선택

 


<세부설명>

1. 공간 좌표 체계(Coordinate Reference Systems)

  • 좌표계 : 지리적 객체를 위치시키기위해 사용되는 좌표 체계
  • 공간 참조 시스템(SRS)
  • 좌표 참조 시스템(CRS) : 공간 데이터가 지구 표면에 실제 위치와 관련되는 방법을 정의

레이어의 좌표계

  • 원본 데이터 좌표체계 (Native SRS)
  • 정의한 좌표체계(Declared SRS) : 클라이언트에 특정해 준 좌표
  • 좌표체계 처리 방식 : native srs와 declared srs가 다를때 어떤 걸 따를지 결정하는 방식 
    • 강제 선언 : 일반적으로 사용
    • 네이티브에서 재투영 : 소스 데이터가 EPSG 코드와 일치하지 않는 경우만 사용
    • 기본설정 유지 : 드물게 사용됨. 

 

2. Bounding Boxes   

위에서 지정한 srs handling 방식에  따라 데이터 범위 계산

3. Layer - SQL 뷰 편집

✔️ 3-1) SQL문 작성

 

✔️ 3-2) SRID 설정
: 공간 쿼리가 제대로 작동하려면 올바른 SRID(공간참조 ID)가 있어야 한다.

: SRID는 srs의 EPSG 코드와 동일하지만, 아닐 때도 있어서 제대로 잘 작성해줘야 한다.

: GeoServer는 지오메트리 컬럼 타입으로 기본 SRID를 결정하려고 하지만 필요한 경우 이를 확인하고 수정해야 한다.

 

✔️ 3-3) SQL 파라미터

- viewparams를 사용하여 필요한 파라미터를 wms에서 geoserver로 동적으로 보내줄 수 있다.

- 파라미터가 입력되지 않은 경우가 있을 수 있어 defaul값을 지정해줘야 오류나지 않는다.

 

[wms(vl) 에서 파라미터 보내는 형태]

파라미터가 여러개 일때 - viewparams: k1:v1; k2:v2; k3:v3;

값에 세미콜론이나 쉼표가 포함된 경우 백슬래시(\)로 이스케이프해야 함 -  viewparams: k1:1\,2\,3\,4\,5;  k2:v2; k3:v3;

 

 

[예제1]

low ~ high 사이의 persons만 조회. low,high가 파라미터이고 vl-source-wms의 vieparams에서 파라미터 값을 입력해준다.

// SQL문
SELECT * FROM pgstates 
WHERE persons BETWEEN %low% and %high%

// 프론트
    <vl-layer-tile>
        <vl-source-wms
          url="http://localhost:5432" 
          layers='store_name:layer_name'
          :extParams="{
            version: '1.3.0',
            format: 'image/png',
            layers: 'store_name:layer_name',
            viewparams: `low:0;high:99` // !! 파라미터 값 주입
          }"
        >
        </vl-source-wms>
  </vl-layer-tile>

파라미터 기본값 지정

[예제2]

// SQL문
SELECT * FROM pgstates WHERE product_id in (%buy_id%)

// 프론트
    <vl-layer-tile>
        <vl-source-wms
          url="http://localhost:5432" 
          layers='store_name:layer_name'
          :extParams="{
            version: '1.3.0',
            format: 'image/png',
            layers: 'store_name:layer_name',
            viewparams: 'buy_id: 1\\,2\\,3\\,4\\,5' // !! 파라미터 값 주입
          }"
        >
        </vl-source-wms>
  </vl-layer-tile>

 

4. 스타일 작성법

별도 포스팅


참고자료 

https://docs.geoserver.org/2.23.x/en/user/data/webadmin/layers.html

https://docs.geoserver.org/2.23.x/en/user/data/database/sqlview.html