【问题标题】:Compute LatLngBounds from user location从用户位置计算 LatLngBounds
【发布时间】:2017-01-09 19:15:11
【问题描述】:

我正在使用 Google Maps JavaScript API v3,并且正在使用 Places API 返回自动完成结果。如果我有用户的位置,我想将从Autocomplete 返回的结果绑定到用户所在的城市。

我知道,如果我对一个位置进行地理编码,例如“美国德克萨斯州休斯顿”,Google Maps API 的部分响应将包含一个LatLngBounds,我可以将其用作Autocomplete 之类的边界.但是,因为我是通过浏览器获取用户的位置,所以我只有一组纬度和经度坐标。最直接的解决方案是对用户的位置进行反向地理编码以获取其大致区域,然后对该区域进行地理编码以获取LatLngBounds。但是,这似乎非常低效。没有这种来回的地理编码,有没有更有效的方法来实现这一点?

【问题讨论】:

  • 地点响应包含返回结果的视口/边界,但不包含任何其他地址组件。
  • 嗨,克里斯,我看到您对我的回答发表了评论(感谢您的积极评论),然后我看到了您的这个问题,并认为它看起来有点奇怪,因为我可以从自动完成中获得界限使用代码place.geometry.viewport.getSouthWest().lat().toFixed(6);(依此类推,用于构成边界的其他 3 个坐标)。这是你要找的吗?
  • 谢谢。不幸的是,我希望根据来自 JavaScript Geolocation API(内置,而不是 Google)的用户位置设置 Autocomplete 的边界,而不是从已经设置的 Autocomplete 中获取边界。我确实找到了一些解决方案,我会继续在这里发布。
  • 好的,现在我明白了,我想..你是在说navigator.geolocation.getCurrentPosition 吗?如果是这样,那么我有一个解决方案来获得比您发布的解决方案更好的边界。它从谷歌地图地理编码器中获取results[0].geometry.viewport.getSouthWest().lat().toFixed(6);,速度非常快。如果您有兴趣,请发表评论并附上我的名字,以便我收到通知。

标签: javascript google-maps google-maps-api-3


【解决方案1】:

我发现您可以从 Circle 对象中获取边界,即使没有实际在地图上绘制它。您只需创建一个以用户位置为中心的新Circle,其半径为您希望边界为多少米。例如,这会创建一个半径为 25 英里(40,233.6 米)的圆:

var circle = new google.maps.Circle({ radius: 40233.6, center: userLatLng });

然后,您只需拨打getBounds

autocomplete.setBounds(circle.getBounds());

这不是我想要的完全,但它工作得很好。

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 2011-12-01
    • 2020-08-26
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多