Question

J'ai une liste de polygones galbées en Python. Pour savoir quel contact polygone est facile, en utilisant la méthode de .touches(). Cependant, je besoin de quelque chose qui retourne True que lorsque les polygones partagent plus d'un point (autrement dit partage une frontière). Permettez-moi d'illustrer:

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

Dans ce cas, polygone 0 et 1 part de deux points (une frontière entière). Polygone 1 et 2 parts d'un seul point. Ce que je suis à la recherche est une fonction qui me donnerait True, False, False dans l'exemple ci-dessus ou juste quelque chose qui retourne le nombre de points touchant, alors je peux faire le reste de moi-même logique.

Et bien sûr, toute solution qui n'implique pas itérer manuellement par tous les points est optimal - si je dois le faire, il va à l'encontre de l'objectif genre d'utilisation Shapely: -)

Était-ce utile?

La solution

Je ne l'ai pas utilisé bien faite, mais avez-vous essayé de voir si l'intersection des deux polygones est une ligne?

Autres conseils

Si vous voulez vraiment vérifier si deux polygones partagent plus que le nombre x de points, vous pouvez simplement faire ceci:

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

Mais je pense que ce que vous voudrez peut-être est de déterminer si deux bords sont colinéaires (et le chevauchement).

Cette mise en œuvre des suggestions d'Andrew est probablement ce que vous cherchez:

>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top