📍

OpenStreetMap + foliumを使って周辺のコンビニをプロットする

2022/05/22に公開

やること

OpenStreetMapのデータとfoliumを使って周辺にあるコンビニを地図上にプロットする。

やってみる

OpenStreetMapのデータを取得する

今回はpyormを使用してOSMデータを触ってみる。
他にもosmreadでもOSMデータを触ることができるが、別途OSMデータを取得してくる必要があるため、pyormを使用する。

PythonでOSMデータを触る方法は以前Scrapで書いたので良ければこちらも見てもらえると。
https://zenn.dev/prog24/scraps/1fef18e81e7840

関西のOSMデータを取得する

from pyrosm import get_data
fp = get_data("kansai")

使用するOSMデータを京都駅周辺の地図データに絞る

import pyrosm
osm = pyrosm.OSM(fp ,bounding_box=[135.754080,34.981962,135.761659,34.987314])

コンビニ情報を検索する

custom_filter = {"shop": ["convenience"]}
pois = osm.get_pois(custom_filter=custom_filter)

検索したコンビニの情報を表示する

for name, lat, lon in zip(pois['name'], pois['lat'], pois['lon']):
  print(name, lat, lon)

> ローソン 34.98695373535156 135.7572784423828
> ローソン 34.984466552734375 135.75430297851562
> ファミリーマート 34.986915588378906 135.7609100341797
> ...

foliumを使ってコンビニをプロットする

京都駅を地図の中心に設定する

import folium
map = folium.Map(location=[34.985506, 135.758998], zoom_start=17)

コンビニをピン留めする

for i, r in pois.iterrows():
  folium.Marker([r['lat'], r['lon']], popup=r['name']).add_to(map)

HTMLに出力する

map.save("map_train.html")

京都駅周辺のコンビニのプロット完成!🎉

同じ要領で特定のスポットなどを検索して地図に表示ができます。

Discussion