Google géocodage retourne le même ensemble de latitude / lng pour plusieurs adresses différentes. Lat / Lng les coordonnées de la ville ou du canton et ne pas répondre

voix
0

J'envoie les google.geocoder plusieurs adresses, mais les valeurs dans les résultats [0] .geometry.location sont tous les mêmes. Je crois avoir pris en compte la nature asynchrone de l'appel à l'aide d'un rappel. Quand j'ajouter des alertes pour voir les valeurs retournées, les adresses indiquées dans le geocoder.geocode ({ « adresse »: addr} ... sont tous corrects, l'état de retour est « ok », mais le lat / long sont les mêmes pour chaque appel. Je pas très bien versé en JavaScript, et je suis nouveau dans l'environnement .net, de sorte que toute aide serait grandement appréciée.

Ce code a parfaitement fonctionné de 4/1/2012 jusqu'à un certain temps près de Décembre ou au début de 2013. Est-ce que quelque chose a changé avec l'API Google? Je l'ai regardé sur le site Web de Google, mais ne trouve rien.

Voici mon premier appel:

    <script type=text/javascript src=http://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false></script>

<script type=text/javascript>   

 var geocoder;
 var map;
 var directionsDisplay;
 var directionsRenderer;
 var startPoint;
 var endPoint;

 function initialize() 
 {
  geocoder = new google.maps.Geocoder();

   codeAddress();
   var myOptions = 
   {
    zoom: 12,
    mapTypeId: google.maps.MapTypeId.ROADMAP
   }
    map = new google.maps.Map(document.getElementById(map_canvas), myOptions);  

   var trafficLayer = new google.maps.TrafficLayer();
   trafficLayer.setMap(map);

   setMarkers(map);

   google.maps.event.addListener(map, 'click', function(event) {
   dirMarker(event.latLng);
   startPoint = event.latLng;
      });
  }


 function codeAddress() 
 {
   var address =  document.getElementById(<%=hCVT.ClientID%>).value;

   geocoder.geocode( { 'address': address}, function(results, status) {

     if (status == google.maps.GeocoderStatus.OK) {
      alert(Status:  + status + res from CODE ADDRESS --  +  results[0].geometry.location);  //TO REMOVE
     map.setCenter(results[0].geometry.location);
    } else {
      alert(Geocode of CVT was not successful for the following reason:  + status);
     }
   });
 }

La fonction de définir des repères et des informations de la fenêtre d'informations (j'ai retiré une partie du code qui semblait hors de propos à la question)

    function setMarkers(map) 
    {
     // Add markers to the map

      var shape = {
      coord: [1, 1, 1, 20, 18, 20, 18 , 1],
      type: 'poly'
     };

  var places = new Array([,,,,]);
     var xx = String; 
     xx = document.getElementById(<%=addys.ClientID%>).value;
     var placeholder = xx.split(,);

     var latlng;


     var i = 0;
     for(var y = 0; y < (placeholder.length / 5 - 1); i=i+5)
     {

     places[y, 0] = placeholder[i];
     places[y, 1] = placeholder[i+1]; //Unit Status
     places[y, 2] = placeholder[i+2]; // Long - not used
     places[y, 3] = placeholder[i+3]; // Zindex
     places[y, 4] = placeholder[i+4]; // HTML for information window

     addr = places[y,0];
     ustat = places[y,1];   
     zind = places[y,3];
     iwdata = places[y,4];

     getLatLong(addr, iwdata, ustat, zind, function(latlng, addr, iwdata, ustat, zind)   {






var marker = new google.maps.Marker({
     position: latlng,
     map: map,
     html: iwdata,
     icon: pinImage,
     shadow: pinShadow,
     shape: shape,
     title: addr,
     zIndex: parseInt(places[y,3])
     });

   var infowindow = new google.maps.InfoWindow({
           content: iwdata}); 



  });

   y = y + 1;
  }

   }

La fonction où je crois que le problème réside suit. Comme il y avait plusieurs adresses étant envoyées à Google, j'ai ajouté un délai d'attente construit en afin de ne pas dépasser les limites. Encore une fois, tout cela a fonctionné pendant environ 8 mois et a soudainement arrêté. Lorsque plusieurs marqueurs utilisés pour afficher sur la carte, il y a maintenant un marqueur qui est écrit sur qu'apparente, car le retour lat / lng est le même que l'appel initial dans la fonction codeAddress (). Dans un effort pour trouver une solution que j'ai ajoutais des alertes pour me montrer les valeurs de retour. Je recevais confondu avec les valeurs de Bugzilla comme elles me conduiraient vers le javascript Google qui était complètement sur ma tête.

     function getLatLong(addr, iwdata, ustat, zind, callback){

       geocoder.geocode( { 'address': addr}, function(results, status){       
        if (status == google.maps.GeocoderStatus.OK){                       
          callback(results[0].geometry.location, addr, iwdata, ustat, zind);
            } else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {

             window.setTimeout(function() {self.getLatLong(addr, iwdata, ustat, zind, callback);
             },500);
            } else {
            alert(Address Geocode failure:  + addr +  ====  + status + Y value:  + zind +  res --- + res);
            }
    });
    }

Est-ce que quelqu'un peut m'aider avec ça?

Créé 22/02/2013 à 16:05
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Eh bien, après quelques longues heures de regarder ce code en essayant de le comprendre, je me suis finalement tombé sur quelque chose en utilisant des alertes intelligemment placés. Apparemment, la variable adr contenait « ' » et le géocodage n'a pas été en mesure de fournir des données lat / lng en conséquence. Ajusté cette ligne:

addr = places[y,0].replace(/'/g, "");

Tout fonctionne maintenant.

Créé 28/03/2013 à 18:42
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more