IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Géocodage adresses et affichage marqueur [Google Maps]


Sujet :

APIs Google

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 55
    Par défaut Géocodage adresses et affichage marqueur
    Bonjour,

    je dois mettre en place un petit script qui affichera une liste de marqueurs (villes) avec zoom automatique sur la zone (utilisation de fitBounds et LatLngBounds).
    sur autre application j'ai déjà créé un tableau avec les coordonnées gps dedans et ça fonctionne bien.

    mais là, je n'ai pas les coordonnées mais j'ai le noms des villes.
    donc, je comptais géocoder chaque nom de ville pour récupérer les coordonnées gps et les insérer dans un tableau que je parcours par la suite. sauf que je n'y arrive pas et mon tableau est vide (sauf l'insertion manuelle).

    voici le bout de script JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    var tableauLieux = []; // Nous crééons 1 tableau qui va indiquer les adresses et autres renseignements à afficher sur la carte
    var geocoder;
     
    function ckeck_adress(adresse) {
    	geocoder = new google.maps.Geocoder();
     
    	geocoder.geocode({ 'address': adresse}, function(results, status) {
     
    		// Si l'adresse a pu être géolocalisée 
    		if(status == google.maps.GeocoderStatus.OK)
    		{
    			// Récupération de sa latitude et de sa longitude
    			Lat = results[0].geometry.location.lat();
    			Long = results[0].geometry.location.lng();
     
    			tableauLieux.push( new google.maps.LatLng(Lat, Long));
    			//tableauLieux.push(results[0].geometry.location);
     
    		}
    		else
    		{
    			alert("Le géocodage n\'a pu etre effectue pour la raison suivante: " + status);
    		}
    	});
    }
     
    function test() {
    	// insertion d'une commune en manuel (paris)
    	tableauLieux.push(new google.maps.LatLng(48.8566667, 2.3509871));
     
    	<?php
            // on recupère les 3 1ères communes pour le test
            for($i=0; $i < 3; $i++)
            {
            ?>
    		ckeck_adress("<?php echo addslashes($tab_com[$i]['nom_com']).", ".$DPT; ?>");
    	<?php
            }
            ?>
     
     
    var optionsCarte = {
    	mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    maCarte = new google.maps.Map(document.getElementById("map"), optionsCarte);
    bounds = new google.maps.LatLngBounds();
    //alert(tableauLieux.length);
    for (var i = 0; i < tableauLieux.length; i++)
    {
    	var Lieu = tableauLieux[i];
     
    	bounds.extend(Lieu);
     
    	var marqueurLieu = new google.maps.Marker({
    		position: Lieu,
    		map: maCarte,
    		title: ""
    	});
    }
    maCarte.fitBounds(bounds);
    }
    google.maps.event.addDomListener(window, 'load', test);
    Merci pour l'aide.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 247
    Par défaut
    Bonjour,
    la fonction passée en paramètre de la méthode geocode est une fonction "callback" qui s'exécutera lorsque geocode renverra une réponse et ce de façon asynchrone, donc pas forcément tout de suite.

    De ce fait tu lances x fois la fonction, qui rend donc la main, et le code continu de s'exécuter, d'où le fait que le tableau est vide au moment de la lecture.

    Il te faut donc revoir ta façon d'ordonnancer ton code.

    Remarque sur le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Si l'adresse a pu être géolocalisée
    if(status == google.maps.GeocoderStatus.OK){
    	// Récupération de sa latitude et de sa longitude
    	Lat = results[0].geometry.location.lat();
    	Long = results[0].geometry.location.lng();
     
    	tableauLieux.push( new google.maps.LatLng(Lat, Long));
    	//tableauLieux.push(results[0].geometry.location);
    }
    pourquoi décomposer en Lat/Lng pour recompacter en objet LatLng au moment du push? La ligne en commentaire est bien mieux.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 55
    Par défaut
    Merci pour cette 1ère réponse.

    il faudrait que je stoppe le code tant que je n'ai pas de retour de la fonction ?

    là je ne voit pas trop du coup ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 55
    Par défaut
    quelqu'un aurait une petite idée sur mon problème ??

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 247
    Par défaut
    que d'impatience!!! important, le reste aussi d'ailleurs

    Concernant ton problème
    1/ construire la map
    2/ faire l'appel à ta fonction dans une boucle
    3/ DANS la fonction de callback, et uniquement dans celle ci, afficher le marker et recentrer la carte.

    en bonus 62 lignes de pur bonnheur
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>[Google Maps API v3] Geocoding à la volée</title>
    <style type="text/css">
    html, body {
      height : 100%;
    }
    #div_canvas {
      margin : auto;
      width : 600px;
      height : 600px;
    }
    </style>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=fr"></script>
    <script type="text/javascript">
    var data =[
      { adresse : 'Bordeaux, FRANCE'},
      { adresse : 'Paris, FRANCE'   },
      { adresse : 'Lille, FRANCE'   },
      { adresse : 'Rennes, FRANCE'  }
    ];
    var geocoder;
    var oMap;
    var oBounds = new google.maps.LatLngBounds();
     
    function initCarte() {
      geocoder = new google.maps.Geocoder();
      var latlng = new google.maps.LatLng(45, 3);
      var myOptions = {
        zoom : 8,
        center : latlng = new google.maps.LatLng(45.0, 3.0),
        backgroundColor : '#fff',
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }
      oMap = new google.maps.Map(document.getElementById("div_canvas"), myOptions);
     
      for( var param=0; param < data.length; param++){
        codeAddress( data[param].adresse);
      }
    }
    function codeAddress(address){
      geocoder.geocode( { 'address': address}, function(results, status) {
        if( status == google.maps.GeocoderStatus.OK) {
            oBounds.extend(results[0].geometry.location);
          var marker = new google.maps.Marker({
              map : oMap, 
              position: results[0].geometry.location
          });
          oMap.fitBounds( oBounds);
        }
      });
    }
    google.maps.event.addDomListener(window, 'load', initCarte);
    </script>
    </head>
    <body>
      <div id="div_canvas"></div>
    </body>
    </html>
    pas commentées mais bon

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 55
    Par défaut
    Merci beaucoup !!
    j'ai comparé avec ce que j'avais fais.
    en fait, je n'ajoutais pas chaque point dans la zone (ligne 53 et 61).
    je poste mon code dès que j'ai fini celà.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Maps] Fonction Recherche d'une adresse et les marqueurs
    Par sonny.ng dans le forum APIs Google
    Réponses: 2
    Dernier message: 22/07/2014, 10h48
  2. [Google Maps] Adresse d'un marqueur Google Map API
    Par iBen68 dans le forum APIs Google
    Réponses: 2
    Dernier message: 12/06/2012, 23h19
  3. Affichage marqueur avec fenetre contenant une photo
    Par lucmontagne dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 05/04/2010, 21h31
  4. Affichage URL dans la barre d'adresse
    Par NicoNGRI dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/09/2005, 15h11
  5. Affichage de l'adresse d'une chaine avec cout
    Par thierryguilbert dans le forum SL & STL
    Réponses: 4
    Dernier message: 14/03/2005, 17h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo