質問

私はPythonで格好の良いポリゴンのリストを持っています。 .touches()メソッドを使用して、容易なポリゴンタッチを見つけるために。しかし、私はリターンがTrueことを何かを必要とする場合にのみポリゴンシェアよりの(つまり株式ボーダーで)1点以上。私が説明しましょう。

In [1]: from shapely.geometry import Polygon
In [2]: polygons = [Polygon([(0,0),(0,1),(1,1),(1,0)]), Polygon([(1,0),(1,1),(2,1),(2,0)]), Polygon([(2,1),(2,2),(3,2),(3,1)])]

In [3]: polygons[0].touches(polygons[1])
Out[3]: True

In [4]: polygons[0].touches(polygons[2])
Out[4]: False

In [5]: polygons[1].touches(polygons[2])
Out[5]: True

この場合、ポリゴン0および1株の二点(全体のボーダー)。多角形1と2は、一点のみを共有しています。私が探しているし、私はロジックの残りの部分を自分で行うことができます私にTrue与える機能、False、上記の例ではFalseや感動ポイントの数を返すだけで何か、である。

そしてもちろん、すべてのポイントを反復手動で関与しない任意のソリューションが最適である - 私はそれを行うために必要がある場合は、その種類敗北の格好の良いを使用する目的: - )

役に立ちましたか?

解決

私は格好の良い使用していないが、2つのポリゴンの交差がラインであれば、あなたが見て試してみました?

他のヒント

あなたが本当に2つのポリゴンがあなたは、単にこれを行うことができますポイントのx数よりも多くの共有かどうかを確認したい場合:

p0,p1,p2 = polygons
x = 2
len(set(p1.boundary.coords).intersection(p2.boundary.coords))>=x

しかし、私は何をしたいことが二辺が同一直線上(重複)しているかどうかを判断することだと思います。

アンドリューの提案のこの実装は、あなたが探しているものはおそらくあります:

>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top