Cómo crear una LineString bien formada desde dos puntos

11

Si tiene dos puntos, desde los cuales quiero crear un LineStringobjeto recto :

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

El manual bien proporcionado paraLineString estados:

Una secuencia de Pointinstancias no es un parámetro constructor válido. A LineStringse describe por puntos, pero no se compone de instancias de puntos.

Entonces, si tengo dos puntos Ay B, ¿hay una forma más corta / mejor / más fácil de crear una línea ABque mi "mejor" conjetura actual ...

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

... que se ve bastante complicado. hay una manera mas facil?

Actualizar

Con Shapely 1.3.2 lanzado hoy, la declaración anterior del manual ya no es correcta. Entonces de ahora en adelante,

AB = LineString([A, B])

funciona !

ojdo
fuente

Respuestas:

9

Desde Shapely 1.3, puede crear un LineString a partir de puntos:

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

Disculpas por la contradicción en el manual.

sgillies
fuente
En dos máquinas (una Linux, una Windows), después de actualizar a Shapely 1.3.1 ( shapely.__version__está de acuerdo) y pegar su código literalmente, recibo un ValueError de linestring.pyc # 228 sobre "La entrada [<...Point object at 0x..>, <...Point object at 0x...>]es la forma incorrecta para LineString". ¿Me he perdido algo?
ojdo
Actualización: la solicitud de extracción correspondiente # 102 solo está en el maestro, aún no se ha fusionado con la rama 1.3 y, por lo tanto, no está presente en la versión actual 1.3.1.
ojdo
Tienes razón. Acabo de arreglar esto en github.com/Toblerity/Shapely/issues/130 y subí 1.3.2 a PyPI.
sgillies
Comprueba, funciona ahora; gracias (de nuevo) por el rápido seguimiento!
Ojdo
3

El método base es:

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

También puede usar la división para concatenar las listas de coordenadas:

AB = LineString(A.coords[:] + B.coords[:])
gene
fuente