使用纬度/经度反向定位以获取街道地址

时间:2018-09-25 20:36:33

标签: javascript google-maps geocoding

我使用Googles Geocoder API创建了一个函数来执行反向地理位置。它从浏览器的本机功能中提取经/纬度,然后将其发送到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 :(得分:0)

在查看了所做的评论(并修改了问题)之后,该函数被重写。通过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']);
        }
    });
}

到目前为止,这是我发现获取所需数据的最佳方法。