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

如何在Folium中绘制不与其他PolyLine重叠的折线?

解决方案

Folium本身没有内置的折线去重功能,要实现只绘制不重叠的折线,得先对位置数据做预处理去重,再传入Folium绘制。以下是具体实现思路和代码:

步骤1:预处理数据,过滤重复线段

每条折线本质是相邻两个坐标点组成的线段,我们可以给每条线段生成唯一标识——把两个端点按固定规则(比如经纬度大小排序)转换成元组,用集合自动过滤重复项,这样同一段路(包括往返)只会被保留一次。

步骤2:基于去重后的线段绘制地图

遍历去重后的线段集合,逐个添加到地图中即可。

修改后的完整代码

import folium
import pandas as pd

map = folium.Map(location=[coord1, coord2])
seen_segments = set()  # 存储已出现的线段
count = 0

# 注意循环范围要减1,避免索引越界
for i in range(len(df)-1):
    # 获取当前点和下一个点的坐标
    point1 = (df.iloc[i]['lat'], df.iloc[i]['lon'])
    point2 = (df.iloc[i+1]['lat'], df.iloc[i+1]['lon'])
    
    # 对端点排序,确保A→B和B→A被判定为同一段
    sorted_segment = tuple(sorted((point1, point2)))
    
    # 只绘制未出现过的线段
    if sorted_segment not in seen_segments:
        folium.PolyLine(
            locations=[point1, point2],
            no_clip=True,
            smooth_factor=1
        ).add_to(map)
        seen_segments.add(sorted_segment)
        count += 1
        if count > 10000:
            break

map.save('test.html')

补充说明

  • 如果需要区分道路的往返方向,去掉sorted()即可,直接用(point1, point2)作为线段标识。
  • 针对数百万条数据,建议先过滤掉连续重复的坐标点(比如连续几行都是同一个位置),能大幅减少计算量。
  • 要是需要更精准的街道级去重(忽略GPS微小偏移),可以考虑把坐标匹配到对应街道的路径ID,但这需要额外的地理编码处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:40:11