3 年前的真实案例:Folium可视路径优化模型结果 在上一篇文章 《Folium 终极参数手册:完整 GIS 可视化指南》 ,是基于我 3 年前的一个路径优化项目总结而来——这个项目也是我从业务转向 IT、是我首次接触路径优化,并且首次用python独立 落地路径优化项目。

起初我用Folium构建了一个物流路径优化 Demo,用来和业务沟通模型效果并对模型进行优化,以今天的眼光看这可视化效果略显粗糙,但它帮助我快速实现了配送路径优化的原型,并赢得了宝贵的学习时间, 后续我给公司独立开发的智能路由优化系统便是基于该Demo 逐步升级而成。

一个不完美的开始,远比完美的等待更重要!
真实业务场景:路径优化的痛点与解决方案
挑战 1:配送路径规划难,业务如何验证优化方案?

痛点

  • 供应链优化模型提供的最优路径可能与业务经验不符,导致一线运营团队难以信任新方案。

  • 业务希望能直观对比优化前后的路径差异,判断方案是否合理。

Folium 解决方案

  • 使用PolyLine叠加优化前后路径,让业务团队直接对比新旧配送方案,理解路径调整的意义。

  • 结合高德 API 获取真实导航路径,避免纸上谈兵,让路径优化更符合实际运输情况。

技术实现:folium.PolyLine(locations=real_navigation_path, color="blue", weight=5, popup="优化后路径")
挑战 2:路径优化的收益难以量化,管理层难以感知价值

痛点

  • 业务和管理层难以直观看到路径优化后运输成本降低、行驶时间缩短等收益。

  • 传统表格数据不够直观,难以快速展现优化带来的价值。

Folium 解决方案

  • 在地图上叠加订单数据统计表,展示各条线路的订单数、载重利用率、运输成本,让管理层一目了然。

  • 利用DualMap左右对比优化前后方案,业务可以动态查看路径调整带来的运输距离变化,直观评估优化收益。

技术实现: branca.element.Template() 用于在地图上显示 订单数据统计表 plugins.DualMap() 创建 左右对比优化前后的地图
挑战 3:配送数据零散,业务缺乏整体感知

痛点

  • 业务需要综合考虑多个维度(工厂 → 配送中心 → 终端门店),但数据过于分散,缺乏整体感知能力。

  • 需要一种方式将供应链网络的核心节点、路径、订单数据直观呈现。

Folium 解决方案

  • 在地图上标记工厂、配送中心、终端门店,形成完整的供应链配送网络可视化。

  • 使用FeatureGroup对配送线路进行分层管理,业务团队可以按区域或配送模式筛选特定路线,清晰查看特定区域的配送情况。

技术实现: folium.Marker(location=[32.03, 116.13], icon=folium.Icon(color="red", icon="bank")) folium.FeatureGroup("线路 A").add_to(m)
挑战 4:业务如何确认路径优化后的合理性?

痛点

  • 业务团队担心优化后的路径调整会影响既有的配送习惯,导致执行困难。

  • 需要一种方式直观呈现配送的先后顺序,确保调整后路径仍符合实际业务需求。

Folium 解决方案

  • 使用BeautifyIcon在地图上标记配送顺序,让业务团队清晰看到优化后站点访问的先后顺序

  • 结合LayerControl图层管理,让业务可以自由切换不同路径,逐步适应优化方案的调整。

技术实现: plugins.BeautifyIcon(number=1, text_color="#00ABDC") 标记配送站点编号 folium.LayerControl(collapsed=False).add_to(m) 实现动态线路切换

Folium使用高德地图作为底图,更符合用户习惯

Folium 默认使用国外地图,但在国内,我们可以替换为高德地图,保证更真实的导航路线,这样就是我们熟悉的地图,更接地气。

folium.raster_layers.TileLayer(     tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',     attr="AutoNavi",     name="高德地图",     max_zoom=20,     overlay=False,     control=True, ).add_to(m)

应用场景

✅ 让地图更符合国内使用习惯

✅ 搭配高德 API获取真实导航路径

地图上标记配送网络,标记工厂、配送中心、终端门店

folium.Marker(     location=[32.2, 116.1],       icon=folium.Icon(color="red", icon="bank", prefix="fa"),       popup=folium.Popup("工厂") ).add_to(m)

应用场景: ✅工厂 → 配送中心 → 门店都可以用folium.Marker()标记,点击后弹出信息框,信息框可以承载业务很多细节信息。

地图上获取真实高德导航路线

供应链优化必须考虑真实路况,我们可以用高德 API 获取导航路径,然后用PolyLine()绘制。

folium.PolyLine(     locations=real_navigation_path,  # 真实导航路径     color="blue",     weight=5,     opacity=0.8,     popup="配送路线" ).add_to(m)

应用场景

确保配送路径符合实际导航

评估优化后的行驶距离 & 运输时间

标记配送顺序,根据顺序判断线路合理性

业务人员关心配送的先后顺序,我们用plugins.BeautifyIcon()添加编号:

icon_number = plugins.BeautifyIcon(     border_color="green",     text_color="#00ABDC",     number=1,  # 第 1 个配送点     inner_icon_style="margin-top:0;" ) folium.Marker(location=[31.5, 116.0], icon=icon_number).add_to(m)

应用场景

标记配送路线的顺序,减少混乱

快速识别不同门店的配送先后

分组管理配送线路,通过颜色等属性快速分辨不同类型

如果有不同的分组类型,我们可以使用FeatureGroup()分组管理:

line_A = folium.FeatureGroup("线路 A") m.add_child(line_A) line_B = folium.FeatureGroup("线路 B") m.add_child(line_B)

应用场景

支持按线路筛选 & 显示/隐藏特定线路

清晰管理不同区域的配送路线

在地图上加载表格统计信息,结果一目了然

如何让数据更直观?在地图上加载订单统计表!我们用HTML + CSS在地图上显示配送数据统计

from branca.element import MacroElement, Template table_html = """ position: fixed; bottom: 20px; left: 20px; background: white; padding: 10px;              border-radius: 8px; opacity: 0.9; z-index:9999; font-size:12px; ">     配送线路统计     ">                             1 线路 订单数 载重利用率 运输成本 线路 A 25 80% ¥5000 线路 B 30 85% ¥6000 """ macro = MacroElement() macro._template = Template(table_html) m.get_root().add_child(macro)

应用场景

在地图上实时查看订单数据

展示各线路的订单数量 & 运输成本

方案对比:优化前 vs. 优化后

在供应链优化中,我们需要对比优化前后的方案,看是否降低了配送成本。我们用plugins.DualMap()显示优化前后的路径

m = plugins.DualMap(location=[35.5427, 116.2317], zoom_start=5, tiles=None)

应用场景

左侧:显示优化前方案

右侧:显示优化后方案

添加图层控制,精细控制线路展示

多条配送线路时,我们需要“筛选开关”来控制显示/隐藏特定路线。

folium.LayerControl(collapsed=False).add_to(m)

应用场景

手动切换不同的配送线路

更清晰地分析每条线路的优化效果

保存地图

最终,我们可以将地图保存成 HTML,方便随时查阅:

m.save("配送网络优化.html")
路径优化 Folium 组件总结
功能Folium 组件应用场景创建地图folium.Map()

供应链网络可视化

使用高德地图folium.raster_layers.TileLayer()

国内地图兼容性更好

标记配送点folium.Marker()

显示工厂/仓库/门店

绘制运输路线folium.PolyLine()

展示真实导航路径

配送顺序编号plugins.BeautifyIcon()

标记配送顺序

对比优化前后方案plugins.DualMap()

评估优化效果

在地图上加载表格m.get_root().add_child(macro)

显示配送数据

如果你只需要一个离线可视化工具,Folium 版本完全够用。 如果你想打造更智能的优化系统,那就得关注我了,后续我除了分享供应链建模的知识外,还将分享我是怎么能够从业务成功转型背后的因素。 在后续的路径优化课程学习时,我们可以来复现这个案例。

THE END

近期活动