skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

dimanche 28 novembre 2010

Tracer une zone circulaire sur une carte Google

Publié par Infinite Loop, à 11 h 30 1 commentaire

Le restaurant qui prépare votre poutine préférée offre la livraison dans un rayon restreint de 3 kilomètres ? Vous voulez illustrer graphiquement la zone sur une carte Google ? Voici comment faire.

Tout d'abord, si c'est votre première expérience avec Google Maps, référez-vous à mon billet qui explique comment intégrer une carte Google à son site (en obtenant une clé d'API gratuite).

Incluez un conteneur HTML pour la carte en indiquant un ID unique qui pourra être utilisé dans la programmation JavaScript :

<div id="map" style="width:800px;height:600px"></div>
Ensuite, déclarez la carte, les coordonnées du point central du cercle et indiquez le rayon. À l'aide de votre ami jQuery, appelez la fonction principale au chargement de la page (sinon, faites-le dans l'événement onLoad de la balise body).

Le code JavaScript :
var map;
var center = new GLatLng(45.563234,-73.65614);
var radius = 3; // km

$(document).ready(loadMap);

function loadMap() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.enableScrollWheelZoom();
map.setCenter(center, 13); // 13 = niveau de zoom

var centerMarker = new GMarker(map.getCenter());
map.addOverlay(centerMarker);

var points = new Array();

// rayon de la Terre = 6378.8 km
var d = radius/6378.8;

// radians
var lat1 = (Math.PI/180)* center.lat();
var lng1 = (Math.PI/180)* center.lng();

var bounds = new GLatLngBounds();

// calculer les 360 points du cercle
for(var i=0 ; i<=360 ; i++ ){
var tc = (Math.PI/180)*i;
var y = Math.asin(Math.sin(lat1)*Math.cos(d)+Math.cos(lat1)*Math.sin(d)*Math.cos(tc));
var dlng = Math.atan2(Math.sin(tc)*Math.sin(d)*Math.cos(lat1),Math.cos(d)-Math.sin(lat1)*Math.sin(y));
var x = ((lng1-dlng+Math.PI) % (2*Math.PI)) - Math.PI ;
var point = new GLatLng(parseFloat(y*(180/Math.PI)),parseFloat(x*(180/Math.PI)));

points.push(point);
bounds.extend(point);
}

if (d < 1.5678565720686044) {
circle = new GPolygon(points, '#ACACAC', 2, 1, '#ACACAC', 0.25);
}
else {
circle = new GPolygon(points, '#ACACAC', 2, 1);
}

map.addOverlay(circle);
map.setZoom(map.getBoundsZoomLevel(bounds));
}
}
La seule difficulté réside dans le fait qu'on doit utiliser un polygone et calculer avec une formule mathématique chaque point du cercle (1 par degré). Le résultat obtenu est réussi:



Pour en revenir au restaurant que je mentionnais, je ne connais pas vraiment l'étendue de leur zone de livraison. La plupart du temps, je prends mes commandes en take-out. Avec 10% d'escompte au comptoir, essayez la grosse poutine Mistinguette (frites, viande fumée, sauce à la viande, le tout gratiné). Pendant la préparation, allez faire un tour au dépanneur juste à côté et découvrez leur belle sélection de bières de microbrasseries québécoises. Hum... l'heure du lunch approche...


Tags: JavaScript

1 réponse à "Tracer une zone circulaire sur une carte Google"

  1. Adelante a dit...
    28 novembre 2010 à 12 h 21

    Excellent, ce n'est pas le genre d'infos ou d'idée qu'on trouve facilement ! Merci


Publier un commentaire

Message plus récent Messages plus anciens Accueil
S'abonner à : Publier des commentaires (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (56)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ►  2015 (6)
      • ►  août 2015 (1)
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ►  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ►  février 2012 (15)
      • ►  janvier 2012 (12)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ▼  2010 (398)
      • ►  décembre 2010 (29)
      • ▼  novembre 2010 (28)
        • Des arbres en 3D dans Google Earth 6
        • Tracer une zone circulaire sur une carte Google
        • Citation no. 109 sur Facebook
        • Instrument de musique fabriqué avec des tuyaux
        • Disque dur DeLorean USB de BTTF
        • Les programmeurs mélangent l'Halloween et Noël
        • Top 5 des sites complètement inutiles
        • Désolé, vous ne savez pas compter
        • Comment démarrer une vidéo YouTube à un temps spéc...
        • Citation no. 108 sur le programmeur
        • Clé USB à écran de 16 pouces
        • Mike Patton ressemble tout à fait à Johnny Depp
        • L'éthique des hackers
        • Piège avec un URL en paramètre GET
        • La cohérence chez Brick, c'est imbattable
        • Le framework est-il synonyme de mal ?
        • Citation no. 107 sur l'intelligence
        • Piège JavaScript no. 8 avec delete
        • Acheter une maison à Montréal
        • 1750 RIPJSB Hacker et Musique
        • Convertir un fichier Word docx en format doc
        • Liste des thumbnails d'une vidéo YouTube
        • Citation no. 106 sur l'apprentissage
        • De la base 60 vers le binaire
        • Regex de validation de lien YouTube
        • La poutine, d'un océan à l'autre
        • Zero Clipboard pour pallier à un manque des fureteurs
        • Windows 3.1 en JavaScript dans un browser
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ►  2009 (430)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (37)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft