You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Folium地图图层内实现路线时长选项的勾选功能

嘿,我来帮你搞定这个子图层和时长勾选的需求!

咱们可以利用folium的嵌套FeatureGroup来实现父图层下的子图层控制——每个主交通方式(car/metro/bike)作为父组,内部包含两个子组:一个用来展示路线,另一个展示对应的时长标注。这样用户就能在左侧控制面板里展开每个交通方式,单独勾选是否显示路线或时长。

具体实现步骤
  • 为每个交通方式创建父FeatureGroup,作为子图层的容器
  • 在父组内分别创建路线子FeatureGroup和时长子FeatureGroup
  • 将路线、时长内容分别添加到对应的子组中
  • 最后把父组添加到地图,LayerControl会自动识别嵌套结构
代码示例
import folium

# 初始化地图(这里用巴黎坐标做示例,你可以换成自己的目标区域)
myMap = folium.Map(location=[48.8566, 2.3522], zoom_start=12)

# ---------------------- 汽车交通组(父组) ----------------------
# 创建父FeatureGroup,作为汽车路线和时长的容器
parent_car = folium.FeatureGroup(name="汽车", overlay=False, control=True)
parent_car.add_to(myMap)

# 1. 汽车路线子图层
car_route_layer = folium.FeatureGroup(name="汽车路线", overlay=True, control=True)
# 这里添加你的汽车路线内容,比如PolyLine
# folium.PolyLine(locations=car_route_coords, color="red").add_to(car_route_layer)
car_route_layer.add_to(parent_car)

# 2. 汽车时长标注子图层
car_duration_layer = folium.FeatureGroup(name="汽车时长", overlay=True, control=True)
# 这里添加你的时长标注,比如带时长弹窗的Marker,或者路线上的文本
# folium.Marker(location=[48.85, 2.35], popup="时长:15分钟").add_to(car_duration_layer)
car_duration_layer.add_to(parent_car)

# ---------------------- 地铁交通组(同理) ----------------------
parent_metro = folium.FeatureGroup(name="地铁", overlay=False, control=True)
parent_metro.add_to(myMap)

metro_route_layer = folium.FeatureGroup(name="地铁路线", overlay=True, control=True)
# 添加地铁路线内容
# folium.PolyLine(locations=metro_route_coords, color="blue").add_to(metro_route_layer)
metro_route_layer.add_to(parent_metro)

metro_duration_layer = folium.FeatureGroup(name="地铁时长", overlay=True, control=True)
# 添加地铁时长标注
# folium.Marker(location=[48.86, 2.36], popup="时长:20分钟").add_to(metro_duration_layer)
metro_duration_layer.add_to(parent_metro)

# ---------------------- 自行车交通组(同理) ----------------------
parent_bike = folium.FeatureGroup(name="自行车", overlay=False, control=True)
parent_bike.add_to(myMap)

bike_route_layer = folium.FeatureGroup(name="自行车路线", overlay=True, control=True)
# 添加自行车路线内容
# folium.PolyLine(locations=bike_route_coords, color="green").add_to(bike_route_layer)
bike_route_layer.add_to(parent_bike)

bike_duration_layer = folium.FeatureGroup(name="自行车时长", overlay=True, control=True)
# 添加自行车时长标注
# folium.Marker(location=[48.84, 2.34], popup="时长:30分钟").add_to(bike_duration_layer)
bike_duration_layer.add_to(parent_bike)

# 添加图层控制器,自动渲染嵌套的子菜单
folium.LayerControl(collapsed=False).add_to(myMap)

# 保存地图到本地
myMap.save("employee_route_map.html")
关键细节说明
  • 父组设置overlay=False是为了确保默认不叠加显示,而子组设置overlay=True可以让路线和时长内容正常叠加在地图上
  • LayerControl会自动识别FeatureGroup的嵌套关系,在左侧面板生成可展开的菜单,用户能单独勾选路线或时长
  • 时长标注的实现可以灵活调整:比如用folium.plugins.PolyLineTextPath在路线上直接嵌入时长文本,或者用自定义HTML弹窗,完全贴合你的需求

这样改完之后,用户就能在左侧控制面板里,展开每个交通方式选项,自由控制路线和时长的显示/隐藏啦!

内容的提问来源于stack exchange,提问作者Emile Joudet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:19:29