【问题标题】:Reverse geolocate using lat/lon to get street address使用纬度/经度反向地理定位以获取街道地址
【发布时间】:2018-09-25 20:36:32
【问题描述】:

我创建了一个使用 Google 地理编码器 API 执行反向地理定位的函数。它从浏览器的本机功能中提取纬度/经度并将它们发送给谷歌。该函数的目的是获取用户的大致街道地址(即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,但移动设备经常会返回错误的数据(最近的高速公路)。

【问题讨论】:

  • 请提供一个minimal reproducible example 来证明您的问题。
  • 如果您正在寻找建筑物的街道地址,您可能不需要输入“路线”[路线表示命名路线(例如“US 101”)],您可能需要street_address (或者可能是前提)
  • 出于代码的目的,street_address 返回的数据过多,因此使用了路由。

标签: javascript google-maps geocoding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-12-06
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多