Estoy trabajando con google maps y polígonos, pero tengo que validar que los polígonos no se superponen entre sí.
Tengo una función que devuelve VERDADERO cuando un punto (lat, lng) está dentro de un polígono, pero no es suficiente para determinar si cada punto de un polígono está dentro de otro polígono.
¿Cualquier sugerencia?
google-maps
overlapping-features
Marcelo Magarzo
fuente
fuente
Respuestas:
JSFiddle Ejemplo
He creado un jsFiddle demostrando una solución a su problema usando el JavaScript topología Suite (JSTS) (JSTS) biblioteca.
Explicación
Hay dos pasos para este enfoque. El primer paso convierte sus geometrías de Google en expresiones de geometría WellKnownText (WKT) , que es un formato ampliamente compatible. El segundo paso usa JSTS para realizar una
geometry.intersects()
comparación JSTS de dos geometrías WKT.Para comprender realmente esto, necesitará tener una comprensión básica de WKT. Debido a que las geometrías de polígonos en su mapa de Google no tienen un formato ampliamente compatible, las convierto inmediatamente en geometrías WKT para que podamos trabajar con ellas en JSTS.
Para hacer esto fácilmente, utilicé la biblioteca Wicket . Por supuesto, siempre puede crear su propio método Google-Polygon-to-WKT, o puede usar uno que escribí alguna vez , o puede usar alguna otra solución que pueda encontrar. Personalmente, en estos días solo uso Wicket, que como puedes ver, es muy simple:
El siguiente es la carne y las papas: usar JSTS para tomar dos geometrías WKT y probar si se cruzan o no. Una vez más, confiando en la biblioteca, no hay mucho:
Cómo vinculé las bibliotecas en Fiddle
El violín vinculado anteriormente, y la solución que demostré requiere agregar dos bibliotecas de terceros a su proyecto: JSTS y Wicket. Obtener el código de sus respectivos Githubs e incorporarlo a su proyecto es un ejercicio diferente. Pero para el violín, me vinculé a esas bibliotecas haciendo referencia a ellas en un ejemplo JSTS existente que encontré publicado por Christopher Manning , así como a la página de demostración de Wicket . Básicamente, abrí las páginas, seleccioné "Ver código fuente" y seleccioné referencias relevantes a las dos bibliotecas. Estos fueron los puntos finales exactos de la biblioteca que utilicé:
fuente