Как ограничить результаты API Карт Google, чтобы предотвратить возврат оценок по несуществующим адресам - PullRequest
0 голосов
/ 20 июня 2019

Я создаю кнопку на веб-странице, которая возвращает широту и долготу адреса, введенного в форму с помощью карт Google. Это прекрасно работает, когда адрес действителен, но также возвращает результаты для недействительных адресов. Я попытался использовать geometry.location_type для ограничения типов местоположения на крыше, но этого недостаточно, поскольку Google возвращает «rooftop» для таких запросов, как «1 b fl» или «1 atlanta ga» - явно недействительные адреса. В случае «1 atlanta ga» он возвращает отформатированный_адрес «401 Moreland Ave NE, Atlanta, GA 30307, ​​USA». Как мне убедиться, что он возвращает только точные или хотя бы точные результаты? В этих случаях я не получаю сообщений об ошибках.

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

function geocodeAddress(address) {
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == 'OK') {
            var locationType = results[0].geometry.location_type;
            if (results.length > 1) {
                $('#errorMessage').text('Too many results')
            } else {
                if (locationType != "ROOFTOP") {
                    $('#errorMessage').text('May not be accurate')
                }
             $('#Location_Latitude').val(results[0].geometry.location.lat());
             $('#Location_Longitude').val(results[0].geometry.location.lng());
            }
        } else {
            console.log('Unable to get coordinates at this time: ' + status);
        }
    });
}

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

Это результат, который я получаю, используя приведенный выше пример Грузии:

0:
address_components: (9) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
formatted_address: "401 Moreland Ave NE, Atlanta, GA 30307, USA"
geometry:
location: _.R {lat: ƒ, lng: ƒ}
location_type: "ROOFTOP"
viewport: _.Cd {na: Bd, ga: xd}
__proto__: Object
place_id: "ChIJJ72T1agG9YgR7f1FJRUZsEc"
plus_code: {compound_code: "QM82+3F Atlanta, Georgia, United States", global_code: "865QQM82+3F"}
types: (5) ["bar", "establishment", "food", "point_of_interest", "restaurant"]
__proto__: Object
length: 1
__proto__: Array(0)

1 Ответ

0 голосов
/ 20 июня 2019

Проверьте значение "частичное совпадение" в ответе:

https://developers.google.com/maps/documentation/geocoding/intro#geocoding

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

  • Частичные совпадения чаще всего встречаются для уличных адресов, которые не существуют в местности, которую вы передаете в запросе. Частичные совпадения также могут быть возвращены, когда запрос соответствует двум или более местоположениям в одном и том же месте. Например, «21 Henr St, Бристоль, Великобритания» вернет частичное совпадение как для Henry Street, так и для Henrietta Street. Обратите внимание, что если запрос включает компонент адреса с ошибкой, служба геокодирования может предложить альтернативный адрес. Предложения, инициированные таким образом, также будут помечены как частичные совпадения.

...