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

如何在Folium中渲染超1000个点位?15000点渲染失败求助

解决Folium渲染超1000个点位无显示的问题

嘿,我之前也遇到过Folium加载大量点位时“罢工”的情况,结合经验给你分析下原因和可行的解决方案:

为什么超过1000个点就无法渲染?

Folium是靠生成HTML+JavaScript来渲染地图的,当点位数量飙升到15000时,主要会触发这几个问题:

  • 浏览器扛不住:一次性渲染上万个Marker会让JS引擎过载,浏览器可能直接卡住甚至跳过渲染流程
  • HTML文件太“胖”:每个Marker都会生成一堆代码,15000个点会让HTML文件体积暴涨,加载超时或者解析失败
  • 默认渲染方式效率太低:普通Marker是逐个添加渲染,没有做任何聚合或轻量化处理

具体解决方法,按优先级排序

1. 用MarkerCluster做点位聚合(最推荐)

这是处理海量点位的标准操作,把密集的点自动聚合成集群,缩放地图时再展开细节,既能减轻浏览器压力,用户体验也更好。
示例代码:

import folium
from folium.plugins import MarkerCluster

# 初始化地图(替换成你的中心坐标)
m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

# 创建一个聚合器,把所有Marker都加进去
marker_cluster = MarkerCluster().add_to(m)

# 循环添加15000个点位(替换成你的真实坐标数据)
for i in range(15000):
    lat = 39.9042 + (i % 100)/1000
    lon = 116.4074 + (i % 100)/1000
    folium.Marker([lat, lon]).add_to(marker_cluster)

# 保存地图
m.save('cluster_map.html')

2. 用CircleMarker替代普通Marker

CircleMarker比默认的Marker轻量化很多,渲染效率更高,适合不需要自定义图标的大量点位:

import folium

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)

for i in range(15000):
    lat = 39.9042 + (i % 100)/1000
    lon = 116.4074 + (i % 100)/1000
    folium.CircleMarker(
        location=[lat, lon],
        radius=2,  # 半径越小,渲染压力越低
        color='darkblue',
        fill=True,
        fill_color='darkblue',
        fill_opacity=0.5
    ).add_to(m)

m.save('circle_map.html')

3. 用GeoJson层批量加载点位

如果你的点位是结构化数据,用GeoJson格式批量加载比逐个添加Marker效率高太多,底层会用更优化的渲染逻辑:

import folium
import json

# 构造GeoJson格式的点位数据(替换成你的真实数据)
geojson_data = {
    "type": "FeatureCollection",
    "features": []
}

for i in range(15000):
    lat = 39.9042 + (i % 100)/1000
    lon = 116.4074 + (i % 100)/1000
    feature = {
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [lon, lat]  # 注意GeoJson是[lon, lat]顺序!
        },
        "properties": {"id": i}
    }
    geojson_data['features'].append(feature)

m = folium.Map(location=[39.9042, 116.4074], zoom_start=10)
# 添加GeoJson层,自定义点样式
folium.GeoJson(
    geojson_data,
    marker=folium.CircleMarker(radius=2, color='red', fill_opacity=0.6)
).add_to(m)

m.save('geojson_map.html')

4. 浏览器端小技巧

  • 关闭其他无关标签页,给浏览器腾内存
  • 用Chrome、Firefox这类现代浏览器,别用老旧的IE
  • 生成HTML后,打开时多等几秒,大文件加载需要时间,别以为没反应就关掉

额外小提示

如果你的点位数据是从CSV或数据库来的,先做个数据清洗:去掉重复坐标、过滤掉不需要的点位,也能有效减轻渲染压力哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:28:47