[PostgreSQL] PostGIS: 기본 사용법
이전 포스트
https://blog.naver.com/sssang97/223382727295
비교적 간단한 사용례를 몇개 들면서 대략적인 사용법에 대해서 정리해보겠다.
전체 명령어 세트는 아래 문서에서 확인할 수 있다.
https://postgis.net/docs/reference.html
다각형 면적 구하기: ST_AREA
ST_AREA는 전달받은 다각형에 대해서 그 면적을 계산해주는 함수다. Polygon 형태 데이터에 대해서만 동작한다. 그 외의 데이터 포맷에 대해서는 0을 반환한다.

WITH temp AS (
SELECT
ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))') as foo
)
SELECT ST_AREA(foo)
FROM temp;
이 경우에는 각 변의 길이가 4인 정사각형이므로, 16이 나오는게 맞다.
기대한대로 잘 계산된다.
도형 간 거리 구하기: ST_DISTANCE
ST_DISTANCE는 파라미터로 도형 2개를 받고, 그 거리를 계산해주는 간단한 기능만을 갖고 있다.
이런 느낌이다.

SELECT ST_Distance(
'SRID=4326;POINT(-72.1235 42.3521)'::geometry,
'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'::geometry );교집합: ST_INTERSECTION
ST_INTERSECTION는 이름처럼 교집합을 계산하는 함수다.
2개의 도형이 겹치는지 아닌지, 겹친다면 얼마나 겹치는지를 알 수 있다.
먼저 겹치지 않는 경우부터 재현해보겠다.
빨간색 점의 다각형과 초록색 점의 다각형은 현재 완전히 괴리되는 좌표에 존재한다. 어떻게 봐도 서로 겹치지 않음을 볼 수 있다.
이걸 ST_Intersection으로 넘겨보면

WITH temp AS (
SELECT
ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))') as foo,
ST_GeomFromText('POLYGON((-3 -4,-5 -1,-2 -6,-4 -4, -3 -4))') as bar
)
SELECT ST_AsText(ST_Intersection(foo, bar))
FROM temp;
비어있는 폴리곤이 반환된다. 겹치지 않는다는 뜻이다.
이번에는 겹치는 경우를 고려해보자,
이렇게 그려보고, 좌표로 변환해서 넣어봤다.

WITH temp AS (
SELECT
ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))') as foo,
ST_GeomFromText('POLYGON((2 2,0 3,-2 2,-1 1,2 2))') as bar
)
SELECT ST_AsText(ST_Intersection(foo, bar))
FROM temp;
그럼 이제 유효한 폴리곤이 반환된다.
반환되는 폴리곤은 겹치는 영역만큼을 자른 것이다. 그래서 저기서는 삼각형을 반환했다.
대충 이런느낌으로 사용하면 된다.
좌표나 위상 관련된 기능들은 어지간해서 다 있다. 잘 찾아서 갖다쓰면 된다.
참조
https://foss4g.tistory.com/1255?category=601228
https://foss4g.tistory.com/1256?category=601228
https://postgis.net/docs/manual-3.0/postgis-ko_KR.html#RefObject
https://postgis.net/workshops/postgis-intro/geometries.html
https://www.desmos.com/calculator?lang=ko