2

我的 PHP 应用程序中有一个表单,用于搜索欧洲的位置:德国、法国、波兰、捷克共和国、西班牙、奥地利、罗马尼亚、意大利。

这是我的基本查询:

$address = "https://maps.googleapis.com/maps/api/geocode/json?address={$input}";

例如,如果用户尝试查找“mannheim”,则应返回德国曼海姆。相反,它返回美国宾夕法尼亚州的一个点。我尝试添加此地址组件限制:&components=administrative_area:EU,但这并不可靠,因为它没有找到德国曼海姆,而是指向 300 公里外的一个地方:

https://www.google.ro/maps/dir/50.5320001,6.6364339/Mannheim/@50.0388399,8.4546225,7.25z/data=!4m8!4m7!1m0!1m5!1m1!1s0x4797cc24518e3f45:0xb1e4fe7aa406e6867393.m !2d49.4874592?hl=en

如果我附加, Germany

$address = "https://maps.googleapis.com/maps/api/geocode/json?address={$input}, Germany";

那么响应是正确的。

有没有办法指定搜索应该发生的一些国家?

最后的手段是对每个国家进行单独搜索,但考虑到我搜索的大约 10-12 个国家,这真的很慢。

4

3 回答 3

1

通过国家限制限制谷歌搜索结果,如下所示:

var options = {
        componentRestrictions: {country: 'DE'}
      };

并将选项参数放在自动完成或您正在使用的其他功能中。

var autocomplete = new google.maps.places.Autocomplete(input,options);
于 2016-07-11T09:26:34.773 回答
1

看起来现在有可能:https ://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-multiple-countries#maps_places_autocomplete_multiple_countries-javascript

  // Sets a listener on a given radio button. The radio buttons specify
  // the countries used to restrict the autocomplete search.
  function setupClickListener(id, countries) {
    const radioButton = document.getElementById(id);
    radioButton.addEventListener("click", () => {
      autocomplete.setComponentRestrictions({ country: countries });
    });
  }
  setupClickListener("changecountry-usa", "us");
  setupClickListener("changecountry-usa-and-uot", [
    "us",
    "pr",
    "vi",
    "gu",
    "mp",
  ]);
于 2020-10-08T11:24:55.807 回答
0

根据谷歌文档,我们最多可以在组件过滤器中添加 5 个国家/地区 https://developers.google.com/maps/documentation/places/web-service/autocomplete

您希望将结果限制到的一组地点。目前,您可以使用组件过滤多达 5 个国家/地区。国家/地区必须作为两个字符传递,与 ISO 3166-1 Alpha-2 兼容的国家/地区代码。例如: components=country:fr 会将您的结果限制在法国境内。多个国家/地区必须作为多个国家/地区传递:XX 过滤器,带有管道字符 | 作为分隔符。例如: components=country:us|country:pr|country:vi|country:gu|country:mp 会将您的结果限制在美国及其未合并的有组织领土内的地方。

于 2021-11-16T16:22:16.263 回答