Génération dynamique de Google Maps

Génération dynamique de Google Maps - PHP - Programmation

Marsh Posté le 20-12-2009 à 19:16:52    

Bonsoir,
 
J'ai intégré dans mon site une rubrique qui fait appel à des Google Maps.
Grosso-modo, Un rédacteur ajoute un article, contenant un nom de ville, et une map apparait automatiquement dans l'article après un appel au geocoder.
Le souci c'est que jusqu'à maintenant j'ai crée une fonction de traitement gmap par article (c'est moche je sais) et que le nombre d'articles par page se doit donc d'être fixe.
J'aimerais donc réaliser une fonction générique pour le geocoding et l'initialisation d'un google map.
 
Un peu de code pour expliciter tout ça :
 
Les fonctions d'initialisations :

Code :
  1. <script type="text/javascript">
  2. var map1 = null;
  3. var map2 = null;
  4. var map3 = null;
  5.     var geocoder = null;
  6.     function initialize1() {
  7.       if (GBrowserIsCompatible()) {
  8.         map1 = new GMap2(document.getElementById("map_canvas1" ));
  9.         geocoder = new GClientGeocoder();
  10.       }
  11.     }
  12.     function showAddress1(address) {
  13.       if (geocoder) {
  14.         geocoder.getLatLng(
  15.           address,
  16.           function(point) {
  17.             if (!point) {
  18.               alert(address + " not found" );
  19.             } else {
  20.               map1.setCenter(point, 11);
  21.               var marker = new GMarker(point);
  22.               map1.addOverlay(marker);
  23.               marker.openInfoWindowHtml(address);
  24.             }
  25.           }
  26.         );
  27.       }
  28.     }   
  29.     function initialize2() {
  30.       if (GBrowserIsCompatible()) {
  31.         map2 = new GMap2(document.getElementById("map_canvas2" ));
  32.         geocoder = new GClientGeocoder();
  33.       }
  34.     }
  35.     function showAddress2(address) {
  36.       if (geocoder) {
  37.         geocoder.getLatLng(
  38.           address,
  39.           function(point) {
  40.             if (!point) {
  41.               alert(address + " not found" );
  42.             } else {
  43.               map2.setCenter(point, 11);
  44.               var marker = new GMarker(point);
  45.               map2.addOverlay(marker);
  46.               marker.openInfoWindowHtml(address);
  47.             }
  48.           }
  49.         );
  50.       }
  51.     }


 
L'affichage :

Code :
  1. pour i allant de 1 au nombre d'article par page {
  2.         echo"<div id='map_canvas".$i."' style='width: 400px; height: 300px'></div>";
  3.         echo"<script type='text/javascript'>initialize".$i."(); showAddress".$i."('".$lieu." ".$cp."');</script>";
  4.         $i = $i +1;
  5.         }


 
Merci d'avance  :jap:


Message édité par darkgloom le 20-12-2009 à 19:18:21
Reply

Marsh Posté le 20-12-2009 à 19:16:52   

Reply

Marsh Posté le 21-12-2009 à 13:08:56    

tu creer un array avec t'es info, tu le transforme en object json que tu recupere avec javascript, mais le mieux c'est au niveau de la creation de l'article il faut inclure les coordonné que google te retournera, ca sera beaucoup plus rapide que de faire une recherche par adresse a chaque fois


Message édité par stealth35 le 21-12-2009 à 13:10:34
Reply

Marsh Posté le 21-12-2009 à 14:13:40    

C'est vrai que faire appel au geocoder à chaque fois n'est pas un très bon choix, je pourrais stocker les coordonnées en base, je ferais peut être ça dans un 2ème temps.
Par contre je ne comprend pas tout à fait ta solution, je ne suis même pas sur qu'elle réponde à mon problème  :heink:

Reply

Marsh Posté le 21-12-2009 à 14:26:21    

a chaque tour de boucle tu creer un array du type

 
Code :
  1. map[$i]['div']  = "map_canvas$i";
  2. map[$i]['lat']  = $lat;
  3. map[$i]['lon']  = $lon;
 

a la fin de ta boucle tu fais

 
Code :
  1. $json = json_encode($map);
 

dans ton code html tu pourras ensuite faire

 
Code :
  1. <script type="text/javascript">
  2. var map = <?php echo $json ?>;
  3.  
  4. for(var i in map)
  5. {
  6. //ta fonction pour creer ta div map, et affichage du pointeur
  7. }
  8. </script>
 

http://php.net/manual/fr/function.json-encode.php


Message édité par stealth35 le 21-12-2009 à 14:34:39
Reply

Marsh Posté le 22-12-2009 à 12:26:19    

Je vois :)
 
Concernant la dernière fonction, qu'est ce qui est le mieux ?
Je la déclare au début de ma page et je l'appelle une fois que les div sont crées ?
 
Merci en tout cas :jap:


Message édité par darkgloom le 22-12-2009 à 13:00:15
Reply

Marsh Posté le 22-12-2009 à 13:01:42    

avec l'api de google t'as une fonction qui va enclencher une fois ta page charger, donc tu gardes tout dans l'en tete, ta boucle aussi.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed