Bonjour à tous,
J'essaye d'afficher une liste de markers que je récupere de ma BDD sans succès.
Avec php je genere bien le javascript correspondant, mais tout les markers ne s'affichent pas!!
C'est à s'arracher les cheveux...

Si quelqu'un a déjà eu le pb, ce serait sympa de partager!

<div id="map">
    <p>Veuillez patienter pendant le chargement de la carte...</p>
</div>

            <!-- Include Javascript -->
            <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
            <script type="text/javascript" src="lib/js/markerclusterer_compiled.js"></script>
            <script type="text/javascript">

            function bindInfoWindow(marker, map, infowindow, html, Ltitle) { 
                google.maps.event.addListener(marker, 'click', function() {
                        infowindow.setContent(html); 
                        infowindow.open(map, marker); 
                });
            }
            function initialize(){
                var map;
                var geocoder;
                var oBounds = new google.maps.LatLngBounds();
                var address;
                var marker;
                var markers = [];
                var infowindow =  new google.maps.InfoWindow({
                    content: ''
                });
                geocoder = new google.maps.Geocoder();
                var latLng = new google.maps.LatLng(46.3415466, 2.6019911999999294); 
                var myOptions = {
                    zoom      : 5,
                    center    : latLng,
                    mapTypeId : google.maps.MapTypeId.ROADMAP
                };

                map = new google.maps.Map(document.getElementById('map'), myOptions);

                <?php 
                /* Creation des markeurs pour chaque resutat */
                foreach ($profils as $profil) {
                ?>
                    address = '<?php echo $profil["adresse"]; ?>';
                    geocoder.geocode( { 'address': address}, function(results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                        marker = new google.maps.Marker({ 
                            map: map, 
                            title:'<?php echo $profil["pseudo"]; ?>',
                            position: results[0].geometry.location 
                        });
                        markers.push(marker);
                        bindInfoWindow(marker, map, infowindow, "<p><?php echo $profil['pseudo']; ?></p><p><a href='#'>Voir</a></p>",'<?php echo $profil["pseudo"]; ?>'); 
                    }
                    });
                <?php
                }
                ?>
                 var markerCluster = new MarkerClusterer(map, markers);
            } /* End function Initialize*/ 
            google.maps.event.addDomListener(window, 'load', initialize);
            </script>

5 réponses


Tu as testé le retour du geocoder ?

Essaye peut être de faire ta requête en ajax!?

Bonjour,
D'abord merci pour vos réponses.
J'ai testé le retour du geocoder en affichant les coordonnées GPS avec un alert, et il semble fonctionner parfaitement.
En fait j'ai l'impression que l'api Google n'affiche qu'un certain nombre de marker. Quand je change l'ordre des points à afficher, il m'affiche bien une nouvelle liste limitée de points, le geocoder renvoit donc bien les bonnes coordonnées.
Ajax j'ai pas testé (débutant JS...) mais il me semble qu'Ajax sers surtout pour des requetes asynchrones sans besoin de recharger une page complete, donc adapté pour des interactions Client vers Serveur. Pas trop adapté pour moi, donc?

Merci,

Normalement on évite de mettre du PHP dans le JavaScript, c'est vraiment pas une bonne pratique (surtout si dans le futur tu dois exporter ton code JavaScript). Cela dit ça fonctionne, donc c'est pas le problème qui nous occupe.

Pour ton soucis, est-ce que tu as essayé de placer tes markers "à la main", sans boucler sur tes résultats de BDD, avec les mêmes coordonnées ? Est-ce que tu as noté un nombre maximum d'affichage de markers ?

J'ai l'impression que c'est le problème détaillé dans cet article : https://developers.google.com/maps/articles/toomanymarkers. J'en suis pas certain à 100%, fais des tests pour en être sûr, tu pourras ensuite envisager une solution.

Bonjour Anthoo.
Merci pour le conseil JS déjà, je suis toujours preneur...
Pour en revenir à mon probleme, je l'ai résolu en evitant le géocoadage multiple que Google limite à 5 requetes/sec... (OVER_QUERY_LIMIT).
La solution que j'ai choisi et celle sur stockage de coordonnées GPS et leur affichage direct, plutot que de géocoder systematiquement les adresses de ma BDD...Du coup je géocode 1 seul fois un adresse au moment de l'insertion en BDD.

Je note ici ma solution au cas ou qqn un jour chercherai à résoudre ce type de pb...

Merci à tous
Walid