ValueError:坐标维度无效



我到处都找过这个错误。Shapely没有提供任何信息。

我想做的是将多个LineString转换为Multirestricting,并使用ops.linemerge 将其转换回一个LineString

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) ]'''
multi_line = geometry.MultiLineString(list_lines)
ValueError: Invalid coordinate dimensionality

实际上,这是字符串标记化的组合,然后转换为shapely行字符串对象的列表。最后从字符串的列表中构建MultiLineString

如果您想要一个字符串,最后一步是wkt对其进行编码。

import shapely.wkt, shapely.geometry
import re
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) ]"""
list_lines = list_lines.replace("n", "")

shapely.geometry.MultiLineString(
[
shapely.wkt.loads("LINESTRING Z " + t.strip(" []"))
for t in re.split("LINESTRING Z", list_lines)
if len(t.strip(" []")) > 0
]
).wkt

输出

'MULTILINESTRING Z ((106.859360409289 43.0466887338676 -90.3134785987513, 106.859493724627 43.0466608020767 -90.0875660578588), (106.860395798461 43.0474727994385 -90.701175520895, 106.860856566526 43.0479333434232 -92.3223171431354))'

最新更新