Обратный геолокации, используя широту / долготу, чтобы получить адрес улицы - PullRequest
0 голосов
/ 25 сентября 2018

Я создал функцию, использующую API Googles Geocoder для выполнения обратной геолокации.Он извлекает лат / лон из собственных функций браузера и отправляет их в Google.Назначение функции - получить приблизительный адрес пользователя (например, 123 Fake Street).Код города / муниципалитета, провинции / штата, страны и почтового индекса не требуется, только адрес улицы.

function geoSuccess(pos) {
    Geocoder = new google.maps.Geocoder;
    Geocoder.geocode({location: {lat:pos.coords.latitude,lng:pos.coords.longitude}}, function(r, s) {
        if (s === 'OK') {
            var found = false,
                    x = 0;
            do {
                if (r[x].address_components[0].types.indexOf('route') !== -1) {
                    found = true;
                }
                x++;
            } while(!found && x < r.length);
            alert(r[x-1].address_components[0].long_name);
        }
    });
}

В зависимости от того, как работает функция, она просматривает полученный JSON для поиска маршрута.Однако существует несоответствие для мобильных устройств, где точность отличается от настольных компьютеров.Несмотря на поиск route, часто мобильные устройства будут возвращать либо неправильные данные (ближайшее шоссе).

1 Ответ

0 голосов
/ 26 сентября 2018

После просмотра сделанных комментариев (и пересмотра вопроса) функция была переписана.Вложенные циклы через JSON были созданы для подсчета всех уникальных данных из запроса.Исходя из этого, уличный адрес был воссоздан вручную вместо того, чтобы полагаться на Google, чтобы получить желаемый результат.

function geoSuccess(pos) {
    var Geocoder = new google.maps.Geocoder;
    Geocoder.geocode({location: {lat:pos.coords.latitude,lng:pos.coords.longitude}}, function(r, s) {
        if (s === 'OK') {
            var addr = [];
            r.each(function(o) {
                o.address_components.each(function(a) {
                    addr[a.types.join('.')] = a.long_name
                });
            });

            alert(addr['street_number']+' '+addr['route']);
        }
    });
}

Пока что это лучший способ, который я нашел для получения нужных мне данных.

...