개발공작소
article thumbnail
728x90

 

 

이번에 프로젝트를 하면서 GeometryCollection을 처음 사용해보았다. 사용하게 된 계기는 단순 했는데

여러 타입의 geometry타입을 하나의 row에서 관리할 수 있다는 점이었다.

그렇게 개발을 하고, 막상 geoserver에 레이어로 발행해서 wms로 호출을 해보니 문제가 발생했다.

 

바로 wms이미지가 제대로 생성이 되지 않는 것... 

결론은 Geoserver에서는 GeometryCollection을 지원하기는 하지만 완전히 지원하지는 않는다는 것이다. 

Geoserver는 하나의 레이어에는 하나의 geometry타입만을 지원한다.

 

아래는 샘플코드 및 결과이다.

 

 

GeometryCollection타입의 샘플 테이블 CREATE

CREATE TABLE ud.geo_col_sample (
	geom geometry(GEOMETRYCOLLECTION, 4326) NULL
);

 

GeometryCollection타입의 샘플 geometry추가

insert into ud.geo_col_sample values (st_setsrid(ST_GEOMFROMGEOJSON('{
  "type": "GeometryCollection",
  "geometries": [
    {
      "type": "Point",
      "coordinates": [126.9784, 37.5665]
    },
    {
      "type": "LineString",
      "coordinates": [
        [126.9784, 37.5665],
        [127.0018, 37.5609],
        [127.0377, 37.5665]
      ]
    },
    {
      "type": "Polygon",
      "coordinates": [
        [
          [127.0498, 37.5809],
          [127.0498, 37.5609],
          [127.0801, 37.5609],
          [127.0801, 37.5809],
          [127.0498, 37.5809]
        ]
      ]
    }
  ]
}'),4326));

 

 

SELECT한 결과값

 

 

PostGIS를 통해 SELECT를 하면 위와 같이 깔끔하게, Polygon, LineString, Point가 같이 나오는 것을 확인할 수 있다.

이는 PostGIS가 GeometryCollection타입을 지원하기 때문..

 

근데 이걸 만약 Geoserver에서 레이어로 발행하여 확인해보면???

 

 

 

위와 같은 결과값이 나온다. Point는 사라져 있고, LineString 또한 Polygon형태로 변경되어 있다..

 

Geoserver는 여러가지 타입의 geometry타입이 있으면 하나의 geometry타입만 표출하게 된다.

즉, 나머지는 생략되거나, 타입이 변경되어 표출 하는 것...

 

PostGIS에서는 제대로 나오길래 당연히 될 줄 알고 개발을 했었는데, 뒷통수 맞은 느낌이었다.

결국 MultiPolygon으로 geometry타입을 변경하고, Point나 LineString은 전부 프론트단에서

MultiPolygon으로 파싱한후에 처리하도록 수정해줬다..

 

여기서 배운점은 가능하면 하나의 row에는 하나의 geometry타입을 사용하는게 맞다는 것이다.

같이 개발하는 차장님께서도 그게 정도 라고 하심...

 

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!