반응형
먼저 보고 오셔야 하는 게시글
geopandas, folium을 통하여 지도 시각화하기(1)
결과물 먼저 아래 게시물들을 보고 오시면 좋을 것 같습니다! 코랩(colab)에 활용할 파일 업로드 하는 법 1. 코랩에 접속해주신 다음에 노트를 열어주시고요. 2. 왼쪽 탭에서 폴더 아이콘 클릭해주
datanaly.tistory.com
geopandas, folium을 통하여 지도 시각화하기(2)
먼저 보고 오셔야 하는 게시글 geopandas, folium을 통하여 지도 시각화하기(1) 결과물 먼저 아래 게시물들을 보고 오시면 좋을 것 같습니다! 코랩(colab)에 활용할 파일 업로드 하는 법 1. 코랩에 접속
datanaly.tistory.com
전체 코드
import geopandas as gpd
import pandas as pd
import folium
from folium.features import DivIcon
df_gu= gpd.read_file('/content/sig.json')
df_bdong = gpd.read_file('/content/emd.json')
cc = pd.read_table('/cc.csv', sep=',')
tt = pd.read_table('/tt.csv', sep=',')
result_df = pd.merge(df_gu, df_bdong, left_on=df_gu['SIG_CD'], right_on=df_bdong['EMD_CD'].str[:5], how='left')
gdf_test = result_df[result_df['SIG_KOR_NM'].isin(['광진구'])].reset_index(drop=True)
m = folium.Map(location=[37.54672073122991, 127.08580934446613], zoom_start=13.5)
# 시각화 할 경계선 색상 지정
colors = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'darkblue']
# FeatureGroup 사전 생성
layer_dict = {}
# 각 경계선을 지도에 추가
for idx, row in gdf_test.iterrows():
dong_name = row['EMD_KOR_NM']
polygon_wkt = row['geometry_y']
if dong_name in layer_dict:
layer = layer_dict[dong_name]
else:
# 해당 구이름에 대한 FeatureGroup가 없으면 새로 생성
layer = folium.FeatureGroup(name=dong_name,show=True)
layer_dict[dong_name] = layer
layer.add_to(m)
color = colors[len(layer_dict) % len(colors)]
t1 = folium.GeoJson(polygon_wkt,
style_function=lambda feature, color=color: {
'fillColor': color, #채우기 색상
'fillOpacity': 0.5, #채우기 투명도
'color': color, # 테두리 색상
'weight': 2, #테두리 두께
'opacity': 1 # 테두리 투명도
},
tooltip=f'법정동: {dong_name}')
t1.add_to(layer)
for n in cc.index:
lat1, lon1 = cc.loc[n, 'latitude1'], cc.loc[n, 'longitude1']
price1 = cc.loc[n, 'price1']
dong = cc.loc[n, 'dong'] # 이름 데이터
# 이름과 가격을 표시하는 DivIcon 추가, 스타일 변경
folium.Marker(
[lat1, lon1],
icon=DivIcon(
icon_size=(90, 50),
icon_anchor=(25, 25),
html=f'''
<div style="font-size: 10pt; font-weight: bold; color: white;
background: red; padding: 5px; border-radius: 5px;
text-align: center;">
{dong}<br>{price1}
</div>
''',
)
).add_to(m)
for n in tt.index:
lat2, lon2 = tt.loc[n, 'llatitude2'], tt.loc[n, 'longitude2']
price2 = tt.loc[n, 'price2']
name = tt.loc[n, 'name'] # 이름 데이터
# 이름과 가격을 표시하는 DivIcon 추가, 스타일 변경
folium.Marker(
[lat2, lon2],
icon=DivIcon(
icon_size=(110, 50),
icon_anchor=(50, 25),
html=f'''
<div style="font-size: 10pt; font-weight: bold; color: white;
background: navy; padding: 5px; border-radius: 5px;
text-align: center;">
{name}<br>{price2}
</div>
''',
)
).add_to(m)
# folium.LayerControl 추가한 뒤, 지도 표시
folium.LayerControl(collapsed=False).add_to(m)
folium.LatLngPopup().add_to(m)
# html파일로 저장
m.save("법정동시각화_231210.html")
m
시작!
영역 구분 및 표시하기
color = colors[len(layer_dict) % len(colors)]
# colors 리스트에서 인덱스를 통해 색상을 선택합니다.
# layer_dict의 길이를 colors 리스트의 길이로 나눈 나머지가 인덱스입니다.
t1 = folium.GeoJson(polygon_wkt,
# folium.GeoJson(polygon_wkt) -> polygon_wkt라는 GeoJson 데이터를 지도에 표시!
style_function=lambda feature, color=color: {
# 스타일 함수는 lambda feature, 색깔은 위 코드에서 선택한 색깔
'fillColor': color,
# 채우기 색상
'fillOpacity': 0.5,
# 채우기 투명도
'color': color,
# 테두리 색상
'weight': 2,
#테두리 두께
'opacity': 1
# 테두리 투명도
},
tooltip=f'법정동: {dong_name}')
# 마우스를 올렸을 때 '법정동: {dong_name}'가 뜨는 tooltip 추가
t1.add_to(layer)
#t1을 layer에 추가!
다음 코드는 아래 블로그 글에 설명이 되어 있습니다.
for n in cc.index:
lat1, lon1 = cc.loc[n, 'latitude1'], cc.loc[n, 'longitude1']
price1 = cc.loc[n, 'price1']
dong = cc.loc[n, 'dong'] # 이름 데이터
# 이름과 가격을 표시하는 DivIcon 추가, 스타일 변경
folium.Marker(
[lat1, lon1],
icon=DivIcon(
icon_size=(90, 50),
icon_anchor=(25, 25),
html=f'''
<div style="font-size: 10pt; font-weight: bold; color: white;
background: red; padding: 5px; border-radius: 5px;
text-align: center;">
{dong}<br>{price1}
</div>
''',
)
).add_to(m)
for n in tt.index:
lat2, lon2 = tt.loc[n, 'llatitude2'], tt.loc[n, 'longitude2']
price2 = tt.loc[n, 'price2']
name = tt.loc[n, 'name'] # 이름 데이터
# 이름과 가격을 표시하는 DivIcon 추가, 스타일 변경
folium.Marker(
[lat2, lon2],
icon=DivIcon(
icon_size=(110, 50),
icon_anchor=(50, 25),
html=f'''
<div style="font-size: 10pt; font-weight: bold; color: white;
background: navy; padding: 5px; border-radius: 5px;
text-align: center;">
{name}<br>{price2}
</div>
''',
)
).add_to(m)
아래 블로그 글을 참고하세요!
folium(포리움), DivIcon 활용하여 지도에 데이터,텍스트 표시
결과 데이터 시작! 활용 데이터 ff 지하철역별 주변 공시지가.csv name,price,llatitude,longitude 건대입구,524.1,37.5398966800000,127.0706677346700 뚝섬유원지,502.5,37.5315151275315,127.0667961917620 어린이대공원,487.8,37.5
datanaly.tistory.com
지도 저장 및 출력!
folium.LayerControl(collapsed=False).add_to(m)
# 지도 m에 folium.LayerControl 추가!
folium.LatLngPopup().add_to(m)
# 지도 m에 경도와 위도 표시하는 팝업 기능 추가!
m.save("법정동시각화_231210.html")
# html파일로 저장
m
# 지도 m 출력
끝!
반응형
'Today i learned & Week i learned > 프로젝트 관련' 카테고리의 다른 글
geopandas, folium을 통하여 지도 시각화하기(2) (0) | 2023.12.23 |
---|---|
geopandas, folium을 통하여 지도 시각화하기(1) (0) | 2023.12.23 |
SHP파일 GeoJSON 파일로 변경하는법 (1) | 2023.12.22 |
folium(포리움), DivIcon 활용하여 지도에 데이터,텍스트 표시 (0) | 2023.12.21 |