[Python] Folium으로 지도에 행정구역 경계 표시하기

2023. 2. 26. 19:53·Python

 지리 데이터를 통해 지도에 행정구역 경계를 표시할 수 있는 folium 라이브러리의 사용법을 소개하려고 합니다. 

 

0. 설치

pip install folium

1. 데이터

대한민국 행정동 경계 또는 통계청 API를 통해 받을 수 있습니다. 저는 API를 사용해서 데이터를 받았습니다.

params = {
    'accessToken': access_token, 
    'year':'2021',
    'adm_cd':code, # 행정구역코드 2(시) or 5(구) or 8(행정동) 자리
    'low_search':1  # 하위 정보 단계
}
res = requests.get('https://sgisapi.kostat.go.kr/OpenAPI3/boundary/hadmarea.geojson',params=params).json()

가공한 json 데이터

 데이터를 가공하여 최종적으로 위 형태와 같이 변환해 주면 됩니다. 서울시의 426개 행정동 데이터가 있고 'coordinates' 안에 행정구역경계에 대한 위치정보가 리스트 형태로 저장돼 있습니다.

 

※ 다만 여기서 주의해야 할 점은 API를 통해 얻은 데이터는 UTM-K좌표계이기 때문에 WGS84 좌표계를 사용하는 folium에서는 사용할 수 없습니다. 따라서 UTM-K좌표계에서 WGS84 좌표계로 변환해주어야 합니다. (데이터가 평소에 보던 위도, 경도 데이터가 아닌 것 같으면 WGS84 좌표계가 아닐 확률이 높습니다.)

from pyproj import Transformer

transformer = Transformer.from_crs("EPSG:5178", "EPSG:4326") # UTM-K좌표계에서 WGS84좌표계로 변환

x1, y1 = geo_json['features'][0]['geometry']['coordinates'][0][0][1],geo_json['features'][0]['geometry']['coordinates'][0][0][0]
transform_list = list(transformer.transform(geo_json['features'][0]['geometry']['coordinates'][0][0][1], geo_json['features'][0]['geometry']['coordinates'][0][0][0]))
x2, y2 = transform_list[1], transform_list[0]

print(f'({round(x1,2)},{round(y1,2)}) change to ({round(x2,2)},{round(y2,2)})')

 

(1953335.74,953553.93) change to (126.97,37.58)

 

2. 사용법

2-1) 서울시 중심의 위도와 경도를 입력하여 맵을 생성 합니다.

seoul_map = folium.Map(location=[37.5502,126.982],tiles='cartodbpositron',zoom_start = 12)

2-2) 경계 데이터를 넘겨주고 키값으로 행정동 코드(adm_cd)를 넣어주면 완성됩니다.

seoul_map.choropleth(geo_data=geo_json,
                     key_on='properties.adm_cd',
                     highlight=True,
                     fill_opacity=0.05,
                     line_opacity=1,
                     fill_color='PuRd')
seoul_map

2-3) 마커를 추가할 수도 있고 html을 삽입하여 팝업창을 보여줄 수도 있습니다.

folium.Marker([y2, x2],
              popup='<iframe width="560" height="315" src="https://www.siksinhot.com/search?keywords=%EC%A2%85%EB%A1%9C%EA%B5%AC+%EC%82%AC%EC%A7%81%EB%8F%99+%EB%A7%9B%EC%A7%91" title="food list" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
              tooltip="마커").add_to(seoul_map)
seoul_map

'Python' 카테고리의 다른 글

[Python] 언어모델의 출력을 스트리밍 방식으로 출력하기  (1) 2023.06.11
[Python] PEFT 라이브러리 알아보기  (0) 2023.05.29
[Python] selenium 사용 시 chromedriver 자동 업데이트하기  (0) 2023.02.12
[Python] Faiss, 효율적인 유사도 검색 엔진  (1) 2022.09.30
[Python] 페이지랭크 알고리즘  (0) 2022.08.14
'Python' 카테고리의 다른 글
  • [Python] 언어모델의 출력을 스트리밍 방식으로 출력하기
  • [Python] PEFT 라이브러리 알아보기
  • [Python] selenium 사용 시 chromedriver 자동 업데이트하기
  • [Python] Faiss, 효율적인 유사도 검색 엔진
gunuuu
gunuuu
주로 AI, ML에 관한 글을 씁니다.
  • gunuuu
    gunuuu
    gunuuu
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • AI/ML (11)
        • NLP (8)
        • RAG (1)
      • Pytorch (5)
      • Python (11)
      • SQL (2)
      • Causal Inference (3)
        • DoWhy (1)
      • 일상 (3)
      • 책 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FAISS
    TALLRec
    DAPT
    대규모언어모델
    크레마S
    SQL
    허깅페이스
    Chain of Thought
    모델경량화
    DataDistributedParallel
    미니어처 라이프 서울
    PEFT
    Tree of Thought
    인과추론
    window function
    bm25
    Low-Rank Adaptation
    nlp
    sparse vector
    DoWhy
    인과 추론
    onnx
    벡터 db
    TAPT
    line_profiler
    cython
    DetectGPT
    itertuples
    Hybrid search
    KoAlpaca
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gunuuu
[Python] Folium으로 지도에 행정구역 경계 표시하기
상단으로

티스토리툴바