Google Maps API - несогласованность GClientGeocoder с использованием метода getLatLng? - PullRequest
0 голосов
/ 03 января 2009

Я заметил, что мой геокодер не соответствует в коде, показанном ниже, потому что перед вызовом метода "getLatLng" я показываю 10 действительных местоположений, но после этой строки кода число точек, которые на самом деле отображаются, каждый раз отличается поиск (те же критерии поиска - между прочим) Между 5 и 10 случайными числами .. очень странно

У кого-нибудь есть подобные проблемы? Если да, то как ты их решил?

geocoder = new GClientGeocoder();
geocoder.getLatLng(address, function(point) {
if (point) {
        var icon = new GIcon();
        var marker = new GMarker(point, { icon: icon });
        GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
        map.addOverlay(marker);

Ответы [ 4 ]

1 голос
/ 24 января 2011

Я не уверен, что делает addPreCount(). Но я думаю, что очевидно, что время ожидания должно быть чем-то вроде индекса, умноженного на фактическую постоянную времени ожидания.

Таким образом, предполагая, что заданная константа тайм-аута равна 225. Тайм-аут, передаваемый оболочке геокодера, будет:

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
1 голос
/ 06 ноября 2010

Дайте ему такую ​​попытку, вот так я получаю более 34 очков за один проход:

function addAddress(address,runde) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        //alert(address + " not found");
        if (runde<5) { // rekursiv, try adress 5 times to get
            window.setTimeout(function() {addAddress(address,runde+1);}, 1000); // wait 1 second bevor next try
            }
      } else {
        var marker_add = new GMarker(point);
        //alert(marker.getLatLng());
        leftClick(0, marker_add.getLatLng()); // function, add marker to map
      }
    }
  );
}  
1 голос
/ 03 января 2009

Я видел это в моем приложении ASP.NET. Моя проблема заключалась в том, что я проверял адреса перед их отображением и

  1. Некоторые из моих адресов были неправильными.

  2. Их система проверки адресов может обрабатывать только определенное количество запросов на каждый звонок клиента.

Лучше очищать адреса перед геокодированием (IMO).

Попробуйте проверить свои адреса, а также попробуйте ограничить количество отправляемых адресов, просто чтобы проверить и убедиться, что это последовательно для каждого запроса.

Надеюсь, это поможет.

0 голосов
/ 09 января 2009

На самом деле я обнаружил, что причиной этого несоответствия был не код "проверки адреса", а вместо этого - просто тот факт, что API-интерфейс карт не требует тонны вызовов геокодера, поэтому я добавил простой тайм-аут 225 мс каждый запрос, и это сделало трюк

function preGeoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus) {
        addPreCount();

        //don't change this timeout as it was the lowest timeout that still worked w/ the api
        var timeout = parseInt(precount) * 225;

        window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
    }
...