python - 我们可以使用 folium maps 来获取某种站点类型或站点描述吗?
问题描述
我正在玩一些代码来遍历具有经度和纬度坐标的记录,并获得某种站点类型,或站点分类,或任何您想要调用的名称。下面的示例代码不起作用,但我认为它有点接近。
import folium
import requests
from xml.etree import ElementTree
from folium import plugins
m = folium.Map(location=[40.7368436,-74.1524242], zoom_start=10)
for lat,lon in zip(df_cellgroups['latitude'], df_cellgroups['latitude']):
marker = folium.Marker(location=[lat,lon], tooltip = tip, popup = name)
marker.add_to(m)
m
本质上,我想获取“红牛竞技场”、“北部大学医院”、“旧金山国际机场”等名称,等等等等。所以,是否可以根据纬度和经度获取网站描述坐标,使用叶图?也许它被称为工具提示或弹出窗口,不确定。谢谢。
解决方案
您可以使用反向地理编码服务/提供商(例如 OpenStreetMap、Google 或 Esri 提供的)检索有关位置的信息。
(这里有Python 包支持的所有提供程序的概述geocoder
。)
下面是一个使用geocoder
包和OpenStreetMap (Nominatim)作为提供者的示例:
# pip install geocoder requests
import time
import requests
import geocoder
locations = (
(40.7368436, -74.1524242),
(44.6371650, -63.5917312),
(47.2233913, 8.817269106),
)
with requests.Session() as session:
for location in locations:
g = geocoder.osm(
location=location,
method="reverse",
lang_code="en",
session=session,
headers={
"User-Agent": "Stackoverflow Question 69578280"
},
)
print(g.osm) # or print(g.json)
# slow down loop in order to comply with the Nominatim's Usage Policy:
# https://operations.osmfoundation.org/policies/nominatim
time.sleep(1)
或者,还有其他 Python 库,例如ArcGIS for Python API或GeoPy。这是一个使用geopy
OpenStreetMap (Nominatim) 作为提供程序的包的示例:
# pip install geopy
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter
locations = (
(40.7368436, -74.1524242),
(44.6371650, -63.5917312),
(47.2233913, 8.817269106),
)
locator = Nominatim(user_agent="Stackoverflow Question 69578280")
# using RateLimiter to comply with Nominatim's Usage Policy
reverse = RateLimiter(locator.reverse, min_delay_seconds=1)
for location in locations:
result = reverse(location, language="en")
print(result.raw)
注意:确保您阅读了您将要使用的服务的使用条款。Nominatim 的使用政策可在此处找到:https ://operations.osmfoundation.org/policies/nominatim
推荐阅读
- python - Selenium Python等待功能,最大等待时间不起作用
- angular - Angular 表单与异步管道绑定以设置模型
- javascript - 由于 Invariant Violaton,Expo Android Emulator 未加载:[React Intl] `Intl` API 必须在运行时可用,并且似乎不可用
- laravel - Laravel 7 Lumen,安装 ffmpeg 问题
- node.js - Google Cloud Functions Node.js 错误报告 - 未记录未处理的拒绝
- linux-kernel - 用于将 IPv6 数据报定向到内核的原始套接字
- sql - 无法为 Spring Boot 存储库中的数组运行 CASE WHEN
- react-native - 有没有办法通过 React Native 应用程序更改时区?
- android - 未调用 TextView.OnEditorActionListener
- pandas - cuDF:Pandas Groupby + Shift 的替代方案?