Cara membuat Shapely LineString dari dua Poin

11

Jika memiliki dua poin, dari mana saya ingin membuat LineStringobjek lurus :

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

The Shapely pengguna untukLineString negara:

Urutan Pointinstance bukan parameter konstruktor yang valid. A LineStringdijelaskan oleh poin, tetapi tidak terdiri dari instance Point.

Jadi jika saya memiliki dua poin Adan B, apakah ada cara yang lebih pendek / lebih baik / lebih mudah untuk membuat garis ABdaripada tebakan "terbaik" saya saat ini ...

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

... yang terlihat agak rumit. Apakah ada cara yang lebih mudah?

Memperbarui

Dengan Shapely 1.3.2 yang dirilis hari ini, pernyataan di atas dari manual tidak lagi benar. Jadi mulai sekarang,

AB = LineString([A, B])

bekerja !

ojdo
sumber

Jawaban:

9

Sejak Shapely 1.3, Anda bisa membuat LineString dari Points:

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

Permintaan maaf atas kontradiksi dalam manual.

sgillies
sumber
Pada dua mesin (satu Linux, satu Windows), setelah memutakhirkan ke Shapely 1.3.1 ( shapely.__version__setuju) dan menempelkan kode Anda kata demi kata, saya menerima ValueError dari linestring.pyc # 228 tentang "Input [<...Point object at 0x..>, <...Point object at 0x...>]adalah bentuk yang salah untuk LineString". Apakah saya melewatkan sesuatu?
ojdo
Pembaruan: permintaan tarikan yang sesuai # 102 hanya di master, belum digabung ke cabang 1.3 dan karenanya tidak hadir dalam rilis 1.3.1 saat ini.
ojdo
Kamu benar. Saya baru saja memperbaikinya di github.com/Toblerity/Shapely/issues/130 dan mengunggah 1.3.2 ke PyPI.
sgillies
Periksa, itu berfungsi sekarang; terima kasih (lagi) untuk tindak lanjut yang cepat!
ojdo
3

Metode dasar adalah:

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

Anda juga bisa menggunakan slicing untuk menggabungkan daftar koordinat:

AB = LineString(A.coords[:] + B.coords[:])
gen
sumber