갓생사는 공순이가 되고싶은 콩순이 2022. 9. 11. 01:26
반응형

<과제>

사용자에게 도로명 주소를 입력받아 마커를 표시하고 그 위치에 가장 가까운 WIFI 10곳을 지도 시각화하자.

하나의 셀에서 실행되어야 한다.

 

# 라이브러리 임포트
import folium
import pandas as pd
from geopy.distance import geodesic
from geopy.geocoders import Nominatim

# 입력받을 주소 함수
def geocoding(address):
    geolocoder = Nominatim(user_agent = 'South Korea', timeout=None)
    geo = geolocoder.geocode(address)
    crd = {"lat": str(geo.latitude), "lng": str(geo.longitude)}

    return crd

adress = input('도로명 주소를 입력하세요 : ')
crd = geocoding(adress)

my_home = folium.Map(location=[crd['lat'], crd['lng']], zoom_start=14)

folium.Marker([crd['lat'], crd['lng']], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(my_home)

my_wifi = pd.DataFrame(columns = ['설치시군구명', '설치시설구분', '위도', '경도', '거리'])
my_home = (crd['lat'], crd['lng'])

data[['설치시군구명', '설치시설구분', '위도', '경도']]

for n in data.index:
  wifi_loc = (data.loc[n, '위도'], data.loc[n, '경도'])

  my_wifi.loc[n] = [data.loc[n, '설치시군구명'], data.loc[n,'설치시설구분'], data.loc[n,'위도'], data.loc[n,'경도'], geodesic(my_home, wifi_loc).kilometers]

my_wifi = my_wifi.sort_values(by=['거리']).head(10)

for n in my_wifi.index:
  folium.Marker([my_wifi.loc[n, '위도'], my_wifi.loc[n, '경도']],
                popup = '<pre>'+my_wifi.loc[n, '설치시설구분']+'</pre>',
                icon = folium.Icon(icon='wifi', prefix='fa')).add_to(my_home)

folium.Marker([crd['lat'], crd['lng']], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(my_home)
my_map

 

LIST