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 !

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.


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[:])
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.