Геокодирование API превышает предел запроса - PullRequest
18 голосов
/ 21 марта 2012

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

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

Заранее спасибо.

Ответы [ 6 ]

34 голосов
/ 21 марта 2012

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

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);
        }
    });
}

Обновление: к сожалению, случайно замаскировано на стороне сервера.Вот версия C #:

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;
}
4 голосов
/ 21 марта 2012

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

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

developer.mapquest.com

2 голосов
/ 21 марта 2012

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

1 голос
/ 13 июня 2014

Та же проблема, что и у пользователя 276648 здесь.Решил это, добавив ключ API и изменив http на https.

1 голос
/ 10 апреля 2013

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

0 голосов
/ 21 марта 2012

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

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

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

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

...