Google Maps API - несоответствие GClientGeocoder с использованием метода getLatLng?

StackOverflow https://stackoverflow.com/questions/408444

  •  03-07-2019
  •  | 
  •  

Вопрос

Я заметил, что мой геокодер непоследователен в коде, показанном ниже, потому что перед вызовом метода "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

На самом деле я обнаружил, что причиной этого несоответствия был не код "verify address", а просто тот факт, что maps 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);
    }

Другие советы

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

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

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

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

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

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

Попробуйте вот так, вот так я набираю более 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
      }
    }
  );
}  

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

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

var timeout = [index_of_each_xaddr] * 225;
window.setTimeout(function() { geoCodeLookup(_xaddr, _xid, _xindex, _xhtml, _xstatus); }, timeout);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top