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
相关产品推荐
相关产品推荐

