Google geocoder returnează același set de lat / LNG pentru mai multe adrese diferite. Lat / Lng sunt coordonatele orașului sau Township și nu adresa

voturi
0

Eu trimit google.geocoder mai multe adrese, dar valorile din rezultatele [0] .geometry.location sunt toate la fel. Cred că am reprezentat natura asincronă a apelului, folosind un apel înapoi. Când am adăuga alerte pentru a vedea valorile returnate, adresele transmise în geocoder.geocode ({ „adresa“: adr} ... sunt toate corecte, starea de returnat este „ok“, dar LAT / lung sunt aceleași pentru fiecare apel. eu nu sunt foarte bine versat în JavaScript, și sunt nou pentru mediu net, asa ca orice ajutor ar fi apreciat foarte mult.

Acest cod a lucrat perfect la 4/1/2012 până la un moment dat aproape decembrie sau începutul anului 2013. Sa schimbat ceva cu API-ul Google? M-am uitat pe site-ul Google, dar nu pot găsi nimic.

Aici este apelul meu inițial:

    <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);
     }
   });
 }

Funcția pentru a seta markere și informațiile fereastra de informații (am eliminat o parte din codul care părea irelevant pentru întrebarea)

    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;
  }

   }

Funcția în cazul în care cred că problema se află urmează. Deoarece au existat mai multe adrese fiind trimise la Google, am adăugat o construit în timeout, astfel încât să nu depășească limitele. Din nou, acest lucru a lucrat tot timp de aproximativ 8 luni și sa oprit brusc. În cazul în care mai mulți markeri utilizate pentru a afișa pe hartă, acum există un marker care este părînd peste scris pentru că întoarcerea lat / lng este aceeași ca apelul inițial în funcția codeAddress (). Într-un efort de a găsi o soluție am fost adăugarea de alerte pentru a-mi arăta valorile de retur. Am fost obtinerea confundat cu valorile bugzilla așa cum m-ar lua pe la Google JavaScript, care a fost complet peste cap.

     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);
            }
    });
    }

Poate cineva să mă ajute cu asta?

Întrebat 22/02/2013 la 16:05
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Ei bine, după câteva ore lungi de holbezi la acest cod încercând să-l dau seama, în final, am dat peste ceva folosind alerte inteligent plasate. Aparent variabila adr conținea „'“, iar geocoder nu a fost în măsură să furnizeze date de latitudine / LNG, ca rezultat. Ajustat această linie:

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

Toate funcționează acum.

Publicat 28/03/2013 la 18:42
sursa de către utilizator

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