[PostGIS] Extent

식빵·2023년 3월 7일
0

postgis

목록 보기
7/9
post-thumbnail

그냥 순간적인 궁금증에 의해서 작성된 글입니다.
그래서 내용이 많이 부실합니다. (그래도 기록은 하고 싶어서... 😅)


1. Extent ?

GIS 관련 공부를 하다보니 Extent 라는 표현을 참 많이 보게 되는 것 같다.
Extent 는 Layer 위의 Feature 들을 감싸는 커다란 네모 박스이다.
이런 네모난 박스 형태이다 보니 Bounding Box 또는 축약하여 bbox 라고도 표현한다.


2. QGIS - Extract layer extent

만약 QGIS 를 쓰는 사람들이라면 Extent 를 구하는 연산은 QGISToolBox 에서 쉽게 찾아 볼 수 있다.


실제로 돌려보면 아래와 같은 결과를 얻을 수 있다.

  • 먼저 무수히 많은 점이 찍힌 Point Layer 하나가 있고...
  • Point LayerInput Layer 로 지정하여 Extract layer extent 실행하면!
  • 보다시피 무수히 많은 점들을 에워쌓는 박스, 즉 Extent 가 생성되는 것을 볼 수 있다.




3. PostGIS - ST_(Estimated)Extent

그런데 문득 궁금증이 생겼다.
"그렇다면 PostGIS 에서는 어떤 연산을 쓰면 같은 결과를 얻을 수 있을까?"
이때는 PostGIS 의 ST_Extent, ST_EstimatedExtent 를 사용하면 된다.

💬 ST_Extent

SELECT ST_Extent(geom) as table_extent , pg_typeof(ST_Extent(geom))
FROM random_point_layer


-- 출력 결과:
-- |table_extent                                                                  |pg_typeof|
-- |------------------------------------------------------------------------------+---------+
-- |BOX(891376.8641672928 1617779.2940249005,1193824.6166129643 2047796.761182609)|box2d    |


-- 만약에 Polygon Geometry 타입으로 사용하고 싶다면 st_setsrid 연산자 사용
select st_setSrid(st_extent(geom), 5179) as geom_extent 
from random_point_layer a




💬 ST_EstimatedExtent

그런데 ST_Extent 는 조금 연산시간이 느린 편이라고들 한다.
그래서 정말 정확하게 Extent 를 뽑아내야 될 필요가 없다면 ST_EstimatedExtent
를 사용할 것을 권장하고 있다. (참고: https://postgis.net/docs/ST_EstimatedExtent.html )

select 
	st_setSrid(st_estimatedExtent(
                    'public',  -- 스키마
                    'random_point_layer',  -- 테이블 명
                    'geom') -- geometry 컬럼명
               , 5179) as geom_estimated_extent;



참고 링크

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글