Добавление временной задержки в геокод карты Google

#google-maps #google-maps-api-3 #google-maps-markers

#google-карты #google-maps-api-3 #google-карты-маркеры

Вопрос:

Я работаю над этой картой и пытаюсь геокодировать около 150 маркеров, но я достигаю предела геокода. Как я могу добавить временную задержку, чтобы избежать превышения предела?

Комментарии:

1. Было бы полезно, если бы вы предоставляли только код Javascript без PHP, особенно если вы хотите, чтобы ответ был включен в ваш код.

2. @Jiri Его можно легко найти, просмотрев источник предоставленной ссылки. Я включил это таким образом, поскольку ранее другие аспекты сталкивались с php.

Ответ №1:

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

 // Adding a LatLng object for each city 
function geocodeAddress(i) {
     geocoder.geocode( {'address': address[i]}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            places[i] = results[0].geometry.location;

            // Adding the markers 
            var marker = new google.maps.Marker({position: places[i], map: map});
            markers.push(marker);
            mc.addMarker(marker);

            // Creating the event listener. It now has access to the values of i and marker as they were during its creation
            google.maps.event.addListener(marker, 'click', function() {
                // Check to see if we already have an InfoWindow
                if (!infowindow) {
                    infowindow = new google.maps.InfoWindow();
                }

                // Setting the content of the InfoWindow
                infowindow.setContent(popup_content[i]);

                // Tying the InfoWindow to the marker 
                infowindow.open(map, marker);
            });

            // Extending the bounds object with each LatLng 
            bounds.extend(places[i]); 

            // Adjusting the map to new bounding box 
            map.fitBounds(bounds) 
        } else { 
            alert("Geocode was not successful for the following reason: "   status); 
        }
    })
}

function geocode() {
    if (geoIndex < address.length) {
        geocodeAddress(geoIndex);
          geoIndex;
    }
    else {
        clearInterval(geoTimer);
    }
}
var geoIndex = 0;
var geoTimer = setInterval(geocode, 200);  // 200 milliseconds (to try out)

var markerCluster = new MarkerClusterer(map, markers); 
} 
})
(); 
</script> 
  

ДОБАВЛЕНО. Вышеуказанную программу можно настроить.

(1) Временной интервал может быть уменьшен:

 var geoTimer = setInterval(geocode, 100);  // do requests each 100 milliseconds 
  

(2) Функция geocode() может выполнять несколько запросов за каждый интервал времени, например, 5 запросов:

 function geocode() {
    for (var k = 0; k < 5 amp;amp; geoIndex < address.length;   k) {
        geocodeAddress(geoIndex);
          geoIndex;
    }
    if (geoIndex >= address.length) {
        clearInterval(geoTimer);
    }
}
  

Комментарии:

1. Спасибо за ответ. Я попробую, я не разбираюсь в Javascript, поэтому, вероятно, все испорчу!

2. Не могли бы вы включить это в мой код? Начиная со строки «// Добавление объекта LatLng для каждого города» до закрытия </script> пожалуйста? Я просто попробовал и все испортил, мой javascript ужасен!

3. Я отредактировал свой код таким образом, чтобы вы скопировали его из «Добавление объекта LatLng для каждого города» в конец вашего файла. Удачи!

4. Большое спасибо. Кажется, где-то есть синтаксическая ошибка, поскольку ссылка — это просто пустая страница.

5. Я нашел синтаксическую ошибку и исправил ее. Нет ли другого способа избежать необходимости сидеть и наблюдать за каждым отображением маркера?