본문 바로가기
공간정보/한줄 팁(Tip)

한줄 팁 - PostGIS 교차 중복된 면적 구하기

by 요긴소프트 2022. 2. 16.
728x90
반응형

PostGIS에 저장된 폴리곤 레이어가 있다고 가정하고, 이 레이어의 feature들 중 내가 설정한 영역과 중복되는 폴리곤들의 면적을 구하는 한줄 쿼리 입니다.

select pnu, ST_Area(
    st_intersection(
        geom,
        st_transform(
            st_setsrid(st_geomfromtext('POLYGON ((127.00143 37.49791, 127.00635 37.49791, 127.00635 37.50109, 127.00143 37.50109, 127.00143 37.49791))'), 4326),
            3857)))as area
from lp_pa_cbnd
where st_intersects(geom,
    st_transform(
        st_setsrid(st_geomfromtext('POLYGON ((127.00143 37.49791, 127.00635 37.49791, 127.00635 37.50109, 127.00143 37.50109, 127.00143 37.49791))'), 4326),
        3857))

면적을 구하는 함수는 ST_Area이고, st_intersection으로 중복되는 영역의 폴리곤을 구합니다.

사용자가 입력하는 도형은 WKT(Well Known Text) 형태로 입력할 때는 st_geomfromtext 함수를 이용하고, 만약 입력 형태가 GeoJson이라면 st_geomfromtext 대신에 st_geomfromgeojson 함수를 사용하면 됩니다.

st_setsrid와 st_transform을 이용해 레이어에 저장된 geometry의 좌표계와 사용자 입력 좌표계를 동일하게 한 후에 insersection 면적을 구할 수 있습니다. 

where 절의 st_intersects는 리턴값이 true 또는 false의 boolean 값으로 교차하는 피처 레코드만 선택하기 위해 사용했습니다.

 

728x90
반응형