Un Javascript Google Maps v3-extension pour le Polygone de la classe de détecter si oui ou non un point réside à l'intérieur...
Pour une raison étrange, cela fonctionne, mais je n'ai jamais été en mesure d'obtenir de Google containsLocation() fonctionne..... Vous aurez besoin de la géométrie de la bibliothèque de l'obtenir pour fonctionner. Exemple: ?sensor=false&bibliothèques=le dessin,la géométrie J'ai ajouté de la géométrie de la bibliothèque de Google, mais cela ne fonctionne toujours pas pour moi
Google fournit leur propre mise en œuvre au sein de la géométrie de la bibliothèque, dont je n'ai pas vérifié, mais je suppose qu'couvre le bord de cas discutés dans les autres réponses.
Chaque méthode décrite ici ne parvient pas, d'une manière ou d'une autre.
Les méthodes donné par Andrei I et Natim ne pas envisager de polygones avec des géodésiques sur les bords. Ces méthodes ont également ne parviennent pas à réaliser que non géodésique de bord de Google Maps est seulement en ligne droite à l'intérieur de la projection de Mercator. Ces méthodes supposent que les sommets sont sur une distance égale grille de latitude/longitude, où un degré de latitude est égale à un degré de longitude est. Comme résultat de cette erreur, ces méthodes indiquent un point est à l'extérieur du polygone, tout en étant affiché à l'intérieur pour certains cas. C'est facile à observer pendant de longues non-vertical/non-bords horizontaux. Pour résoudre ce problème, tous les points doivent d'abord être convertis à partir de la Latitude, de la Longitude de coordonnées X, Y dans la projection de Mercator. Voici la méthode pour convertir les coordonnées lat/lon x/y dans Mercator. (Manque de précision) Ligne de Rhumb de navigation peut être utilisé comme une base pour une méthode alternative. Google Maps version expérimentale 3.10 implémente cette méthode.
La méthode mentionnée par Paul Gibbs, swapnil udare, et Adi Lester de considérer géodésique bords, mais aussi de Google Maps v3.9 il utilise la même méthode mentionnée ci-dessus pour les non-géodésique de polygones. Comme telle, elle souffre également du même problème décrit ci-dessus.
mise à Jour - Le problème avec Google Maps a été corrigé dans le courant de la version expérimentale de Google Maps v3.10.
Créer un élément canvas.
Dessine un polygone avec de multiples points d'extrémité à l'aide de moveTo(),lineTo() méthodes.
Vérifier si un point(x,y) se trouve à l'intérieur du polygone à l'aide de isPointInPath() la méthode.
<canvasid="canvas"></canvas>
//x,y are coordinate of the point that needs to be tested
//coordinates contains all endpoint of a polygon in format of x1,y1,x2,y2,x3,y3....
function isPointInPolygon(x, y, coordinates) {
var ctx = canvas.getContext("2d");
var coords = coordinates.split(',');
if (coords != null && coords.length > 4) {
ctx.beginPath();
ctx.moveTo(coords[0], coords[1]);
for (j = 2; j < coords.length; j++) {
ctx.lineTo(coords[j], coords[j + 1]);
j++;
}
ctx.closePath();
if (ctx.isPointInPath(x, y))
return true;
else
return false;
}
return false;
}
L'affiche a été de demander à propos de Polygones sur Google maps. Navigateurs ne supportent pas les canevas et de la méthode ci-dessus suppose une norme de X, Y de la grille. Si l'un est dessin sur une toile, la méthode ci-dessus est parfait sinon c'est juste du gaspillage. Les autres méthodes mentionnées ci-dessus peut calculer ce sans la surcharge de dessin sur une toile. La meilleure méthode que de Google maps v3.10 est google.cartes.la géométrie.poly.containsLocation() car il traite de la géodésique de polygones, ainsi que mercator polygones. Je suis d'accord. Il n'est pas exactement la réponse à cette question, mais peut aider les gens qui travaillent en html5, de l'environnement et à la fin de ce post à détecter point dans le polygone. Je suis venu sur ce post et essayé de mettre en œuvre tous les algorithmes, mais rien n'a fonctionné parfaitement. En gros, j'ai mis en place une carte personnalisée sur un plan d'étage de l'image à l'aide de la toile. J'ai eu pour afficher les info-bulles sur les différentes partie de l'image et imiter html de l'image de la carte de la fonctionnalité.
Autre solution: Google-Maps-Point-de-Polygone
Vous aurez besoin de la géométrie de la bibliothèque de l'obtenir pour fonctionner. Exemple: ?sensor=false&bibliothèques=le dessin,la géométrie
J'ai ajouté de la géométrie de la bibliothèque de Google, mais cela ne fonctionne toujours pas pour moi
OriginalL'auteur Andrei I
Vous pouvez l'utiliser dans google map V3:-
polygones d'un objet retourné par la fonction après polygoncomplete.
de référence par https://developers.google.com/maps/documentation/javascript/reference
OriginalL'auteur swapnil udare
Google fournit leur propre mise en œuvre au sein de la géométrie de la bibliothèque, dont je n'ai pas vérifié, mais je suppose qu'couvre le bord de cas discutés dans les autres réponses.
Voir le containsLocation méthode décrit ici. Notez que vous devrez l'importation de la géométrie de la bibliothèque de manière explicite, comme il n'est pas dans la carte de base de l'API
OriginalL'auteur Paul Gibbs
J'ai utilisé cet algorithme pour détecter que le point est à l'intérieur du polygone : http://alienryderflex.com/polygon/
J'ai ajouté une nouvelle méthode
contains
à l'intérieur du Polygone :var x = point.getPosition().lng();
etvar y = point.getPosition().lat();
OriginalL'auteur Natim
Chaque méthode décrite ici ne parvient pas, d'une manière ou d'une autre.
Les méthodes donné par Andrei I et Natim ne pas envisager de polygones avec des géodésiques sur les bords. Ces méthodes ont également ne parviennent pas à réaliser que non géodésique de bord de Google Maps est seulement en ligne droite à l'intérieur de la projection de Mercator. Ces méthodes supposent que les sommets sont sur une distance égale grille de latitude/longitude, où un degré de latitude est égale à un degré de longitude est. Comme résultat de cette erreur, ces méthodes indiquent un point est à l'extérieur du polygone, tout en étant affiché à l'intérieur pour certains cas. C'est facile à observer pendant de longues non-vertical/non-bords horizontaux.
Pour résoudre ce problème, tous les points doivent d'abord être convertis à partir de la Latitude, de la Longitude de coordonnées X, Y dans la projection de Mercator. Voici la méthode pour convertir les coordonnées lat/lon x/y dans Mercator.(Manque de précision) Ligne de Rhumb de navigation peut être utilisé comme une base pour une méthode alternative. Google Maps version expérimentale 3.10 implémente cette méthode.La méthode mentionnée par Paul Gibbs, swapnil udare, et Adi Lester de considérer géodésique bords, mais aussi de Google Maps v3.9 il utilise la même méthode mentionnée ci-dessus pour les non-géodésique de polygones. Comme telle, elle souffre également du même problème décrit ci-dessus.
mise à Jour - Le problème avec Google Maps a été corrigé dans le courant de la version expérimentale de Google Maps v3.10.
OriginalL'auteur deAtog
Pas besoin d'algorithmes complexes, j'ai été en mesure de réaliser cela à l'aide de isPointInPath() la méthode de canvas html.
http://www.w3schools.com/tags/canvas_ispointinpath.asp
Créer un élément canvas.
Dessine un polygone avec de multiples points d'extrémité à l'aide de moveTo(),lineTo() méthodes.
Vérifier si un point(x,y) se trouve à l'intérieur du polygone à l'aide de isPointInPath() la méthode.
Je suis d'accord. Il n'est pas exactement la réponse à cette question, mais peut aider les gens qui travaillent en html5, de l'environnement et à la fin de ce post à détecter point dans le polygone. Je suis venu sur ce post et essayé de mettre en œuvre tous les algorithmes, mais rien n'a fonctionné parfaitement. En gros, j'ai mis en place une carte personnalisée sur un plan d'étage de l'image à l'aide de la toile. J'ai eu pour afficher les info-bulles sur les différentes partie de l'image et imiter html de l'image de la carte de la fonctionnalité.
OriginalL'auteur love kumar