Python 地图可视化:获得永不后悔的路线(特色:folium 软件包)
当你计划去一个从未去过的地方旅行时,你是否希望能看到整个旅行路线?在今天的文章中,您将学习如何使用 Python 地图可视化技术将旅行路线可视化。 我们将使用 Python 强大的 书库以直观的方式逐步呈现这一旅程。
下面是一个假设情况 肯尼迪机场乘坐出租车或优步前往 纽约中城希尔顿酒店 抵达酒店后,步行前往 曼哈顿中心 前往会场。通过本教程、 Python 地图可视化 掌握技能,学习如何在地图上绘制旅行路线。
了解 Python 地图可视化摘要
Python 地图可视化是一个功能强大的工具,可使用 GPS 坐标在地图上直观地显示各种数据。 特别是,通过 folium 库,您可以在 Python 中创建类似谷歌地图的地图。
在本示例中,您将看到如何为纽约市的三个关键点(肯尼迪机场、纽约中城希尔顿酒店和曼哈顿中心会场)添加标记,显示连接它们的蓝线,并在地图上显示旅行时间和距离信息。
逐步编写 Python 代码
1. 安装并加载程序库
要在 Python 中将地图可视化,可以使用 叶片 安装并导入程序库。
# 导入所需库函数
导入 os # 模块,用于操作文件和目录
导入 folium # 用于创建和操作地图的库
创建一个用于存储 # 结果的目录
result_dir = 'C:/result/'
# os.makedirs():创建目录。选项 exist_ok=True 可避免在目录已存在时出错
os.makedirs(result_dir, exist_ok=True)2. 设置关键位置以及距离和时间数据
确定每个地点的 GPS 坐标,设定两点之间的距离和预计时间。
# 主要地点的地理坐标(纬度、经度)
simplified_locations = {
"肯尼迪机场[40.6413, -73.7781],
"Hilton New York Midtown":[40.7625, -73.9780],
活动场地(曼哈顿中心)": [40.7527, -73.7781], "Hilton New York Midtown": [40.7625, -73.9780], "Event Venue (Manhattan Centre)":[40.7527, -73.9932]
}
# 距离(千米)和时间(分钟)信息
简化的距离和时间 = {
("JFK Airport", "Hilton New York Midtown"): (25.0, 35)、
(纽约中城希尔顿酒店"、"活动场地(曼哈顿中心)"): (1.2, 15)
}
设置 # 路由顺序
ordered_locations = [
("JFK Airport", "Hilton New York Midtown")、
("纽约中城希尔顿酒店"、"活动场地(曼哈顿中心)")
]3. 绘制地图并将路线可视化
绘制以纽约为中心的地图,在每个点上添加编号标记,并用蓝线连接路线。
创建 # 地图
# folium.Map():创建基本地图
# location:地图中心点坐标[纬度,经度]。
# zoom_start:初始缩放级别(越高缩放越多)
m = folium.Map(location=[40.7200, -73.9000], zoom_start=11)
# 添加标记和路径
# enumerate():返回列表元素及其索引,索引从 1 开始,start=1
for idx, location in enumerate(simplified_locations.items(), start=1):
loc_name, coords = location
# folium.Marker():在地图上添加标记
# 弹出窗口:点击标记时显示的文本
# 图标:设置标记的外观
folium.Marker(
coords、
popup=f"{idx}.{loc_name}"、
icon=folium.DivIcon(
html=f""""
<div style="text-align: center;">
<div style="font-size: 12pt; font-weight: bold; color: black; background-color: white; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;">
{idx}
</div>
<div style="font-size: 10pt; font-weight: bold; color: navy; margin-top: 10px;">
{地点名称}
</div>
</div>"""
)
).add_to(m)
# 添加路线和距离/时间信息
for (loc1, loc2) in ordered_locations:
# folium.PolyLine():在两点之间画一条直线
# color:直线的颜色;weight:直线的粗细;opacity:直线的透明度
folium.PolyLine([simplified_locations[loc1], simplified_locations[loc2]], color="blue", weight=2.5, opacity=1).add_to(m)
# 获取距离和时间信息
distance_km, time_min = simplified_distances_and_times[(loc1, loc2)] 距离和时间信息
# 计算两点的中点坐标
mid_point = [(simplified_locations[loc1][0] + simplified_locations[loc2][0]) / 2、
(simplified_locations[loc1][1] + simplified_locations[loc2][1]) / 2]
在 # 的中点添加包含距离和时间信息的标记
folium.Marker(
mid_point、
icon=folium.DivIcon(
html=f'<div style="font-size: 10pt; font-weight: bold; color: red;">{距离_公里}公里,{时间_分钟}分钟</div>',
)
).add_to(m)保存地图
将完成的地图保存到本地计算机的 C:\result 文件夹,如果成功完成,则会输出保存地图 html 文件的路径,如下图所示。
# 将地图保存为 HTML
# os.path.join():使用操作系统特有的路径分隔符生成文件路径
final_corrected_map_path = os.path.join(result_dir, 'ny_business_trip_final_corrected_map_with_distances.html')
m.save(final_corrected_map_path) # 将生成的地图保存为 HTML 文件
print(f "Map saved to: {final_corrected_map_path}") # 打印保存文件的路径
要在浏览器中查看完成的地图,只需点击其文件夹中的 HTML 文件(如下图所示),就能看到我们所要求的内容。


4. 常见问题(FAQ)
Q1. 在 Python 地图可视化中 叶片有吗?
A1. 叶片是一个可以帮助您使用 Python 可视化地图数据的库。它能让您以与谷歌地图相同的方式直观地显示数据。
Q2. 如何找到坐标?
A2. 使用谷歌地图搜索您想要的位置,然后右键单击位置图标,选择坐标(40.648275456129724,-73.78004682462297)进行复制。

问题 3: 能否将更复杂的路径可视化?
答3: 可以。您可以通过添加更多地点、显示实时交通信息等方式对其进行扩展。你可以使用这篇文章中的源代码告诉人工智能你想点什么,然后让它为你编码。
Q4. 能否将 Python 地图可视化的结果保存为图像?
A4. 叶片默认保存为 HTML 文件、 硒(我们将在另一篇文章中介绍),或者您也可以使用非程序化的 键盘快捷键(win+shift+s)来捕捉以 HTML 显示的地图。
组织起来
在本篇博文中,您将学习如何使用 Python 地图可视化来直观地展示纽约市的旅行路线。 这一过程可以让您直观地理解数据,即使是复杂的旅行路线或物流运动也能轻松实现可视化。分享本文章 人工智能提示内容以可视化不同的旅行路线,或为扩展项目添加更多数据!
如果您正在准备一份完整的旅行计划,包括预算、行程和 Python 地图可视化,请查看这篇文章 (您能为 2024 年春节计划一次 ChatGPT 旅行吗?),这将给你带来另一种启示。
1TP5完整集成代码
将下面的代码复制并粘贴到集成开发环境(如 VS 代码)中并执行。 但是,如果未安装 folium 软件包,则会出现以下警告。你可以在终端使用 pip install folium 命令(pip install folium)安装软件包,然后执行下面的集成代码。

# 导入所需库函数
导入 os # 模块,用于文件系统操作(目录创建、文件路径操作等)
导入 folium # 用于创建交互式地图的库
创建一个用于存储 # 结果的目录
result_dir = 'C:/result/'
# os.makedirs():创建目录。选项 exist_ok=True 可避免在目录已存在时出错
os.makedirs(result_dir, exist_ok=True)
# 设置关键地点的坐标(纬度、经度)
simplified_locations = {
"肯尼迪机场[40.6413, -73.7781],
"Hilton New York Midtown":[40.7625, -73.9780],
活动场地(曼哈顿中心)": [40.7527, -73.7781], "Hilton New York Midtown": [40.7625, -73.9780], "Event Venue (Manhattan Centre)":[40.7527, -73.9932]
}
# 距离(千米)和时间(分钟)信息
简化的距离和时间 = {
("JFK Airport", "Hilton New York Midtown"): (25.0, 35)、
(纽约中城希尔顿酒店"、"活动场地(曼哈顿中心)"): (1.2, 15)
}
设置 # 路由顺序
ordered_locations = [
("JFK Airport", "Hilton New York Midtown")、
("纽约中城希尔顿酒店"、"活动场地(曼哈顿中心)")
]
# 创建地图
# folium.Map():创建基本地图
# location:地图中心点坐标[纬度,经度]。
# zoom_start:初始缩放级别(越高缩放越多)
m = folium.Map(location=[40.7200, -73.9000], zoom_start=11)
# 添加标记和路径
# enumerate():返回列表元素及其索引,索引从 1 开始,start=1
for idx, location in enumerate(simplified_locations.items(), start=1):
loc_name, coords = location
# folium.Marker():在地图上添加标记
# 弹出窗口:点击标记时显示的文本
# 图标:设置标记的外观
folium.Marker(
coords、
popup=f"{idx}.{loc_name}"、
icon=folium.DivIcon(
html=f""""
<div style="text-align: center;">
<div style="font-size: 12pt; font-weight: bold; color: black; background-color: white; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;">
{idx}
</div>
<div style="font-size: 10pt; font-weight: bold; color: navy; margin-top: 10px;">
{地点名称}
</div>
</div>"""
)
).add_to(m)
# 添加路线和距离/时间信息
for (loc1, loc2) in ordered_locations:
# folium.PolyLine():在两点之间画一条直线
# color:直线的颜色;weight:直线的粗细;opacity:直线的透明度
folium.PolyLine([simplified_locations[loc1], simplified_locations[loc2]], color="blue", weight=2.5, opacity=1).add_to(m)
# 获取距离和时间信息
distance_km, time_min = simplified_distances_and_times[(loc1, loc2)] 距离和时间信息
# 计算两点的中点坐标
mid_point = [(simplified_locations[loc1][0] + simplified_locations[loc2][0]) / 2、
(simplified_locations[loc1][1] + simplified_locations[loc2][1]) / 2]
在 # 的中点添加包含距离和时间信息的标记
folium.Marker(
mid_point、
icon=folium.DivIcon(
html=f'<div style="font-size: 10pt; font-weight: bold; color: red;">{距离_公里}公里,{时间_分钟}分钟</div>',
)
).add_to(m)
# 将地图保存为 HTML
# os.path.join():使用操作系统特有的路径分隔符生成文件路径
final_corrected_map_path = os.path.join(result_dir, 'ny_business_trip_final_corrected_map_with_distances.html')
m.save(final_corrected_map_path) # 将生成的地图保存为 HTML 文件
print(f "Map saved to: {final_corrected_map_path}") # 打印保存文件的路径





