下面是一份详细的攻略,讲解如何使用 Python 将地址标记在地图上。
步骤一:准备工作
在进入代码编写之前,需要先进行准备工作。具体参考以下步骤:
安装所需的依赖库
在 Python 中,我们需要使用第三方的依赖库来完成将地址标记在地图上的功能。为此,我们需要下载并安装以下三个库:
- requests:用于获取经纬度信息
- folium:主要是用来绘制地图
- geopy:用于获取地址的经纬度信息,也可以用来计算两点之间的距离
你可以使用以下命令来安装这些依赖库:
pip install requests folium geopy
获取百度地图的 API Key
使用 Python 将地址标记在地图上,需要获取百度地图的 API Key,才能获取经纬度信息。获取方法如下:
- 访问百度地图开放平台。
- 注册一个帐号(如果没有),然后登录。
- 进入“我的应用”,创建一个应用。
- 在应用中心,启用“Web服务”,选择“地理编码”和“逆地理编码”两个接口,复制 API Key。
步骤二:获取地址的经纬度信息
经过上面的准备工作后,接下来就是获取地址的经纬度信息。实现的方法可以参考以下代码示例:
import requests
def get_location(address):
"""
根据地址获取经纬度信息
"""
api_url = 'http://api.map.baidu.com/geocoding/v3/'
params = {
'address': address,
'output': 'json',
'ak': 'your api key' # 将 your api key 替换为你自己的 API Key
}
response = requests.get(api_url, params=params)
data = response.json()
if data['status'] == 0:
return data['result']['location']['lat'], data['result']['location']['lng']
else:
print(f'获取位置信息失败:{data["message"]}')
在上面的代码中,我们使用了 requests 库来发送 HTTP 请求,获取百度地图的 API 返回的 JSON 数据。根据返回的数据格式,我们可以很方便地解析出经纬度信息。
步骤三:绘制地图
在获取到地址的经纬度信息之后,我们就可以通过 folium 库来绘制地图了。folium 库提供了丰富的地图设置和标记功能。
接下来的示例代码演示了如何将多个地址标记在同一张地图上:
import folium
locations = ['北京市朝阳区酒仙桥北路', '上海市徐汇区漕溪路']
# 初始化地图
m = folium.Map(location=[39.9, 116.4], zoom_start=11)
# 循环添加标记
for loc in locations:
lat, lng = get_location(loc)
tooltip = folium.map.Tooltip(loc)
folium.Marker(
location=[lat, lng],
tooltip=tooltip
).add_to(m)
# 保存地图
m.save('map.html')
在上面的代码中,我们首先初始化了一张地图,设置中心坐标和缩放级别。接着,我们通过 get_location 函数获取每个地址的经纬度信息,然后循环添加标记。
最后,我们将地图保存为一个 HTML 文件,你可以通过浏览器访问该文件来查看标记后的地图效果。
步骤四:计算距离
在绘制地图之后,我们还可以使用 geopy 库来计算两个标记点之间的距离。接下来的代码就是一个简单的示例:
import folium
from geopy import distance
locations = [
('北京市朝阳区酒仙桥北路', '众创空间'),
('上海市徐汇区漕溪路', '东方明珠'),
]
# 初始化地图
m = folium.Map(location=[39.9, 116.4], zoom_start=11)
# 循环添加标记
for loc, label in locations:
lat, lng = get_location(loc)
tooltip = folium.map.Tooltip(loc)
folium.Marker(
location=[lat, lng],
tooltip=tooltip,
popup=label,
).add_to(m)
# 计算两个标记点之间的距离
p1 = locations[0]
p2 = locations[1]
dist_meters = distance.distance(get_location(p1[0]), get_location(p2[0])).m
# 添加线路和距离信息
folium.PolyLine([get_location(p1[0]), get_location(p2[0])], color='red').add_to(m)
folium.Marker(
location=((get_location(p1[0])[0] + get_location(p2[0])[0]) / 2,
(get_location(p1[0])[1] + get_location(p2[0])[1]) / 2),
icon=folium.Icon(icon='cloud'),
tooltip=f'{p1[1]} 到 {p2[1]} 的距离为:{dist_meters:.2f} 米'
).add_to(m)
# 保存地图
m.save('map.html')
在上面的代码中,我们首先通过 geopy 库中的 distance 函数,计算出两个经纬度坐标点之间的距离。接着,我们再次使用 folium 库来添加标记和线路,最后通过 folium.Marker 函数添加一个带有提示信息的标记,表明两个地点之间的距离。
至此,整个示例代码就完成了,你可以通过浏览器访问保存的 HTML 文件来查看地图的标记和线路信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用用Python将地址标记在地图上 - Python技术站