PostGIS 공간쿼리
목표 : 전달된 좌표를 기반으로 가장 가까운 순으로 출력한다.
Geometry 로 변경
좌표를 Geometry 로 변경
select ST_SetSRID(ST_Point(126.94130, 37.37736), 4326)
문자열을 변수로 받는 경우는 double precision 으로 변경
ST_SetSRID(ST_Point(CAST(#{lng} as double precision), CAST(#{lat} as double precision)), 4326)
Geometry 에서 SRID 확인
st_srid(geom)
SRID 변경
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 구문을 사용하니, 아래 처럼 에러메시지가 나옵니다.
ERROR: Geometry SRID (4326) does not match column SRID (97308)
Alter table
로 컬럼 타입을 변경합니다.
ALTER TABLE my_table
ALTER COLUMN geom TYPE geometry(MultiPolygon,4326) USING ST_Transform(geom,4326);
거리 구하기
ST_Distance(geom, ST_SetSRID(ST_Point(126.94130, 37.37736), 4326))
멀티폴리곤 중앙점 구하기
select ST_Centroid(geom) from my_table
-- 결과
"0101000020E6100000A2ED516D84BA5F4041F9855740B54240"
"0101000020E6100000E6824D190DB95F407DB540B5CAB34240"
"0101000020E61000007CB14A8739B95F40D1C60B02A0B34240"
select st_astext(ST_Centroid(geom)) from my_table
-- 결과
"POINT(126.914332704552 37.4160260585945)"
"POINT(126.891424489684 37.4046236577951)"
"POINT(126.894136259978 37.4033205564025)"
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
'Programming > PostreSQL' 카테고리의 다른 글
Postgresql 에서 URL decode (0) | 2017.12.10 |
---|---|
마이바티스 쿼리 생성 - PostGIS 공간 쿼리 (0) | 2017.04.21 |
Postgresql 버전 확인 (0) | 2017.04.06 |
Postgresql - DBLINK (0) | 2016.08.31 |
[postgresql] oracle 에서 postgresql 로 이관 (0) | 2016.04.28 |
댓글