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

基于共享属性值合并sf对象中的GeoJSON线几何(条件st_combine)

按属性合并街道线几何解决方案(Geopandas)

核心思路:分组聚合替代手动循环

不用纠结st_combine的问题,直接用Geopandas的dissolve()方法,就能按街道名(MKN列)批量合并同属性的LINESTRING,同时处理长度字段:

1. 基础合并代码

import geopandas as gpd

# 读取街道GeoJSON
streets_gdf = gpd.read_file("你的街道数据.geojson")

# 按MKN分组合并几何+处理长度
merged_streets = streets_gdf.dissolve(
    by="MKN",
    aggfunc={"Shape_Length": "sum"},  # 手动求和各小段长度
    as_index=False
)

2. Shape_Length的处理方式

  • 要总长度就用sum聚合,这是最准确的(原小段长度之和=整条街道长度)
  • 不需要的话可以直接忽略这个字段,后续如果需要重新计算,用merged_streets["new_length"] = merged_streets.geometry.length即可(和求和值可能有细微误差,但不影响分析)
  • 绝对不要保留原单个小段的Shape_Length,分组后这个值没有意义

3. 把MultiLineString转成连续LINESTRING

dissolve()会把同街道的小段合并成MultiLineString,如果这些线段本来是连通的,用line_merge()转成单条LINESTRING:

merged_streets["geometry"] = merged_streets.geometry.apply(
    lambda x: x.line_merge() if x.type == "MultiLineString" else x
)

4. 和交通事件数据关联

合并完街道数据后,直接用属性关联交通事件CSV:

import pandas as pd

events_df = pd.read_csv("交通事件数据.csv")
# 用标准化后的street列和MKN列关联
final_data = pd.merge(events_df, merged_streets, left_on="street", right_on="MKN", how="left")

踩坑提醒

  • 确保street和MKN列的街道名完全一致(你已经做过标准化,这步没问题)
  • 如果合并后还是MultiLineString,说明原数据中同街道的小段本来就不连通,不用强行转,不影响后续可视化
  • 90万行事件数据关联时,属性匹配比空间join效率高很多,就用上面的merge就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:45:09