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")
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')
$ 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