如何从两个点数组创建Shapely LineString
我正在尝试把两个数组合并成一个单一的LineString对象。我试过很多种方法,但总是遇到这个错误:
>>> array = [(0,0),(1,0),(2,0),(3,0)][(1,3),(1.4,2),(2,0)]
TypeError: list indices must be integers, not tuple
## A
## \
## \
## X
## \
## \
## B-----C-----D-----F
## Test to Identify Junctions - Shared points where two or more lines intersect
def test_find_junctions(self):
g = PreserveTopology()
# LINE BCDF, AXD
array = [(0,0),(1,0),(2,0),(3,0)][(1,3),(1.4,2),(2,0)]
# LINE AXD
#array2 = [(1,3),(1.4,2),(2,0)]
array_as_linestring = LineString(array)
#array2_as_linestring = LineString(array2)
result = g.find_junctions_line(array_as_linestring)
assert_equal(result,(2,0))
2 个回答
2
看起来你有两条线段,所以你需要准备一个包含线段的列表,或者使用一个叫做多线段的结构。接着按照@David的建议来修复语法错误,你可以构建这两种结构中的任意一种:
from shapely.geometry import LineString, MultiLineString
from shapely.ops import cascaded_union
array = [[(0, 0), (1, 0), (2, 0), (3, 0)], [(1, 3), (1.4, 2), (2, 0)]]
ls = [LineString(ar) for ar in array]
mls = MultiLineString(array)
1
如果你想把你的列表变成一个数组,必须把它放在方括号里,然后用逗号把每个列表项分开。
array = [[(0,0),(1,0),(2,0),(3,0)],[(1,3),(1.4,2),(2,0)]]