Google Maps Geocoding APi 不返回 lat 和 long

Posted

技术标签:

【中文标题】Google Maps Geocoding APi 不返回 lat 和 long【英文标题】:Google Maps Geocoding APi not returning lat and long 【发布时间】:2016-09-18 08:52:24 【问题描述】:

我正在使用地理编码 API 将地址转换为纬度和经度坐标值。我确实收到了结果,但 latlong 为空。其他 SO 帖子提到地理编码器请求是异步的,谷歌只是没有足够快地返回数据。如果这是问题,我不明白如何为我的代码解决这个问题。

var coords = [];
var address = '1600 Pennsylvania Ave NW, Washington, DC 20500';
var geocoder = new google.maps.Geocoder();
geocoder.geocode('address': address, function( results, status ) 
        if (status === google.maps.GeocoderStatus.OK) 
            coords[0] = results[0].geometry.location.lat();
            coords[1] = results[0].geometry.location.lng();
        
        else 
            coords = 'Could not retrieve coordinates for: ' + address;
        
    );
return coords;

即使我使用众所周知的地址,我仍然没有经纬度。

结果对象:

这真的是问题还是我使用的代码有问题?我该如何解决这个问题?

【问题讨论】:

你不能从异步回调函数中返回任何东西,你需要在数据存在的时候/在哪里使用那里的数据 那么这个文档的意义是什么:developers.google.com/maps/documentation/javascript/geocoding 它提到了返回的所有内容,包括几何:location: LatLng...这是我需要的。 相关/可能重复的问题:Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference。 lat/lng 返回(如果结果为“OK”),它们只是在回调函数中返回coords的值返回给调用者功能。 很好的链接,但这就是我所指的。听起来这可能是一个异步问题,但我不明白如何解决这个问题。将结果传递给另一个函数如何让 Google 有更多时间响应请求的完整信息?我无法想象我是唯一遇到过这个问题的开发人员。网上没有关于可能修复的示例的信息。 一个选项(在链接的问题中描述)是一个承诺。 【参考方案1】:

很久以前就有人问过这个问题,但是您的代码给了我解决问题的提示。 API 调用返回的响应只有函数 lat 和函数 lgt,这就是没有坐标的原因。您必须调用问题中指定的函数

coords[0] = results[0].geometry.location.lat();
coords[1] = results[0].geometry.location.lng();

如果你 console.log(coords),你可以看到结果。

【讨论】:

谢谢!这也是一个很好的解决方案。注意:无论多久前发布的问题都无关紧要。我总是很感激答案/建议/想法。谢谢!!【参考方案2】:

最终使用它来解决问题:

var request = new XMLHttpRequest();
request.open( 'GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=' + address, false);
request.send( null );

不过,我必须设置 false 以保持请求同步。似乎这是/将被弃用,但出于我的目的,它应该没问题。我现在可以通过执行以下操作来解析 json:

var request = new XMLHttpRequest();
request.open( 'GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=' + address, false);
request.send( null );

我认为这很好。只希望 Geocoder 文档记录异步问题并提供更好的解决方案。

【讨论】:

这不是一个好主意,你应该在匿名函数的末尾调用一个(新的)函数,在那里坐标获取值。 如果您有代码示例要分享,请这样做以证明您的观点。上面的工作很好,因为除了这个内部项目之外,这不是对任何人开放的代码库。我们已经记录了限制和解决方法。所以是的,这是一个好主意,这样我们就可以继续前进。 这个对地理编码结果做了一些事情:google-developers.appspot.com/maps/documentation/utils/geocoder

以上是关于Google Maps Geocoding APi 不返回 lat 和 long的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Geocoding API - 使用 API 密钥拒绝请求

Google Maps Geocoding API 使用限制

Google Maps Geocoding API(如何获取纬度/经度)

使用 Google Maps JavaScript API v3 和 Geocoding API 映射多个位置

Google Maps (Reverse) Geocoding API 应该只显示 Cityname

Google Maps Geocoding APi 不返回 lat 和 long