8

PythonのShapelyポリゴンのリストがあります。この方法を使用して、どのポリゴンタッチが簡単かを確認します.touches()Trueただし、ポリゴンが複数のポイントを共有している(つまり、境界線を共有している)場合にのみ返されるものが必要です。説明させてください:

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は2つのポイント(境界全体)を共有します。ポリゴン1と2は1つのポイントのみを共有します。私が探しているのは、上記の例で私に、、、または単にタッチポイントの数を返す何かを与える関数であり、Trueそれから私は残りのロジックを自分で行うことができます。FalseFalse

そしてもちろん、すべてのポイントを手動で反復することを含まないソリューションが最適です-それを行う必要がある場合、Shapelyを使用する目的をやや無効にします:-)

4

2 に答える 2

10

2つのポリゴンがxを超えるポイントを共有しているかどうかを本当に確認したい場合は、次のようにするだけです。

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

しかし、あなたが望むかもしれないのは、2つのエッジが同一線上にある(そして重なり合っている)かどうかを判断することだと思います。

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

>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False
于 2009-12-25T22:59:14.463 に答える
6

形を整えて使用したことはありませんが、2つのポリゴンの交点が線であるかどうかを確認してみましたか?

于 2009-12-25T11:21:54.917 に答える