Tengo una lista de polígonos bien formados en Python. Para saber qué polígono táctil es fácil, utilice el método .touches(). Sin embargo, necesito algo que devuelva verdadero solo cuando los polígonos compartan más que un punto (en otras palabras, comparte un borde). Permítanme ilustrar:Polígono toca en más de un punto con shapely
IPython 0.10 -- An enhanced Interactive Python.
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
En este caso, polígono 0 y 1 comparte dos puntos (una frontera entera). Los polígonos 1 y 2 solo comparten un punto. Lo que estoy buscando es una función que me daría True, False, False en el ejemplo anterior o simplemente algo que devuelve el número de puntos de contacto, luego puedo hacer el resto de la lógica yo mismo.
Y, por supuesto, cualquier solución que no implique manualmente iteración a través de todos los puntos es óptima - si necesito hacer eso, que tipo de derrota el propósito de usar :-) bien formada
Gracias de antemano!
compartir dos puntos no es equivalente a que comparten una frontera - es sólo cierto si los puntos son adyacentes en ambos polígonos. –
@andrew cooke: Buen punto. Tendré que considerar eso. – XerXes