그냥 순간적인 궁금증에 의해서 작성된 글입니다.
그래서 내용이 많이 부실합니다. (그래도 기록은 하고 싶어서... 😅)
GIS 관련 공부를 하다보니 Extent 라는 표현을 참 많이 보게 되는 것 같다.
Extent 는 Layer 위의 Feature 들을 감싸는 커다란 네모 박스이다.
이런 네모난 박스 형태이다 보니 Bounding Box
또는 축약하여 bbox
라고도 표현한다.
만약 QGIS 를 쓰는 사람들이라면 Extent
를 구하는 연산은 QGIS
의 ToolBox
에서 쉽게 찾아 볼 수 있다.
실제로 돌려보면 아래와 같은 결과를 얻을 수 있다.
Point Layer
를 Input Layer
로 지정하여 Extract layer extent
실행하면!Extent
가 생성되는 것을 볼 수 있다.그런데 문득 궁금증이 생겼다.
"그렇다면 PostGIS
에서는 어떤 연산을 쓰면 같은 결과를 얻을 수 있을까?"
이때는 PostGIS 의 ST_Extent
, ST_EstimatedExtent
를 사용하면 된다.
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_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;