2つのポイントからShapely LineStringを作成する方法


11

2つのポイントがあり、そこから直線LineStringオブジェクトを作成する場合:

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

状態に関するShapelyマニュアルLineString

Pointインスタンスのシーケンスは、有効なコンストラクターパラメーターではありません。A LineStringはポイントで記述されますが、Pointインスタンスで構成されていません。

だから、2つのポイントABがあるAB場合、現在の「最良の」推測よりも短い/良い/簡単な線を作成する方法があります...

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

...かなり複雑に見えます。もっと簡単な方法はありますか?

更新

本日リリースされたShapely 1.3.2では、マニュアルの上記の記述は正しくありません。だからこれから

AB = LineString([A, B])

動作します!

回答:


9

Shapely 1.3以降、PointsからLineStringを作成できます。

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

マニュアルの矛盾をおologiesびします。


2台のマシン(1台はLinux、1台はWindows)で、Shapely 1.3.1にアップグレード(shapely.__version__同意)し、コードを逐語的に貼り付けた後、lineString.pyc#228から「入力[<...Point object at 0x..>, <...Point object at 0x...>]はLineStringの間違った形状です」というValueErrorを受け取ります。私は何かを見逃しましたか?
ojdo

更新:対応するプル要求#102はマスターにのみ存在し、ブランチ1.3にはまだマージされていないため、現在の1.3.1リリースには存在しません。
ojdo

あなたが正しい。これをgithub.com/Toblerity/Shapely/issues/130修正し、1.3.2をPyPIにアップロードしました。
14年

チェックしてください、今は動作します。迅速なフォローアップに感謝します!
ojdo

3

基本的な方法は次のとおりです。

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

スライスを使用して座標リストを連結することもできます。

AB = LineString(A.coords[:] + B.coords[:])
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.