İki Noktadan Düzgün LineString Oluşturma


11

Düz bir LineStringnesne oluşturmak istediğim iki nokta varsa :

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

İçin Düzgün kılavuzuLineString devletler:

Bir Pointörnek sırası geçerli bir kurucu parametresi değildir. A LineString, noktalarla tanımlanır, ancak Nokta örneklerinden oluşmaz.

Eğer iki puanım varsa Ave şu anki "en iyi" tahminimden Bbir çizgi oluşturmanın daha kısa / daha iyi / daha kolay bir yolu varsa AB...

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

... oldukça karmaşık görünüyor. Daha kolay bir yol var mı?

Güncelleme

Bugün yayınlanan Shapely 1.3.2 ile, el kitabındaki yukarıdaki ifade artık doğru değil. Bundan böyle,

AB = LineString([A, B])

çalışır !

Yanıtlar:


9

Shapely 1.3'ten beri, Noktalardan bir LineString oluşturabilirsiniz:

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

Kılavuzdaki çelişki için özür dileriz.


İki makinede (bir Linux, bir Windows), shapely.__version__Shapely 1.3.1'e yükselttikten ( katılıyorum) ve kod kelimelerinizi yapıştırdıktan sonra, linestring.pyc # 228'den "Girdi [<...Point object at 0x..>, <...Point object at 0x...>]bir LineString için yanlış şekil " hakkında bir ValueError alıyorum . Bir şey kaçırdım mı?
ojdo

Güncelleme: karşılık gelen çekme talebi # 102 sadece ana yapıdadır, henüz şube 1.3 ile birleştirilmemiştir ve bu nedenle mevcut 1.3.1 sürümünde mevcut değildir.
ojdo


Kontrol edin, şimdi çalışıyor; hızlı takip için teşekkürler (tekrar)!
ojdo

3

Temel yöntem:

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

Koordinat listelerini birleştirmek için dilimlemeyi de kullanabilirsiniz:

AB = LineString(A.coords[:] + B.coords[:])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.