Подтвердить что ты не робот

Геокодирование api над пределом запроса

Я использую API геокодирования на стороне сервера для перевода адресов в latlng. Я столкнулся с статусом OVER_QUERY_LIMIT, хотя: - сервер не превышал 2500 ограничений (всего несколько запросов в этот день) - он не выполнял много запросов одновременно (всего один запрос за раз)

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

Спасибо заранее.

4b9b3361

Ответ 1

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

function Geocode(address) {
    geocoder.geocode({
        'address': address
    }, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            var result = results[0].geometry.location;
            var marker = new google.maps.Marker({
                position: result,
                map: map
            });
        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {    
            setTimeout(function() {
                Geocode(address);
            }, 200);
        } else {
            alert("Geocode was not successful for the following reason:" 
                  + status);
        }
    });
}

Обновление: крики, случайно затушеванные на стороне сервера. Вот версия С#:

public XElement GetGeocodingSearchResults(string address)
{
    var url = String.Format(
         "https://maps.google.com/maps/api/geocode/xml?address={0}&sensor=false",
          Uri.EscapeDataString(address)); 

    var results = XElement.Load(url); 

    // Check the status
    var status = results.Element("status").Value;

    if(status == "OVER_QUERY_LIMIT")
    {
        Thread.Sleep(200);
        GetGeocodingSearchResults(address);
    }else if(status != "OK" && status != "ZERO_RESULTS")
    {
        // Whoops, something else was wrong with the request...     
    }

    return results;
}

Ответ 2

У нас была эта проблема, и решение заключалось в том, чтобы отключить API Google. Если все, что вам нужно, это геокодирование, существует множество альтернатив, которые одинаково эффективны без ограничений. Мы выбрали API-интерфейс mapquest. Он был быстрее и надежнее, без ограничений на вызовы геокодирования, и мне очень нравится их API для пакетного объединения запросов геокодирования в один вызов.

Если вам нужны другие функции, очевидно, вы должны учитывать их, но в случае одной функции использование самого большого API в блоке не обязательно является лучшим выбором.

developer.mapquest.com

Ответ 3

Вы также можете выполнить геокодирование на стороне клиента. Здесь статья, сравнивающая подход к выполнению клиентской части и серверного сайта.

Ответ 4

Google также возвращает тот же ответ, если найдено не найдено адреса. Это не обязательно означает, что вы превысили квоту. В любом случае вам лучше поймать исключение и реализовать спасение вокруг него.

Ответ 5

Та же проблема, что и user276648. Решил его, добавив ключ API и изменив http на https.

Ответ 6

Google, Bing, MapQuest и Yahoo! Карты (этот API еще существует?) - чрезвычайно мощные инструменты. У них есть много лошадиных сил, которые они вкладывают в интерпретацию адреса, который вы предоставляете, и делаете все возможное, чтобы превратить его в правильно отформатированный адрес для геокодирования. В определенной степени они свободны. У них есть ограничения по объему и довольно строгие условия обслуживания (TOS), которые могут быть фактором, если вы начнете использовать их услуги коммерчески и особенно если вы интегрируете его в другой продукт.

Имейте в виду, что все они выполняют "адресную аппроксимацию", а не проверку адреса. Они смогут рассказать вам примерно, где адрес будет лежать на определенной улице, если адрес существует. Они не могут сказать вам, что адрес, который вы ищете, существует. Один из способов проверить это - посмотреть свой собственный адрес на Картах Google. Увеличьте масштаб до просмотра улиц, и вы увидите, что они утверждают, что "адрес приблизительный", хотя они могут точно определить местоположение. У них просто нет главного списка адресов для сравнения и знать, какие адреса являются реальными. Для этого вам потребуется некоторая проверка адреса.

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

Есть много хороших служб проверки адресов. В интересах полного раскрытия я являюсь основателем одного - SmartyStreets.