2009-07-01 6 views
0

J'ai un problème avec plusieurs marqueurs sur google maps - J'ai actuellement une base de données MySQL stockant des informations (informations de localisation). En php je puis extraire cette information et boucle à travers chaque code postal pour créer dynamiquement le javascript requis pour placer un marqueur pour chaque place dans ma base de données. Cela fonctionne avec succès, donc je sais que je transmets la bonne information à la fonction js - Maintenant, j'essaye d'ajouter des informations supplémentaires quand on clique sur le marqueur, mais cela montre la même chose sur chaque fenêtre de marqueur.Google Maps - Le même texte apparaît dans la fenêtre d'informations lors de l'utilisation de plusieurs marqueurs

Ce sont les js que je utilise (je lance une icône en haut mais EXCLUSIONS à partir du code pour l'instant):

function usePointFromPostcode(postcode, callbackFunction, text) { 

    localSearch.setSearchCompleteCallback(null, 
     function() { 

      if (localSearch.results[0]) 
      {  
       var resultLat = localSearch.results[0].lat; 
       var resultLng = localSearch.results[0].lng; 
       var point = new GLatLng(resultLat,resultLng); 
       callbackFunction(point, text); 
      }else{ 
       alert("Postcode not found!"); 
      } 
     }); 

    localSearch.execute(postcode + ", UK"); 
} 

function placeMarkerAtPoint(point, html, icon) 
{ 
    var marker = new GMarker(point,{icon: icon}); 

    GEvent.addListener(marker,"click",function() { 
     marker.openInfoWindowHtml(html); 
    }); 

    map.addOverlay(marker); 
} 

Le code php J'est:

$query = "SELECT * FROM hospitalInfo"; 
$result = mysql_query($query); 

if($result) { 
    while ($row = mysql_fetch_assoc($result)) { 
     $code .= "usePointFromPostcode('".$row['Postcode']."', placeMarkerAtPoint, 
     '".$row['placeName']."');"; 

    } 
} 

Le code $ est ensuite répercuté.

Un conseil sur pourquoi cela se produit serait très apprécié! Merci !

+0

Y a-t-il une chance que vous postiez un lien vers la page? Je suis d'accord avec @Cannonade qu'il ne semble pas y avoir de problème avec le code de Google Maps. Etes-vous sûr que le code PHP sort le bon truc? –

+0

Malheureusement, je ne peux pas poster un lien vers le code puisque je l'héberge sur un serveur interne désolé. Merci d'avoir essayé de m'aider. Je pensais aussi qu'il y avait quelque chose de mal avec la sortie php mais je l'ai vérifié en le sortant dans une boîte d'alerte et il fournit un texte différent à chaque fois, c'est pourquoi je pensais qu'il y avait quelque chose qui clochait avec mon javascript – samcooper11

+0

m en utilisant: var localSearch = new GlocalSearch(); – samcooper11

Répondre

1

Comme vous l'avez mentionné dans votre commentaire, le problème est que vous envoyez plusieurs demandes avant d'obtenir des résultats, et la valeur du texte du marqueur change chaque fois que vous envoyez la demande. Je pense que vous pourriez grandement simplifier votre code en utilisant le GClientGeocoder - à moins qu'il ne soit absolument nécessaire d'utiliser GLocalSearch, qui ne fait pas vraiment partie de l'API Maps. Voici Google's tutorial pour le géocodeur.

d'abord créer le géocodage comme ceci:

var geocoder = new GClientGeocoder(); 

Ensuite, voici votre nouvelle usePointFromPostcode() fonction:

function usePointFromPostcode(postcode, text) { 
    geocoder.getLatLng(postcode, function(point) { 
     if (!point) { 
      //alert('address not found'); 
     } else { 
      var marker = new GMarker(point, {icon: icon}); 
      GEvent.addListener(marker, "click", function() { 
       marker.openInfoWindowHtml(text); 
      }); 
      map.addOverlay(marker); 
     } 
    }); 
} 

Cela a très bien fonctionné pour moi. Essayez-le et laissez-nous savoir comment ça se passe.

Si vous avez besoin de plus d'informations sur le point renvoyé, comme la précision, utilisez getLocations() au lieu de getLatLng(). Le tutoriel explique comment cela fonctionne.

1

Je ne vois pas de problème avec votre code Google Maps. Je vous suggère d'essayer de consigner les paramètres html dans placeMarkerAtPoint et le paramètre text dans le rappel localSearch. Google ont une très utile API de journalisation vous pouvez utiliser:

glog Référence

J'ajouterais au début de la fonction placeMarkerAtPoint:

GLog.write ("placeMarkerAtPoint - " + html); 

et dans le rappel localSearch:

GLog.write ("SearchCompleteCallback - " + text); 

Je pense que la journalisation de ces deux rappels (en particulier le second), rendra évident où le code HTML est perdu.

Mise à jour: Ok, d'après votre connexion, votre code PHP est très bien. Vous générez trois appels à usePointFromPostcode.

Le problème est ici avec votre rappel google.search.SearchControl. Je suppose que la recherche fonctionne correctement et le tableau de résultats que vous obtenez est approprié pour chaque code postal respectif?

Si tel est le cas, le problème est lié au paramètre text dans setSearchCompleteCallback. Je n'ai pas utilisé les choses Google AJAX Search, mais le problème réside dans la façon dont ces rappels sont déclenchés. Il semble que vous pouvez obtenir multiple callbacks pour une seule exécution.

+0

ok je vais essayer, merci – samcooper11

+0

J'ai essayé - toujours pas de chance sur ce qui ne va pas ... J'ai posté une réponse avec les résultats et le code javascript. Merci – samcooper11

+0

Je vais vérifier ... – RedBlueThing

0

Vous réutilisez le marqueur de nom afin que le dernier texte que vous placez finisse par être attaché à chacun d'entre eux. Créez un index et nommez-les marker1, marker2, etc. C'est facile à faire dans une boucle php.

2

Il se peut que vous rencontriez un problème d'étendue/de fermeture, similaire au problème évoqué here.

Essayez de remplacer ce code:

GEvent.addListener(marker,"click",function() { 
    marker.openInfoWindowHtml(html); 
}); 

avec ceci:

marker.bindInfoWindowHtml(html); 

Si cela ne fonctionne pas, je suppose que le problème de fermeture provient de la fonction setSearchCompleteCallback(). Il est difficile de deviner sans voir la page réelle.

+0

J'ai essayé mais j'ai toujours la même erreur - j'ai réussi à trouver un hack temporaire qui semblait fonctionner pour l'instant - je viens d'ajouter une pause dans le code php avec setTimeout . Je pense que le problème est dû au fait que la méthode usePointFromPostcode est appelée à nouveau avant que les résultats de recherche du précédent aient été renvoyés - la recherche doit être asynchrone? Je ne savais pas comment corriger le code, donc j'ai utilisé le timeout à la place. D'autres pensées? Merci encore pour votre aide :-) – samcooper11

+0

Vous avez tout à fait raison. usePointFromPostcode() est appelé plusieurs fois avant que le premier résultat ne revienne. Je vais poster une nouvelle réponse ... –

+0

marker.bindInfoWindowHtml (html); a fait ma journée! Merci mon pote! –

Questions connexes