본문 바로가기
Database/PostgreSQL

[PostgreSQL] Geometry 객체 버퍼 생성 - ST_BUFFER

by 가가가가가가 2023. 11. 28.
반응형

● ST_BUFFER

    - Geometry 객체로부터 일정 거리 안에 있는 모든 점을 표현하는 Geometry 객체를 반환하는 함수

 

● 문법

    - ST_BUFFER ( [geom] , [expr] )

    - geom : Gemetry 객체를 나타내는 Geometry Type이어야 함

    - expr : Geometry 객체로부터의 거리

 

● 예제

 

WITH AREAS AS (
    SELECT ST_GeomFromText('MULTIPOLYGON(((128.67067043873192 35.217899196980156, 128.67327152937486 35.216835351171625, 128.6727802922496 35.21595015471472, 128.66997510469125 35.21733889427319, 128.67067043873192 35.217899196980156)))') AS GEOM
)
SELECT 
    GEOM, 
    ST_BUFFER(GEOM, 0.0001) AS BUFFERED   
FROM AREAS;

원본|버퍼|원본 + 버퍼

 

● 주의사항

    - 일부 좌표계의 경우 거리 파라미터(두 번째 파라미터)를 m로 단위로 사용하기 위해서는  3857로 좌표계를 변환이 필요

    - 경도, 위도 사용하는 좌표계(4326)는 경도, 위도 간의 각도(decimal degrees) 단위로 측정되어짐

    - 따라서 미터 또는 피트와 같은 선형 단위를 사용할 때는 변환이 필요

    - Web Mercator 좌표계(3857) : 구글 지도, OpenStreetMap, Bing Maps 등 웹 지도 서비스에서 널리 사용 중

 

// 4326, 3857 좌표계로 거리 10 버퍼 설정
WITH AREAS AS (
    SELECT ST_SETSRID(ST_GEOMFROMTEXT('MULTIPOLYGON(((128.6724370090045 35.21866751610794, 128.67005100235343 35.216374002702985, 128.67178979206858 35.21549864479667, 128.67393158182614 35.217996117138, 128.6724370090045 35.21866751610794)))'), 4326) AS GEOM
)
SELECT 
    GEOM, 
    ST_BUFFER(GEOM, 10) AS B4326, 
    ST_BUFFER(ST_TRANSFORM(ST_SETSRID(GEOM, 4326), 3857), 10) AS B3857  
FROM AREAS;

원본|4326 버퍼|3857 버퍼

 

● 상세설정

    - quad_segs, endcap, join, mitre, side를 통해 버퍼 라인에 대한 상세표현이 가능

    - https://postgis.net/docs/ST_Buffer.html 참고

 

반응형

댓글