빅데이터

postgis의 geometry와 geography

도그사운드 2023. 9. 27. 16:32

geography는 곡면을 고려하여 연산, x/y 위경도를 가지고 거리를 계산할때 라디언값에 대해 arcsin, cos이 포함된 계산을 수행하고 지구 반지름에 곱해주는 것과 유사하다. 시간이 오래걸리고 부하가 높다. 연산의 결과물도 degree 값이다.

geometry는 카테시안 평면에 투영한 상태에서 계산하기에 속도가 빠르나 장거리일 경우 정확도가 떨어진다.

 

각 관제구역에 대해서 선박들의 속도를 계산하고 관제구역 외곽에 대해서도 속도를 측정하기로 하였다.

 

외곽은 st_centroid('srid=4326;multipolygon(((126.123232 38.345434, 126.2233333....)))'::geometry) 형태로 중심점을 확인 후 경계선과의 st_maxdistance를 구하여 확인해보니 대략 12해리를 잡아주는 것이 적당하다고 판단되었다.

 

각 관제 구역별로 적당한 거리는

with x1 as(

select gid, st_transform(st_centroid(geom)::geometry, 5179) poi from ghgj_area where gubun_nm is null),

x2 as(

select gid, st_transform(geom:geometry, 5179) pol from ghgj_area where gubun_nm is not null),

x2 as (select a.gid, st_maxdistance(poi, pol) dist from x1 a join x2 b on a.gid=b.gid)

select avg(dist) from x3

방식으로 구했다.

 

결과로 12해리의 버퍼를 생성했다.

st_buffer(geom::geography, 22224)

 

이후에 각 관제구역을 st_union으로 공간을 합산하고 st_difference로 차리르 구성한다.