Как создать 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))

person user14696    schedule 28.07.2014    source источник


Ответы (2)


Вы должны заключить свой список в квадратные скобки, если хотите, чтобы это был массив, а затем разделить списки запятыми.

array = [[(0,0),(1,0),(2,0),(3,0)],[(1,3),(1.4,2),(2,0)]]
person David Greydanus    schedule 28.07.2014

Похоже, у вас есть два линейных сегмента, поэтому вам нужен либо список геометрий LineString, либо геометрия MultiLineString. Продолжая исправление синтаксической ошибки @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)
person Mike T    schedule 28.07.2014
comment
определенно не хочу MultiLinestring... но исправление синтаксиса LineString + было победителем. Спасибо. - person user14696; 28.07.2014