Мультизапрос 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 запрос в секунду, чтобы оставаться в допустимых пределах пользовательских сеансов.

Другие вопросы по тегам