Je travaille avec Google Maps et les polygones, mais je dois valider que les polygones ne se chevauchent pas.
J'ai une fonction qui renvoie VRAI lorsqu'un point (lat, lng) se trouve à l'intérieur d'un polygone, mais ce n'est pas suffisant pour déterminer si chaque point d'un polygone se trouve à l'intérieur d'un autre polygone.
Toute suggestion?
google-maps
overlapping-features
Marcelo Magarzo
la source
la source
Réponses:
Exemple JSFiddle
J'ai créé un JSFiddle démontrant une solution à votre problème en utilisant la bibliothèque JavaScript Topology Suite (JSTS) (JSTS).
Explication
Cette approche comporte deux étapes. La première étape convertit vos géométries Google en expressions géométriques WellKnownText (WKT) , qui est un format largement pris en charge. La deuxième étape utilise JSTS pour effectuer une
geometry.intersects()
comparaison JSTS de deux géométries WKT.Pour vraiment comprendre cela, vous devrez avoir une compréhension de base de WKT. Étant donné que les géométries de polygones de votre Google Map ne sont pas largement prises en charge, je les convertis immédiatement en géométries WKT afin que nous puissions les utiliser dans JSTS.
Pour ce faire, j'ai utilisé la bibliothèque Wicket . Bien sûr, vous pouvez toujours lancer votre propre méthode Google-Polygon-to-WKT, ou vous pouvez en utiliser une que j'ai écrite une fois , ou vous pouvez utiliser une autre solution que vous pourriez trouver. Personnellement, ces jours-ci, j'utilise simplement Wicket, qui, comme vous pouvez le voir, est simple et méchant:
Vient ensuite la viande et les pommes de terre - en utilisant JSTS pour prendre deux géométries WKT et tester si elles se croisent ou non. Encore une fois, en s'appuyant sur la bibliothèque, il n'y a pas grand-chose:
Comment j'ai lié les bibliothèques dans le violon
Le violon lié ci-dessus et la solution que j'ai démontrée nécessitent l'ajout de deux bibliothèques tierces à votre projet - JSTS et Wicket. Obtenir le code de leurs Githubs respectifs et l'intégrer dans votre projet est un exercice différent. Mais pour le violon, j'ai lié à ces bibliothèques en les référençant dans un exemple JSTS existant que j'ai trouvé publié par Christopher Manning , ainsi que la propre page de démonstration de Wicket . Fondamentalement, j'ai ouvert les pages, sélectionné "View Source" et récupéré les références pertinentes aux deux bibliothèques. Ce sont des points de terminaison de bibliothèque exacts que j'ai utilisés:
la source