공간 쿼리는 보통 벡터 데이터( 점, 라인, 폴리곤 )에 대한 관계를 쿼리를 통해 원하는 벡터 데이터를 여러 포맷으로 가져올 수 있다.
보통 WKT, GeoJSON이 대표적이다.
아래 링크를 통해 더 자세한 정보를 얻을 수 있다.
PostGIS — Spatial and Geographic Objects for PostgreSQL
postgis.net
이 포스팅에서는 직접 실무에서 작업하면서 정리한 내용을 작성하려고 한다.
geometry type이 point였고 전체 포인터들에 대한 envelope를 구하고 싶었다.
여기서 envelope는 boundary box로도 불리고, min, max 좌표로도 불리는 것 같다.
java에서는 각각의 point들을 geometryCollection 객체에 넣은 뒤 min, max를 구할 수도 있었고, 아니면 geoserver wms 레이어로 되어 있다면 wms info를 rest api로도 envelope를 쉽게 구할 수도 있었다.
하지만 postgis에서 제공하는 공간 쿼리(spatial query)를 통해서도 구해야 할 경우가 생겨서 작업이 끝난 후 이렇게 글로 정리해보려고 한다.
기본적인 postgresql 설치나 설정에 대해서는 생략하고 기회가 되면 설치와 설정에 대한 글도 따로 올리겠다.
먼저 geometry 칼럼을 생성하려면 postgis extension을 생성해야 한다.
create extension postgis;
그러면 public 스키마에 좌표계에 대한 테이블이 생성되는 것을 확인할 수 있다.
그러고 나서 전체 포인터들에 대한 envelope를 구하려면 먼저 point를 합쳐주는 쿼리를 날려보겠다.
SELECT st_union(geometry column) FROM TABLENAME; //합쳐진 결과를 볼 수 있을 것이다.
//그럼 여기서 이제 원하는 envelope를 구하기 위해선 아래와 같이 쿼리를 짜면 된다.
SELECT st_envelope(st_union(geometry column)) FROM TABLENAME;
//쿼리 결과는 아래와 같을 것이다.
ex) POLYGON((0 0,0 3,3 0,3 3,0 0))
//geojson 포맷으로 데이터를 가져오고 싶다면 아래와 같다.
SELECT st_asgeojson(st_envelope(st_union(geometry column))) FROM TABLENAME;
자세한 사항은 아래 링크에 있는 documentation을 잘 참조하면 되겠다.
https://postgis.net/docs/reference.html
Chapter 5. PostGIS Reference
Abstract This section lists custom PostGIS Grand Unified Custom Variables (GUC). These can be set globally, by database, by session or by transaction. Best set at global or database level.
postgis.net
'database > Postgresql' 카테고리의 다른 글
우분투 postgis database 설치하기 (0) | 2021.06.06 |
---|---|
shp2pgsql dimension 옵션과 geotools로 dimension 확인 (0) | 2021.05.25 |
pgsql2shp 을 활용해서 table을 shp파일 만들기 예제 (0) | 2021.04.20 |
shp2pgsql을 활용하여 Shapefile to postgis로 바꿔보자 (0) | 2021.04.14 |