티스토리 뷰
공간정보 데이터를 다루다보면 가끔 한국 좌표가 다른 이상한 곳에 있거나 지도에 표시가 안 되는 좌표도 있다.
그건 바로 좌표계가 맞지 않아서 그러한 현상이발생하는 것이다. (GIS 일을 해본 사람은 좌표계라는 것이 익숙할 것이다.)
좌표계라는 것은 간단하게 이야기하면 평면이 아닌 입체 구면인 지구를 어떤 식으로 표현하는냐 그 방법이다.
보통 Google Maps API나 등 지도 라이브러리들에서는 WGS84(4326)을 많이 쓰지만 가끔 공공데이터를 다운 받아서 사용하다보면 Korean 1985(2097)을 사용하기도 한다. 이럴 때 지도 라이브러리에서 사용하기 위해서는 좌표계를 변환해야 한다.
PostGIS의 ST_Transform 함수
postgreSql에서는 PostGIS라는 함수를 제공하고 사용할 수 있다. 이 PostGIS에서는 좌표계를 변환하는 함수 또한 존재한다.
그게 바로 ST_Transform이다.
http://postgis.net/docs/manual-2.0/ST_Transform.html
ST_Transform
Name ST_Transform — Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter. Synopsis geometry ST_Transform(geometry g1, integer srid); Description Returns a new geometry with its coordinates transformed to
postgis.net
사용 방법은 아래와 같이 매우 간단하다.
SELECT ST_Transform(${SRID가 포함된 geometry 데이터}, ${변환할 좌표계})
FROM data
여기서 변환할 좌표계는 4326으로 변경하려면 4326으로 해당 좌표계의 고유한 숫자 ID 값으로 넣어야한다.
SRID가 포함된 geometry 데이터
ST_Transform은 좌표계 정보(SRID)가 포함되어 있는 geometry 데이터를 첫 번째 인수로 넣어야한다.
좌표계를 변환해야하니 당연하겠지만, 일반 geometry 컬럼 데이터는 좌표계에 대한 데이터가 없다.
하지만 geometry 컬럼 데이터를 사용하다보면 자연스레 그곳에 좌표계 정보가 있다고 생각할 수 있는데 이 또한 PostGIS의 ST_SetSRID 함수로 좌표계 정보를 넣어줘야 한다.
ST_SetSRID
ST_SetSRID 함수 또한 PostGIS에서 제공하는 함수로 geometry 데이터에 좌표계에 대한 정보를 넣는 함수이다.
사용은 아래와 같이 할 수 있다.
SELECT ST_SetSRID(${geometry data}, ${좌표계(번호형식)}
FROM data
위와 같이 geometry 데이터를 첫 번째 인수로 넣고 두 번째 인수로 좌표계 번호를 넣는다.
좌표계에서 WGS84처럼 이름 형태가 아닌 해당 좌표계의 고유한 ID 값인 2097, 4326 같은 번호 형식으로 넣어야한다.
예시를 들면 아해와 같다.
SELECT ST_SetSRID(the_geom, 2097}
FROM data
ST_SetSRIDㄹ와 ST_Transform을 사용해서 좌표계를 변환했을 때 아래와 같이 결과가 나온다.
point가 2097 좌표계의 geometry 데이터이고 뒤의 new_point가 4326 좌표계로 변환한 데이터이다.
확실히 2097데이터는 좌표가 익숙하지 않은데 4326 데이터는 표준 좌표계인만큼 익숙한 좌표 모습을 보여주는 것을 확인할 수 있다.
✋ PostGIS 공식 문서
http://postgis.net/docs/manual-2.0/reference.html
Chapter 8. PostGIS Reference
The functions given below are the ones which a user of PostGIS is likely to need. There are other functions which are required support functions to the PostGIS objects which are not of use to a general user. 8.13. Exceptional Functions These functions are
postgis.net
'DB' 카테고리의 다른 글
[ PostgreSql ] PostGIS 함수와 geometry 컬럼 타입 사용하기 (0) | 2021.08.17 |
---|---|
[ PostgreSql ] Like or 여러 개 쓴 것과 같은 효과를 내는 Similar to (0) | 2021.08.14 |
[ PostgreSql ] 외부 접속 IP White List 설정하기 (0) | 2021.08.13 |
[ PostgreSql ] 서로 다른 곳의 DB dblink로 연결하기 (0) | 2021.08.04 |
[ Redis ] Window에 redis 설치해서 사용하기 (0) | 2021.07.24 |
- Total
- Today
- Yesterday
- 캐시
- enum
- PostgreSQL
- MAC
- 캐싱
- 어노테이션
- ssh
- Intellij
- 데이터베이스
- DB
- Spring
- 메시지큐
- Java
- cache
- springboot
- Caching
- rabbitmq
- postgres
- eclipse
- mockito
- 스프링부트
- JPA
- DATABASE
- annotation
- 공간데이터
- k8s
- HttpClient
- 자바
- 이클립스
- 역직렬화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |