본문 바로가기

미니 프로젝트

두 번째 미니 프로젝트 - 21.09.9(목)

728x90

아래와 같이 원하는 조건별 위치를 파악할 수 있도록 하는 데이터 세 가지를 수집했다.

  • 주변에 공원이 있는지
  • CCTV가 설치된 장소인지
  • 인근에 머물 수 있는 숙박업소가 있는지

 

문제는 숙박업소 데이터였는데 제공되는 좌표가 다른 데이터들과는 다르게 위도, 경도가 아닌 듯 했다. 

 

(해당 데이터는 서울시 열린데이터광장에서 받은 서울특별시 관광숙박업 인허가 정보.csv 이다.)

 

이 문제를 해결하기 위해서 찾아본 결과 좌표계는 크게 TM 방식과 WGS 방식으로 나뉘는거 같았다. 

 

위,경도로 표시된 좌표계(WGS84)는 지리좌표계라 하며 도(degree)단위로 표시되고 3차원 구면에 표시하는 반면,

Meter단위로 표시된 투영좌표계는 2차원 평면상에 나타낸 좌표로 횡단원통등각투영법(TM) 방식이 있다. 

 

즉, 아무래도 숙박업소데이터에 포함된 좌표는 TM 단위인 듯 했고, 이를 다른 데이터들과 통일시켜주려면 WGS 방식으로 변환해주어야 한다.

 

원리를 이해한건 아니지만 검색을 하다보니 크게 어렵지 않게 파이썬 내에서 변환하는 코드를 찾아볼 수 있었는데,

결과가 생각만큼 잘 나오지 않아서 애를 먹고 있다. 

 

현재 이용한 코드로는 실제 좌표와 변환된 좌표 사이에 대략 200미터 정도의 이격이 존재했다. 

 

다운받은 숙박업소 데이터 좌표

from pyproj import Proj, transform

proj_UTMK = Proj(init='epsg:5181')
proj_WGS84 = Proj(init='epsg:4326')

def transform_utmk_to_w84(df):
    return pd.Series(transform(proj_UTMK, proj_WGS84, df['좌표정보(X)'], df['좌표정보(Y)']), index=['좌표정보(X)', '좌표정보(Y)'])
    
hotel[['경도', '위도']] = hotel.apply(transform_utmk_to_w84, axis=1)

위 코드를 사용하여 추출된 위도 경도

 

아래 지도를 보자.

실제 엘리에나호텔의 위치(아래 그림의 0이 적힌 위치)와 추출된 좌표(붉은 원이 찍힌 지점)까지의 거리가 꽤 차이가 난다.  

왜 그렇지?

 

우리가 구현하려고 하는 목표 중에 어느 한 지점으로부터 1km 내에 존재하는 주변환경요소를 솔팅하는 프로세스가 있기 때문에 정확도를 위해서 이 차이를 좀 더 줄일 필요가 있을 듯 하다. 

 


 

아무래도 문제의 원인은 변환해야할 TM 기준을 잘못 잡았거나 변환되어나올 WSG기준을 잘못잡았기 때문인듯해서 

 

proj_WGS84 = Proj(init='epsg:4326')

 

이 부분을 이리저리 바꿔보는 중이다.

 

현재 4326과 4166, 4737, 4004은 동일한 결과과 나왔고 4162는 오히려 더 멀어졌다.

 

참고하고 있는 사이트에 따르면 WGS84 경위도가 4326과 4166이고

Bessel 1841 경위도가 4004, 4162로 나오는데 4004와 4162가 다른 결과가 나오는 점이 이해가 되지 않는다.

GRS80 경위도인 4019와 4737도 4326과 같은 결과가 나온다.

Google Mercator인 3857은 전혀다른 수치가 나오는것 같다. 

 


 

아무래도 WGS기준이 잘못된건 아닌지 이리저리 맞춰봐도 가까워 지는 값은 안나왔다.

그래서 이번엔 WGS는 4326으로 두고 TM쪽 기준을 바꿔보려한다. 

 

proj_UTMK = Proj(init='epsg:5181')

 

5186으로 할 경우엔 변환 값이 아에 서울을 벗어나버렸다. 

 

2097로 하면 비슷하게 200미터 정도 이격이 있지만 방향이 조금 달라졌다.

 

 

남서방향으로 쭉 빠지던게 서쪽으로 쭉 빠지는 모양으로 바뀌었다. 그러나 거리차이는 200미터정도로 비슷하다.


보정된 중부원점(bessel) EPSG:5174 로 설정하자 거리 간격이 약 64미터까지 줄어들었다!

 

 

EPSG:5174 -> EPSG:4326 으로 할때 정확한 WSG좌표가 도출되는 듯 하다! 

위에 엘리에나 호텔의 경우엔 차이가 60미터정도 났지만 다른 티마크호텔 명동좌표를 이용해서 전후를 비교해보니 정확하게 위치를 잡는 모습을 보여주었다.

 

 

문제 해결하면서 참고한 사이트

[Python] 좌표변환 예제 : 네이버 블로그 (naver.com)

 

[Python] 좌표변환 예제

UTM-K좌표계에서 WGS84좌표계로 변환하거나 WGS84좌표계에서 UTM-K좌표계로 변환해주는 예제...

blog.naver.com

 

[GIS] 좌표 정의 및 변환 방법, 자주쓰는 좌표계 - yg’s blog (yganalyst.github.io)

 

[GIS] 좌표 정의 및 변환 방법, 자주쓰는 좌표계

공간정보 데이터의 좌표를 정의하고 변환하는 방법을 알아보자.

yganalyst.github.io

OSGeo(Open Source GeoSpatial) 한국어 지부 :: 한국 주요 좌표계 EPSG코드 및 proj4 인자 정리

 

한국 주요 좌표계 EPSG코드 및 proj4 인자 정리

알림: Proj6.0부터는 국토지리정보원이 고시한 Molodensky-Badekas 10계수 모델을 지원합니다. 따라서, Proj6.0을 좌표계 라이브러리로 사용하는 오픈소스 프로젝트인 경우 아래 Bursa-Wolf 7계수 모델을 이

www.osgeo.kr