PostGIS 공간쿼리

PostGIS 공간쿼리

목표 : 전달된 좌표를 기반으로 가장 가까운 순으로 출력한다.

Geometry 로 변경

좌표를 Geometry 로 변경

1
select ST_SetSRID(ST_Point(126.94130, 37.37736), 4326)

문자열을 변수로 받는 경우는 double precision 으로 변경

1
ST_SetSRID(ST_Point(CAST(#{lng} as double precision), CAST(#{lat} as double precision)), 4326)

Geometry 에서 SRID 확인

1
st_srid(geom)

SRID 변경

1
2
3
4
geometry ST_Transform(geometry g1, integer srid);
geometry ST_Transform(geometry geom, text to_proj);
geometry ST_Transform(geometry geom, text from_proj, text to_proj);
geometry ST_Transform(geometry geom, text from_proj, integer to_srid);

Transform and Update table

update 구문을 사용하니, 아래 처럼 에러메시지가 나옵니다.

1
ERROR: Geometry SRID (4326) does not match column SRID (97308)

Alter table로 컬럼 타입을 변경합니다.

1
2
ALTER TABLE my_table
ALTER COLUMN geom TYPE geometry(MultiPolygon,4326) USING ST_Transform(geom,4326);

거리 구하기

1
ST_Distance(geom, ST_SetSRID(ST_Point(126.94130, 37.37736), 4326))

멀티폴리곤 중앙점 구하기

1
2
3
4
5
6
select ST_Centroid(geom) from my_table

-- 결과
"0101000020E6100000A2ED516D84BA5F4041F9855740B54240"
"0101000020E6100000E6824D190DB95F407DB540B5CAB34240"
"0101000020E61000007CB14A8739B95F40D1C60B02A0B34240"
1
2
3
4
5
6
select st_astext(ST_Centroid(geom)) from my_table

-- 결과
"POINT(126.914332704552 37.4160260585945)"
"POINT(126.891424489684 37.4046236577951)"
"POINT(126.894136259978 37.4033205564025)"
1
2
3
4
5
6
select st_x(ST_Centroid(geom)), st_y(ST_Centroid(geom)) from my_table

-- 결과
126.914332704552;37.4160260585945
126.891424489684;37.4046236577951
126.894136259978;37.4033205564025
공유하기