explore

explore

  • Geopandas내 explore 메서드 활용
    • folium, matplotlib, mapclassify 패키지 설치 필요
  • Vworld 배경지도를 활용하여 html로 저장
    • 속성정보도 표시됨
gdf.explore(column='color', legend=False,
            tiles='https://xdworld.vworld.kr/2d/Base/service/{z}/{x}/{y}.png', attr='vworld').save('../data/total.html')

folium

tiles(배경지도)

주의사항

  • 커스텀 지도 제작 시, attr 로 배경지도 저작권에 대한 표시 필수!
  1. 기본 제공
    1. OpenSteetMap(기본값)
    2. Stamen Terrain, Stamen Toner, Stamen Watercolor
    3. CartoDB positron, CartoDB dark_matter
  2. 배경지도 변경
    1. Vworld
from sqlalchemy import create_engine
from urllib.parse import quote_plus
from sqlalchemy.sql import text
from json import load
import geopandas as gpd
import pandas as pd
with open('config.json', 'r', encoding='utf-8') as config:
    config = load(config)
 
engine = create_engine(config['address'].format(quote_plus(config['password'])), isolation_level='AUTOCOMMIT')
target = '41463'
 
gdf = gpd.read_postgis(text(f"select * from centroid.도로명주소건물도형 where 도로명주소관리번호 like '{target}%'"),
                       engine, geom_col='geometry')
gdf['color'] = [str(i % 10) for i in range(len(gdf))]
df = pd.read_sql(text(f"select distinct pnu, 도로명주소관리번호 from general.표제부 where 대장pk like '{target}%'"),
                 engine).dropna()
gdf = gdf.merge(df, on='도로명주소관리번호', how='left')
fltr = pd.read_sql(text(f"select pnu from general.도로명주소한글 where 공동주택여부='1' and 도로명주소관리번호 like '{target}%'"),
                   engine)
fltr = gdf.merge(fltr, on='pnu', how='inner').dissolve('pnu')
gdf = gdf.groupby('도로명주소관리번호').agg(
    {column: 'first' for column in gdf.columns if column not in ('도로명주소관리번호', 'pnu')} | {'pnu': 'unique'})
gdf['pnu'] = gdf['pnu'].str.join('\n')
gdf = gpd.GeoDataFrame(gdf, geometry='geometry', crs=fltr.crs)
 
gdf.explore(column='color', legend=False,
            tiles='https://xdworld.vworld.kr/2d/Base/service/{z}/{x}/{y}.png', attr='vworld').save(
    '../data/total.html')
fltr.explore(column='color', legend=False,
            tiles='https://xdworld.vworld.kr/2d/Base/service/{z}/{x}/{y}.png', attr='vworld').save(
    '../data/apt.html')

참고사이트