2013-02-22 2 views
0

Я отправляю google.geocoder несколько адресов, но значения в результатах [0] .geometry.location одинаковы. Я считаю, что я учитывал асинхронный характер вызова, используя обратный вызов. Когда я добавляю предупреждения, чтобы увидеть возвращаемые значения, адреса, переданные в geocoder.geocode ({'address': addr} ... все правильно, статус возвращается «ok», но lat/long одинаковы для каждый звонок. Я не очень хорошо разбираюсь в JavaScript, и я новичок в среде .net, поэтому любая помощь будет принята с благодарностью.Google Geocoder возвращает тот же набор lat/lng для нескольких разных адресов. Lat/Lng - это координаты города или поселка, а не адрес

Этот код отлично работал с 4/1/2012 до некоторого времени в декабре или начале ? 2013. Что-то изменилось с API Google Я посмотрел на веб-сайте Google, но не может найти что-нибудь

Вот мой первоначальный вызов:.

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

Функция для установки информации маркеров и информационного окна (я удалил часть кода, который, казалось, не имеет отношения к вопросу)

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

    } 

функция, где я считаю, что проблема заключается следующим образом. Поскольку в Google было отправлено несколько адресов, я добавил встроенный тайм-аут, чтобы не превышать ограничений. Опять же, все это работало около 8 месяцев и внезапно прекратилось. Там, где на карте было показано несколько маркеров, теперь есть один маркер, который кажется написанным, потому что возврат lat/lng совпадает с начальным вызовом в функции codeAddress(). Чтобы найти решение, я добавлял предупреждения, чтобы показать мне возвращаемые значения. Я смущался с ценностями bugzilla, так как они подведут меня к javascript google, который был полностью над моей головой.

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

Может ли кто-нибудь мне помочь?

ответ

0

Ну, после долгих часов просмотра этого кода, пытаясь понять это, я, наконец, наткнулся на что-то, используя смарт-оповещения. По-видимому, переменная addr содержала «», и геокодер не смог предоставить данные lat/lng в результате. Настроена эта линия:

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

Все работы сейчас.