DB/PostgreSQL

도분초 위경도 좌표 공간정보로 변환 (좌표 변환)

데메즈 2024. 10. 17. 16:40
728x90
반응형

 

이런 식으로 되어있는 도분초 위경도 좌표를 공간정보로 변환하려고 한다.

 

우선 'split_part' 함수를 이용하여 시분초를 계산해준다.

 

SPLIT_PART() 함수
SPLIT_PART(문자열, 자를 문자, 위치) 

 

예를 들어 split_part('127-37-30', '-', 1) 하면 127이 나온다.

 

split_part('127-37-30', '-', 2)를 하면 37

 

split_part(lon, '-', 1)

 

시분초 계산을 해주면 아래와 같이 만들 수 있다.

 

(시 + 분/60 + 초/3600)

 

ex) '127-37-30' = 127 + 37/60 + 30/3600

 

cast(split_part(lon, '-', 1) as numeric) + cast(split_part(lon, '-', 2) as numeric) / 60 +
       cast(split_part(lon, '-', 3) as numeric) / 3600

 

더하기를 해줘야하기 때문에 numeric로 형변환을 해주었다.

 

ST_MAKEPOINT() 함수

 

st_makepoint()는 좌표를 만들어주는 함수이다

 

st_makepoint(lon, lat) 이렇게 넣어주면 좌표가 만들어진다.

 

ST_MAKEPOINT(cast(split_part(lon, '-', 1) as numeric) + cast(split_part(lon, '-', 2) as numeric) / 60 +
       cast(split_part(lon, '-', 3) as numeric) / 3600,cast(split_part(lat, '-', 1) as numeric) + cast(split_part(lat, '-', 2) as numeric) / 60 +
       cast(split_part(lat, '-', 3) as numeric) / 3600)

 

 

ST_SETSRID() 함수

 

ST_SETSRID() 함수는 좌표계를 설정하는 함수이다.

도분초는 ESPG:4326 좌표계를 사용하기 때문에

 

ST_SETSRID(좌표, 4326) 이렇게 넣어주면 된다.

ST_SETSRID(ST_MAKEPOINT(cast(split_part(lon, '-', 1) as numeric) + cast(split_part(lon, '-', 2) as numeric) / 60 +
       cast(split_part(lon, '-', 3) as numeric) / 3600,cast(split_part(lat, '-', 1) as numeric) + cast(split_part(lat, '-', 2) as numeric) / 60 +
       cast(split_part(lat, '-', 3) as numeric) / 3600), 4326)

 

ST_TRANSFORM() 함수

 

ST_TRANSFORM() 는 좌표계를 변환해주는 함수이다.

 

우리 시스템에서는 ESPG:3857 좌표계를 사용하고 있어서 변환을 해주었다.

ST_TRANSFORM(좌표, 3857) 이렇게 사용하면 된다.

 

(최종)

st_transform(ST_SETSRID(ST_MAKEPOINT(cast(split_part(lon, '-', 1) as numeric) + cast(split_part(lon, '-', 2) as numeric) / 60 +
       cast(split_part(lon, '-', 3) as numeric) / 3600,cast(split_part(lat, '-', 1) as numeric) + cast(split_part(lat, '-', 2) as numeric) / 60 +
       cast(split_part(lat, '-', 3) as numeric) / 3600), 4326), 3857)

 

그럼 이렇게 좌표가 뙇 찍히게 된다 ㅎㅎ

 

728x90
반응형