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

Geopandas+Folium标记聚类异常:仅显示多边形无点位的解决方法

问题排查与解决方案

1. 检查并修正坐标参考系(CRS)

folium地图默认使用EPSG:4326(WGS84,经纬度坐标),如果原始坐标是其他投影格式(如平面坐标),必须转换到4326才能被folium识别:

import geopandas as gpd
from shapely.geometry import Point
import folium
from folium.plugins import MarkerCluster

# 假设你的DataFrame为df,包含lon(经度)、lat(纬度)列
# 正确创建GeoDataFrame并指定CRS
gdf = gpd.GeoDataFrame(
    df,
    geometry=gpd.points_from_xy(df.lon, df.lat),
    crs="EPSG:4326"
)

# 若原始坐标CRS不是4326,执行转换
# gdf = gdf.to_crs("EPSG:4326")

2. 确认GeoDataFrame的geometry列有效性

检查是否生成了正确的Point对象,避免经纬度顺序颠倒(folium要求纬度在前、经度在后):

# 查看前几行geometry,确认格式为Point(lon, lat)
print(gdf.head())

# 若坐标顺序颠倒,修正如下:
# gdf = gpd.GeoDataFrame(
#     df,
#     geometry=gpd.points_from_xy(df.lat, df.lon),
#     crs="EPSG:4326"
# )

3. 正确使用MarkerCluster实现点位聚合

确保聚合插件初始化正确,且点位图层在多边形图层之后添加(避免被覆盖):

# 用数据中心坐标初始化地图
m = folium.Map(location=[gdf.geometry.y.mean(), gdf.geometry.x.mean()], zoom_start=12)

# 先添加建筑多边形图层(可设置透明度避免遮挡)
# folium.GeoJson(
#     buildings_gdf,
#     style_function=lambda x: {"fillOpacity": 0.3, "color": "gray"}
# ).add_to(m)

# 添加聚合标记集群
marker_cluster = MarkerCluster().add_to(m)
for idx, row in gdf.iterrows():
    folium.Marker(
        location=[row.geometry.y, row.geometry.x],
        popup=f"数量: {row.get('count', 1)}"  # 替换为你的计数列名
    ).add_to(marker_cluster)

# 保存并查看地图
m.save("aggregated_map.html")

4. 排查预聚合逻辑问题(若提前做空间聚合)

如果是先对点位做空间聚合(如缓冲区聚合),确保聚合后的GeoDataFrame包含有效geometry和计数:

# 示例:用100米缓冲区聚合点位(需先转投影CRS)
gdf_proj = gdf.to_crs("EPSG:3857")  # 墨卡托投影,单位为米
gdf_proj["buffer"] = gdf_proj.geometry.buffer(100)
# 按缓冲区聚合并计数
agg_gdf = gdf_proj.dissolve(by="buffer", aggfunc={"id": "count"}).rename(columns={"id": "point_count"})
agg_gdf = agg_gdf.to_crs("EPSG:4326")  # 转回经纬度坐标

# 添加聚合后的圆形标记
for idx, row in agg_gdf.iterrows():
    folium.CircleMarker(
        location=[row.geometry.centroid.y, row.geometry.centroid.x],
        radius=10,
        color="red",
        fill=True,
        fill_color="red",
        popup=f"聚合数量: {row.point_count}"
    ).add_to(m)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:10:18