한국 시도 파일 (위도,경도)에서 (경도, 위도)로 변환하기

sangeun jo·2021년 10월 13일
0

folium에서 polygon 함수가 제대로 적용이 안됐는데 이유가 위경도 형식이어서였다. 한국은 위경도 표시가 흔하지만 외국은 경위도 형식이 흔하다고 한다. 지도 시각화를 하며 여러가지로 활용할 일이 많을 것 같아 파이썬 스크립트로 만들어보았다.

한국 시도 위경도 파일을 경위도로 변환

import json
# 경위도 json 파일 로드 
geo_path = '__original_json_file_path__'
f = open(geo_path, encoding='ANSI')
geo_json = json.loads(f.read())

sido_list = []

def convert_yx(lon_lat):
    lat_lon = []
    for x,y in lon_lat:
        temp = x
        x = y
        y = temp
        lat_lon.append([x,y])
    return lat_lon
    

for i in range(17):
    lon_lat = sum(geo_json['features'][i]['geometry']['coordinates'], [])

    lat_lon = []
    
    try: # 쪼개지지 않고 하나의 덩어리로 그려지는 도시들 
        sido_list.append(convert_yx(lon_lat))

    except: # 여러개로 쪼개지는 형태의 도시들
        new_sido = []
        sido = sum(geo_json['features'][i]['geometry']['coordinates'], []) 
        for sido_pice in sido: 
            new_pice = []
            new_sido.append(convert_yx(sido_pice)) 
            
        sido_list.append(new_sido)

# geometry에 변환된 경위도 값  넣어주기 
for i in range(17):
    geo_json['features'][i]['geometry']['coordinates'] = sido_list[i]

# 저장 
with open('__save_path__','w', encoding='ANSI') as make_file:
    json.dump(geo_json, make_file, indent="\t")

Ploygon 함수 적용법

import folium
import json

m = folium.Map(location=[36, 127],  tiles="Mapbox Bright", zoom_start=7)

path = '__json_file_path__' # 위에서 얻은 json 파일 경로
f = open(path, encoding='ANSI') 
json = json.loads(f.read())


for i in range(17):
    folium.Polygon(
        locations =  json['features'][i]['geometry']['coordinates'], # foligon 사용 예시 
        fill = True,
    ).add_to(m)

m.save('__save_path__.html')      

결과

번외: 원본 시군구 지리 파일 추출하기

  1. mapshaper 접속
  2. 여기에서 받은 시군구 지리 파일 업로드
  3. 콘솔창 열고 다음 명령어 입력
$ each 'sgg_cd=adm_cd.substr(0,2)'
$ each 'sgg_nm=adm_nm.substr(0, adm_nm.indexOf(" "))'
$ dissolve sgg_cd copy fields=sgg_nm 

참고

  • (경도, 위도) 에서 (위도, 경도) 변환은 불가능하다.
  • 시도 선 추출할 때 더 단순히 한다면 도가 쪼개지지 않아서 except 코드 없이 적용할 수도 있을 것이다.
  • 원본 시도 json 파일은 여기에서 추출함
profile
코더가 아니라 개발자가 되자

0개의 댓글