Как создать Shapely LineString из двух точек

11

Если есть две точки, из которых я хочу создать прямой LineStringобъект:

from shapely.geometry import Point, LineString
A = Point(0,0)
B = Point(1,1)

Руководство Shapely дляLineString государств:

Последовательность Pointэкземпляров не является допустимым параметром конструктора. A LineStringописывается точками, но не состоит из экземпляров Point.

Так что, если у меня есть две точки Aи Bесть ли более короткий / лучший / простой способ создания линии, ABчем мое текущее "лучшее" предположение ...

AB = LineString(tuple(A.coords) + tuple(B.coords))

... что выглядит довольно сложно. Есть ли более простой способ?

Обновить

В сегодняшнем выпуске Shapely 1.3.2 вышеприведенное утверждение из руководства больше не является правильным. Так что теперь,

AB = LineString([A, B])

работает !

ojdo
источник

Ответы:

9

Начиная с Shapely 1.3, вы можете создать LineString из точек:

>>> from shapely.geometry import Point, LineString
>>> LineString([Point(0, 0), Point(1, 1)]).wkt
'LINESTRING (0 0, 1 1)'

Извиняюсь за противоречие в руководстве.

sgillies
источник
На двух машинах (один Linux, одна Windows) после обновления до Shapely 1.3.1 ( shapely.__version__согласен) и дословного вставления кода я получаю ValueError из linestring.pyc # 228 о «Ввод [<...Point object at 0x..>, <...Point object at 0x...>]неправильной формы для LineString». Я что-то пропустил?
Ojdo
Обновление: соответствующий запрос извлечения # 102 только в master, еще не объединен с веткой 1.3 и, таким образом, отсутствует в текущем выпуске 1.3.1.
Ojdo
Вы правы. Я только что исправил это на github.com/Toblerity/Shapely/issues/130 и загрузил 1.3.2 в PyPI.
sgillies
Проверьте, это работает сейчас; спасибо (еще раз) за быстрое продолжение!
Ойдо
3

Базовый метод:

AB = LineString([(A.x,A.y), (B.x,B.y)])

Вы также можете использовать нарезку для объединения списков координат:

AB = LineString(A.coords[:] + B.coords[:])
ген
источник