2019년 5월 6일 월요일

지도 그리기


지도에 정보를 표시하는 파이썬 패키지로 folium 만한 것이 없지만 때로는 folium 제공하는 지도보다 단순한 형태가 필요한 때가 있습니다. 행정 구역의 경계 위치를 알려 주는 데이터는 South Korea administrative division geodata (https://github.com/southkorea/southkorea-maps) 에서 구할 있습니다. 데이터로 단순한 지도를 파이썬에서 그릴려고 합니다.
파이썬에서 이용하기에 가장 좋은 지리 정보 형식은 geojson입니다. 점의 위도와 경도만 추출해서 함수 개만 사용하면 바로 그림을 있습니다.
여기에서 사용한 geojson 데이터는 https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-provinces-2018-geo.json입니다. 데이터는 PC 다운로드해서 저장해 놓습니다. 파일을 읽고 json.loads() 호출하면 딕셔너리형 데이터로 변환할 있습니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import json
with open("c:/Users/rcjcyoo/Downloads/skorea-provinces-2018-geo.json", encoding='utf-8') as json_file:
    jdata = json_file.read()
    geoJSON = json.loads(jdata)

pts=[]
for  feature in geoJSON['features']:
    if feature['geometry']['type']=='Polygon':
        pts.extend(feature['geometry']['coordinates'][0])    
        pts.append([None, None])
        
    elif feature['geometry']['type']=='MultiPolygon':
        for polyg in feature['geometry']['coordinates']:
            pts.extend(polyg[0])
            pts.append([None, None])
    else: raise ValueError("geometry type irrelevant for map")  

import matplotlib.pyplot as plt
x = [i for i,j in pts]
y = [j for i,j in pts]
fig = plt.figure(figsize=(12, 12))
ax = fig.gca()
ax.plot(x,y)
plt.show()

파이썬 프로그램으로 위도와 경도만 추출하고 추출한 위도와 경도를 x, y 나누어 저장한 다음 matplotlib plot() 함수를 이용해서 지도를 표시합니다.




댓글 1개:

  1. 안녕하세요 혹시 위의 지도의 일부 지역만 선을 굵게 만들수도 있나요?

    답글삭제