首页 > 解决方案 > 我们可以使用 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

本质上,我想获取“红牛竞技场”、“北部大学医院”、“旧金山国际机场”等名称,等等等等。所以,是否可以根据纬度和经度获取网站描述坐标,使用叶图?也许它被称为工具提示或弹出窗口,不确定。谢谢。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: pythonpython-3.xfolium

解决方案


您可以使用反向地理编码服务/提供商(例如 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 APIGeoPy。这是一个使用geopyOpenStreetMap (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


推荐阅读