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

Shapely转换多LineString为MultiLineString时触发坐标维度无效错误求助

解决Shapely创建MultiLineString时的"Invalid coordinate dimensionality"错误

问题出在你传入MultiLineString的参数类型不对——它需要的是Shapely LineString对象的列表,而不是包含WKT文本的字符串。直接把WKT字符串传进去,Shapely会把它当成坐标序列处理,自然会报错维度不对。

正确处理步骤:

  • 先将每个WKT格式的LineString字符串解析为Shapely的LineString对象
  • 再用这些对象构建MultiLineString
  • 最后使用ops.linemerge合并

修正后的代码:

from shapely import geometry
from shapely.ops import linemerge

# 拆分出每个LineString的WKT文本
wkt_lines = [
    'LINESTRING Z (106.859360409289 43.0466887338676 -90.3134785987513, 106.859493724627 43.0466608020767 -90.08756605785879)',
    'LINESTRING Z (106.860395798461 43.0474727994385 -90.70117552089501, 106.860856566526 43.0479333434232 -92.32231714313539)'
]

# 解析每个WKT为LineString对象
line_objects = [geometry.LineString(wkt) for wkt in wkt_lines]

# 创建MultiLineString
multi_line = geometry.MultiLineString(line_objects)

# 合并为单个LineString
merged_line = linemerge(multi_line)

针对原始长字符串输入的处理方案:

如果你的输入是包含多个WKT的长字符串,可以先做字符串拆分清理:

list_lines = '''[ LINESTRING Z (106.859360409289 43.0466887338676 -90.3134785987513,
        106.859493724627 43.0466608020767 -90.08756605785879),
        LINESTRING Z (106.860395798461 43.0474727994385 -90.70117552089501,
        106.860856566526 43.0479333434232 -92.32231714313539) ]'''

# 清理字符串并拆分出每个LineString的WKT
cleaned_content = list_lines.strip('[]').replace('\n', '').strip()
split_parts = [part.strip() for part in cleaned_content.split('LINESTRING Z') if part.strip()]
wkt_lines = [f'LINESTRING Z {part}' for part in split_parts]

# 后续解析和合并步骤与上面一致
line_objects = [geometry.LineString(wkt) for wkt in wkt_lines]
multi_line = geometry.MultiLineString(line_objects)
merged_line = linemerge(multi_line)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:18:34