Мультизапрос Google map с геокодером
Мне нужна помощь в разработке карты Google. Действительно, когда я пытаюсь геокодировать один адрес, Google дает мне всю информацию без проблем.
Но когда я пытаюсь геокодировать несколько адресов, он заканчивается, Google не отвечает, и у меня нет ответа.
Мой код:
$.ajax({
type: "POST",
url: _URL_SITE + "webservices...",
dataType: "xml",
data: parameters,
//contentType: "application/soap+xml; charset=utf-8",
contentType: "text/xml; charset=utf-8",
headers: {
Accept: '*',
SOAPAction: 'http://127.0.0.1/...'
},
success: function (xml) {
var arr = new Array(30000)
var cpt = 1
var address = [];
var address_id = [];
var codepostal = "";
var i = 0;
$(xml).find('Table').each(function () {
codepostal = $(this).find('cp').text();
address[i] = $(this).find('record_id').text() + '|' + codepostal.substring(0,3) + '* ' + $(this).find('commune').text() + '' + '';
i++;
}); // fin de la fonction jquery
traitement(address);
},
error: function () {
alert('error');
}
});
а вот функция, которая ресквестит гугл:
function traitement(addresses, callback) {
var coords = [];
var ville = "";
var cp = "";
var lattitude;
var longitude;
for (var i = 0; i < 50; i++) {
currAddress = addresses[i].split("|");
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': currAddress[1] }, function (results, status) {
if (status == 'OK') {
var coords = results[0].geometry.location
lattitude = coords.lat();
longitude = coords.lng();
var latlng = new google.maps.LatLng(lattitude, longitude);
geocoder.geocode({ 'latLng': latlng }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var elt = results[0].address_components;
for (i in elt) {
if (elt[i].types[0] == 'postal_code')
cp = elt[i].short_name;
if (elt[i].types[0] == 'sublocality')
ville = elt[i].short_name;
if (ville == "") {
if (elt[i].types[0] == 'locality')
ville = elt[i].short_name;
}
}
// function which save google's information
Save(currAddress[0], cp, ville, longitude, lattitude)
return;
} else { alert("error lat long"); }
});
} else { alert("error adresse"); }
return;
});
}
Я прочитал несколько постов об асинхронном запросе и т. Д. Но я пытаюсь понять, почему Google дает мне 0 ответов, когда итерация моего цикла "для" превышает 50 повторений.
Спасибо тебе.
1 ответ
Вы используете сервис геокодирования Maps JavaScript API. Службы в JavaScript API также имеют ограничение на сессию. В документации сказано:
Запросы на обслуживание ограничены по скорости для каждого пользовательского сеанса независимо от того, сколько пользователей совместно используют один и тот же проект. Когда вы впервые загружаете сервисный API, вам выделяется начальная квота запросов. Как только вы используете эту квоту, API вводит ограничения скорости для дополнительных запросов в секунду. Если в течение определенного периода времени выполняется слишком много запросов, API возвращает код ответа OVER_QUERY_LIMIT. Ограничение скорости на сеанс предотвращает использование клиентских служб для пакетных запросов. Для пакетных запросов используйте веб-сервисы API Карт.
https://developers.google.com/maps/documentation/javascript/usage
Изначально у вас есть корзина из 10 запросов. После того, как вы воспользовались этими запросами, вам нужно отправлять 1 запрос в секунду, чтобы оставаться в допустимых пределах пользовательских сеансов.