{"id":451,"date":"2012-09-12T18:10:59","date_gmt":"2012-09-12T17:10:59","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=451"},"modified":"2016-09-29T12:35:35","modified_gmt":"2016-09-29T10:35:35","slug":"api-google-maps","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=451","title":{"rendered":"API Google Maps"},"content":{"rendered":"<p>J&rsquo;ai eu l&rsquo;occasion la semaine derni\u00e8re, de jouer avec l&rsquo;API Google Maps. R\u00e9cup\u00e9ration de donn\u00e9es en json aupr\u00e8s d&rsquo;un serveur en lui demandant de filtrer les r\u00e9sultats sur la valeur d&rsquo;un champ. Je pr\u00e9sente ici, une version simplifi\u00e9e, j&rsquo;ai plac\u00e9 des donn\u00e9es en dur dans mon fichier .js, quelques gares: Nom, R\u00e9gion, Latitude, Longitude, et je m&rsquo;arrange pour afficher leur position avec l&rsquo;API de Google.<\/p>\n<p>On pr\u00e9pare d&rsquo;abord la page Html qui va recevoir le tout. On ajoute le JS de l&rsquo;API:<\/p>\n<pre>&lt;script type=\"text\/javascript\" src=\"http:\/\/maps.googleapis.com\/maps\/api\/js?key=VOTRE_CLE&amp;sensor=false\"&gt;\r\n&lt;\/script&gt;<\/pre>\n<p>En rempla\u00e7ant VOTRE_CLE par la cle d&rsquo;API g\u00e9n\u00e9r\u00e9e par Google.<\/p>\n<p>On place une balise &lt;div&gt; pour accueillir la map une fois celle-ci g\u00e9n\u00e9r\u00e9e.<\/p>\n<p><strong> Initialisation de la Google Maps<\/strong><\/p>\n<pre>var mapOptions = {\r\n  center: new google.maps.LatLng(47.2, 2),\r\n  zoom: 5,\r\n  mapTypeId: google.maps.MapTypeId.ROADMAP\r\n};\r\nmap = new google.maps.Map(document.getElementById(\"map_canvas\"),\r\n  mapOptions);<\/pre>\n<p><strong>Pour cr\u00e9er un marqueur:<\/strong><\/p>\n<pre>var latlng = new google.maps.LatLng(latitude, longitude);\r\nvar marker = new google.maps.Marker({\r\n  position: latlng,\r\n  title: \"Titre du marqueur\"\r\n});\r\nmarker.setMap(map);<\/pre>\n<p>Concernant la gestion des marqueurs, depuis la derni\u00e8re version de Google Maps, il est n\u00e9cessaire de les g\u00e9rer soit m\u00eame. Il faut donc garder une trace des marqueurs pour pouvoir les supprimer par la suite, si besoin. On stockera les marqueurs dans un tableau.<\/p>\n<pre>var markersArray = [];<\/pre>\n<p>On ajoute les marqueurs au tableau apr\u00e8s le placement sur la carte.<\/p>\n<pre>markersArray.push(marker);<\/pre>\n<p>La fonction pour supprimer tous les marqueurs du tableau de la carte et nettoyer la carte est <code>deleteOverlays()<\/code>.<\/p>\n<p><strong>Pour cr\u00e9er une OpenWindow:<\/strong><\/p>\n<pre>var infowindow = new google.maps.InfoWindow({\r\n  content: contentString\r\n});\r\n\r\n\/\/Ajout d'un Listener sur le marqueur pour r\u00e9agir en cas de clic\r\ngoogle.maps.event.addListener(marker, 'click', function() {\r\n  infowindow.open(map,marker);\r\n});<\/pre>\n<p><strong>Obtenir votre cl\u00e9 d&rsquo;API Google Maps<\/strong><br \/>\nAller sur https:\/\/code.google.com\/apis\/console et se connecter avec son compte Google.<br \/>\nCliquer sur Services dans le menu \u00e0 gauche.<br \/>\nActiver le service Google Maps API v3.<br \/>\nCliquer sur API Access dans le menu \u00e0 gauche.<br \/>\nLa cl\u00e9 est visible dans la page API Access, section Simple API Access, celle-ci est indiqu\u00e9 sous le nom de Key for browser apps.<\/p>\n<p><strong>Le code:<\/strong><\/p>\n<pre>&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n    &lt;head&gt;\r\n        &lt;meta charset=\"utf-8\" \/&gt;\r\n        &lt;link rel=\"stylesheet\" href=\"style.css\" \/&gt;\r\n        &lt;title&gt;Gare de France&lt;\/title&gt; \r\n\r\n        &lt;script src=\"jquery.js\"&gt;&lt;\/script&gt;\r\n    &lt;script src=\"getdata.js\"&gt;&lt;\/script&gt;\r\n    &lt;script type=\"text\/javascript\"\r\n        src=\"http:\/\/maps.googleapis.com\/maps\/api\/js?key=VOTRE_CLE&amp;sensor=false\"&gt;\r\n        &lt;\/script&gt;\r\n    &lt;\/head&gt; \r\n\r\n &lt;body&gt;\r\n    &lt;div id=\"map_canvas\"&gt;&lt;\/div&gt; \r\n\r\n    &lt;div id=\"gareTab\"&gt;\r\n        &lt;h1&gt;Liste de Gares Fran\u00e7aises&lt;\/h1&gt; \r\n\r\n        &lt;table&gt;&lt;tr&gt;  &lt;th&gt;Nom de la gare&lt;\/th&gt; &lt;th&gt;R\u00e9gion&lt;\/th&gt; &lt;th&gt;Latitude&lt;\/th&gt;   &lt;th&gt;Longitude&lt;\/th&gt;  &lt;\/tr&gt;&lt;\/table&gt;\r\n    &lt;\/div&gt;\r\n &lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>C\u00f4t\u00e9 CSS, on aura:<\/p>\n<pre>html {\r\n      height: 100%\r\n}\r\nbody {\r\n    height: 100%;\r\n    margin: 0;\r\n    padding: 0;\r\n    margin-left: 2em;\r\n    margin-top: 2em;\r\n}\r\ntable {\r\n    border-collapse: collapse;\r\n}\r\ntd, th {\r\n    border: 1px solid black;\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n}\r\n#map_canvas {\r\n     display: inline-block;\r\n     position: absolute;\r\n     margin-top: 6em;\r\n     width: 50%;\r\n     height: 55%;\r\n     left: 45%\r\n }\r\n#gareTab {\r\n     position: absolute;\r\n     width: 60%;\r\n     margin-top: 6em;\r\n }<\/pre>\n<p>Et enfin, passons au c\u00f4t\u00e9 JavaScript proprement dit:<\/p>\n<pre>\/\/Contient tous les marqueurs pr\u00e9sents sur notre carte\r\nvar markersArray = [];\r\n\/\/On retient l'InfoWindow ouverte pour pouvoir la fermer au besoin\r\nvar openedInfoWindow;\r\n\/\/Nos donn\u00e9es\r\nvar data = [\r\n            {\r\n                \"Nom de la gare\": \"Amiens\",\r\n                \"R\u00e9gion\": \"Picardie\",\r\n                \"Latitude\": \"49.88993025\",\r\n                \"Longitude\": \"2.30981909\"},\r\n            {\r\n                \"Nom de la gare\": \"Lyon-Part-Dieu\",\r\n                \"R\u00e9gion\": \"Rh\u00f4ne-Alpes\",\r\n                \"Latitude\": \"45.76032897\",\r\n                \"Longitude\": \"4.86050906\"},\r\n            {\r\n                \"Nom de la gare\": \"Bas-Monistrol\",\r\n                \"R\u00e9gion\": \"Auvergne\",\r\n                \"Latitude\": \"45.29796638\",\r\n                \"Longitude\": \"4.13958253\"},\r\n            {\r\n                \"Nom de la gare\": \"Strasbourg\",\r\n                \"R\u00e9gion\": \"Alsace\",\r\n                \"Latitude\": \"48.58496713\",\r\n                \"Longitude\": \"7.734584\"}, \r\n\r\n            {   \"Nom de la gare\": \"Quiberon\",\r\n                \"R\u00e9gion\": \"Bretagne\",\r\n                \"Latitude\": \"47.48552763\",\r\n                \"Longitude\": \"-3.11816733\"},\r\n            {\r\n                \"Nom de la gare\": \"Carcassonne\",\r\n                \"R\u00e9gion\": \"Languedoc-Roussillon\",\r\n                \"Latitude\": \"43.21816508\",\r\n                \"Longitude\": \"2.35242959\"}\r\n            ]; \r\n\r\n\/\/Suppression des marqueurs Google Maps\r\nfunction deleteOverlays() {\r\n  if (markersArray) {\r\n    for (i in markersArray) {\r\n      markersArray[i].setMap(null);\r\n    }\r\n    markersArray.length = 0;\r\n  }\r\n} \r\n\r\n\/\/Suppression du contenu du tableau de gare\r\nfunction deleteTab() {\r\n    for(var i = 0; i &lt; $('.ligne').length; ++i) {\r\n        $('.ligne').remove();\r\n    }\r\n} \r\n\r\n\/\/S'ex\u00e9cute lorsque le document est pr\u00eat\r\nfunction readyFn() { \r\n\r\n    \/\/Initialisation de la Google Maps\r\n    var mapOptions = {\r\n        center: new google.maps.LatLng(47, 2),\r\n        zoom: 6,\r\n        mapTypeId: google.maps.MapTypeId.ROADMAP\r\n    }; \r\n\r\n    map = new google.maps.Map(document.getElementById(\"map_canvas\"),\r\n    mapOptions); \r\n\r\n    \/\/Suppression de tout ce qui pourrait pr\u00e9exister\r\n    deleteOverlays();\r\n    deleteTab(); \r\n\r\n    var tab = [];\/\/On construit le contenu du tableau HTML dans tab\r\n    data.forEach(function(element, index, array) {\r\n        \/\/Construction d'une ligne du tableau\r\n        tab.push('&lt;tr&gt;&lt;td&gt; ' +\r\n            element[\"Nom de la gare\"] + ' &lt;\/td&gt;&lt;td&gt;' +\r\n            element[\"R\u00e9gion\"] + ' &lt;\/td&gt;&lt;td&gt;  ' +\r\n            element[\"Latitude\"] + '  &lt;\/td&gt;&lt;td&gt;  ' +\r\n            element[\"Longitude\"] + '  &lt;\/td&gt;&lt;\/tr&gt;'\r\n        ); \r\n\r\n        \/\/Construction du marqueur Google Maps\r\n        var latlng = new google.maps.LatLng(element[\"Latitude\"], element[\"Longitude\"]);\r\n        var marker = new google.maps.Marker({\r\n            position: latlng,\r\n            title: element[\"Nom de la gare\"]\r\n         });\r\n        marker.setMap(map);\/\/Ajout du marqueur \u00e0 la carte\r\n        markersArray.push(marker); \r\n\r\n        \/\/Ajout d'une InfoWindow pour chaque marqueur\r\n        \/\/Ce qui s'affichera:\r\n        var contentString = '&lt;b&gt;' + element[\"Nom de la gare\"]\r\n            + '&lt;\/b&gt;&lt;br \/&gt;' + element[\"R\u00e9gion\"]\r\n            + '&lt;br \/&gt;Latitude: ' + element[\"Latitude\"]\r\n            + '&lt;br \/&gt;Longitude: ' + element[\"Longitude\"]; \r\n\r\n        \/\/Cr\u00e9ation des fen\u00eatres d'info (ou InfoWindow)\r\n        var infowindow = new google.maps.InfoWindow({\r\n            content: contentString\r\n        }); \r\n\r\n        \/\/Ajout d'un Listener sur le marqueur pour r\u00e9agir en cas de clic\r\n        google.maps.event.addListener(marker, 'click', function() {\r\n            if(openedInfoWindow != undefined) {\/\/Au cas o\u00f9 il n'y a pas d'info window \u00e0 fermer\r\n                openedInfoWindow.close();\r\n            }\r\n            infowindow.open(map,marker);\r\n            openedInfoWindow = infowindow;\r\n        });\r\n    }); \r\n\r\n    \/\/concat\u00e9nation du tableau en string et ajout dans la balise table\r\n    $('table').append(tab.join(''));\r\n} \r\n\r\n$(document).ready(readyFn);<\/pre>\n<p>&nbsp;<\/p>\n<p>Pour tout savoir sur l&rsquo;API Google Maps, je vous conseille la doc de Google qui est tr\u00e8s claire et d\u00e9taill\u00e9e:<br \/>\n<a title=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\/tutorial\" href=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\/tutorial\" target=\"_blank\">https:\/\/developers.google.com\/maps\/documentation\/javascript\/tutorial<\/a><\/p>\n<p>Pour le zip contenant les fichiers ci-dessus, c&rsquo;est par ici:<\/p>\n<p><a href=\"https:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/09\/GareOnGoogleMaps.zip\">GareOnGoogleMaps<\/a><\/p>\n<p><strong>Maj 25.03.2013:<\/strong> En fait, il n&rsquo;est pas n\u00e9cessaire de g\u00e9n\u00e9rer une cl\u00e9 d&rsquo;API pour pouvoir utiliser la Google Maps. Il suffit simplement d&rsquo;utiliser l&rsquo;url suivante <em>http:\/\/maps.googleapis.com\/maps\/api\/js?&amp;sensor=false<\/em> correspondant \u00e0 l&rsquo;adresse utilis\u00e9e dans cette exemple sans le param\u00e8tre <em>key<\/em>. Ajout du zip comprenant les sources.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai eu l&rsquo;occasion la semaine derni\u00e8re, de jouer avec l&rsquo;API Google Maps. R\u00e9cup\u00e9ration de donn\u00e9es en json aupr\u00e8s d&rsquo;un serveur en lui demandant de filtrer les r\u00e9sultats sur la valeur d&rsquo;un champ. Je pr\u00e9sente ici, une version simplifi\u00e9e, j&rsquo;ai plac\u00e9 des donn\u00e9es en dur dans mon fichier .js, quelques gares: Nom, R\u00e9gion, Latitude, Longitude, et &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=451\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;API Google Maps&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[13],"class_list":["post-451","post","type-post","status-publish","format-standard","hentry","category-code","tag-javascript"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=451"}],"version-history":[{"count":10,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/451\/revisions"}],"predecessor-version":[{"id":2338,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/451\/revisions\/2338"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}