将 Google Maps API v3 搜索结果限制在某个国家/地区,同时将它们偏向某个位置

Posted

技术标签:

【中文标题】将 Google Maps API v3 搜索结果限制在某个国家/地区,同时将它们偏向某个位置【英文标题】:Restrict Google Maps API v3 search results to a country while biasing them to a location 【发布时间】:2019-01-24 16:58:37 【问题描述】:

我正在尝试将搜索结果限制到一个国家/地区,并将它们严重偏向到特定的纬度/经度(但不限制)。

我使用“边界”字段将 API 返回的搜索结果偏向于用户的位置 (documentation)。这很好用,但是,我还需要将返回的结果限制在一个国家/地区。

我为此使用了“地区”字段,但它不会将结果限制在某个国家/地区,只会对它们产生偏见。我尝试使用“componentRestrictions”字段将结果限制在一个国家/地区。这很好用,但是,我最初设置的位置偏差(使用“边界”字段)似乎停止工作(或者至少现在工作方式不同了)。

关于如何在这里实现我的目标有什么想法吗?

示例

我正在发送“35 bastion st”的地理编码请求。区域设置为 CA(加拿大),边界设置为加拿大不列颠哥伦比亚省温哥华周围 2.5 度。可以出现两个搜索结果:一个在加拿大安大略省的多伦多,另一个在加拿大不列颠哥伦比亚省的纳奈莫。我希望 Nanaimo 会出现在这种情况下,因为它的位置更近,而且确实如此。关联: https://maps.googleapis.com/maps/api/geocode/json?address=35%20bastion%20st.&region=CA&bounds=46.7827,-125.6207|51.7827,-120.620&key=AIzaSyD3y1Mk-vZjfgqg1GB_dOWMDo004oY8xus

现在,如果我有相同的请求但应用了国家/地区过滤器,我希望返回相同的结果,但事实并非如此。关联: https://maps.googleapis.com/maps/api/geocode/json?address=35%20bastion%20st.&region=CA&bounds=46.7827,-125.6207|51.7827,-120,%20-122.1207&components=country:CA&key=AIzaSyD3y1Mk-vZjfgqg1GB_dOWMDo004oY8xus

编辑

更正了第二个链接: https://maps.googleapis.com/maps/api/geocode/json?address=35%20bastion%20st.&bounds=46.7827,-125.6207|51.7827,-120.620&components=country:CA&key=AIzaSyD3y1Mk-vZjfgqg1GB_dOWMDo004oY8xus

【问题讨论】:

请提供一个Minimal, Complete, and Verifiable example 允许重现该问题,包括示例搜索字词、预期和实际结果,并解释为什么您认为偏差不再起作用。 @MrUpsidown 感谢您的回复。我添加了一个示例查询。如果我的示例中有不清楚的地方,请告诉我。 我已经用更正的第二个链接编辑了您的问题,因为您的界限有问题。我认为不需要同时使用区域 国家过滤器,因此我也删除了该区域。我仍然得到相同的结果(多伦多),这没有多大意义......我会尝试更多的东西。 我使用 JS API 中的 Geocoder 类观察到相同的行为。我打开了an issue about it。请在问题跟踪器中为问题加注星标,以便收到任何更新的通知! jsfiddle.net/upsidown/cu26svew 看来问题是由 35 Bastion st. 的合成 Place ID 引起的。在 Nanaimo (EiozNSBCYXN0aW9uIFN0LCBOYW5haW1vLCBCQyBWOVIgM0ExLCBDYW5hZGEiGhIYChQKEgmD8wBXWKGIVBHqqdKOQhsrxRAj) 中,可以通过输入“35 Bastion st. Nanaimo”来解决问题。如果您在其他地址也遇到这种情况并使用正确的 Place ID,请在此处提供:) 【参考方案1】:

根据 Google 的说法,这不是错误(请参阅此处:https://issuetracker.google.com/issues/123557217)。

根据我们的工程师的说法,这是按预期工作的。

原因是在使用这两个参数时,国家组件将优先考虑,因为两者的用例完全不同。

此外,“35 Bastion st”非常模糊,应该使用自动完成功能进行搜索,其中视口/边界可以更好地影响结果。

【讨论】:

以上是关于将 Google Maps API v3 搜索结果限制在某个国家/地区,同时将它们偏向某个位置的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Google Maps v3 API 中删除带有 mysql 数据的标记?

带标签的 Google Maps API v3 标记

如何自定义附近地点搜索返回的结果,Google Maps JS API V3

Google maps API V3 - 无法对 AutocompleteService 预测进行地理编码

Google Maps API V3 - 边界内最近的路线

Google Maps API v3:如何以 2 个动态地址为中心?