Tirage de rayon autour d'un point dans la carte de Google
Je suis en utilisant l'API Google Maps et ont ajouté des marqueurs. Maintenant, je veux ajouter un 10 milles de rayon autour de chaque marqueur, ce qui signifie un cercle qui se comporte de façon appropriée pendant le zoom. Je n'ai aucune idée de comment faire cela et il semble que ce n'est pas quelque chose de commun.
J'ai trouvé un exemple qui semble bon, et vous pouvez avoir un coup d'oeil à Google Latitude, trop. Là, ils utilisent des marqueurs avec un rayon, juste comme je les veux.
Mise à jour: Google Latitude utilise une image qui est mis à l'échelle, comment cela fonctionnerait-il?
- Dans le cas où c'est utile, un exemple de ceci peut être vu ici, avec une déplaçable rayon.
Vous devez vous connecter pour publier un commentaire.
À l'aide de l'API Google Maps V3, créer un Cercle d'objet, puis utilisez bindTo() pour l'associer à la position du Marqueur (car ils sont à la fois google.cartes.MVCObject cas).
Vous pouvez le faire paraître comme Google Latitude cercle en changeant la fillColor, strokeColor, strokeWeight etc (API complète).
Voir plus le code source et l'exemple des captures d'écran.
Il semble que la méthode la plus courante pour ce faire est de dessiner un GPolygon avec suffisamment de points pour simuler un cercle. L'exemple que vous l'avez mentionné utilise cette méthode. Cette page a un bon exemple de look pour la fonction drawCircle dans le code source.
En géométrie sphérique formes sont définies par des points, des lignes et des angles entre les lignes. Vous avez seulement ces valeurs rudimentaires de travailler avec.
Donc un cercle (en termes de forme projeté sur une sphère) est quelque chose qui doit être approchée à l'aide de points. Le plus de points, plus ça va ressembler à un cercle.
Cela dit, sachez que google maps est projection de la terre sur une surface plane (pensez à "dérouler" la terre et les étirements+aplatissement jusqu'à ce qu'il paraît "carré"). Et si vous avez un plat du système de coordonnées, vous pouvez dessiner des objets en 2D sur elle tout ce que vous voulez.
En d'autres termes, vous peut dessiner une échelle de vecteur cercle sur une carte google. Le hic, c'est que google maps n'est pas le donner à vous sortir de la boîte (ils veulent rester près de SIG valeurs est pragmatique possible). Ils vous donnent seulement GPolygon qui ils veulent vous utiliser pour se rapprocher d'un cercle. Cependant, ce mec n'a elle à l'aide de vml pour IE et svg pour les autres navigateurs (voir "l'ÉCHELLE des CERCLES" de la section).
Maintenant, pour en revenir à votre question à propos de Google Latitude à l'aide d'une échelle cercle image (et c'est probablement le plus utile pour vous): si vous connaissez le rayon du cercle ne changera jamais (par exemple, c'est toujours de 10 km autour d'un point), alors la solution la plus simple serait d'utiliser un GGroundOverlay, qui est simplement une url de l'image + le GLatLngBounds l'image représente. Le travail que vous avez à faire est de cacluate la GLatLngBounds représentant votre 10 milles de rayon. Une fois que vous avez cela, de l'api google maps poignées de redimensionnement de votre image que l'utilisateur effectue un zoom avant et arrière.
J'ai eu ce problème dans le passé, donc j'ai marqué ce discussion.
Pour résumer, vous pouvez:
Pour une API v3 solution, reportez-vous à:
http://blog.enbake.com/draw-circle-with-google-maps-api-v3
Il crée cercle autour de points et de montrer ensuite les marqueurs au sein et en dehors de la gamme de couleurs différentes. Ils calculent également dynamique rayon mais dans votre cas, le rayon est fixé de manière peut-être moins de travail.
Je viens d'écrire un article de blog qui traite exactement de cette, qui pourront vous être utiles:
http://seewah.blogspot.com/2009/10/circle-overlay-on-google-map.html
Fondamentalement, vous devez créer un GGroundOverlay avec le bon GLatLngBounds. Le problème est dans le coin sud-ouest à coordonner et à l'angle nord-est de coordonner de cet imaginaire carré (le GLatLngBounds) de délimitation de ce cercle, basée sur le rayon souhaité. Le calcul est assez compliqué, mais vous pouvez tout simplement se référer à getDestLatLng fonction dans le blog. Le reste devrait être assez simple.