【问题标题】:Google geocoder API: Lookup partial postal code (Germany)Google geocoder API:查找部分邮政编码(德国)
【发布时间】:2016-06-27 22:40:22
【问题描述】:

我正在尝试构建一个自动完成功能,人们可以在其中开始输入邮政编码,并在邮政编码完成之前获得有意义的建议。

现有示例

可以在此处找到现有示例:https://weisse-liste.de/de/arzt/arztsuche/

在“Ort oder Postleitzahl”中输入“120”会得到一个邮政编码以“120”开头的建议列表。我不隶属于这个网站,也不知道他们是否使用谷歌地理编码 API。 (请求发送到他们自己的服务器,然后他们对其进行处理。)

尝试使用 Google 地理编码 API

我可以使用 Google API 获得的最接近的是 http://maps.googleapis.com/maps/api/geocode/json?address=120&sensor=false&components=country:DE

但这给我的唯一结果是“formatted_address”:“Germany”,所以是整个国家。

编辑:客户端 js 与服务器端 php / 手工请求 url

现有答案提出了客户端 javascript。考虑到这个问题,这是完全有效的。

看到答案提供与上述类似的手工制作的 url 仍然会很有趣,可以在服务器端请求中使用。如果这是不可能的,没问题。通过避免向 Google 发出客户端请求,一个优势可能是访问者的隐私。我什至不是说这是个好主意,但它仍然可能是有用的信息。

【问题讨论】:

  • 为什么是 -1 ?我知道该示例向他们自己的服务器发出请求,这个问题说明了这一点。他们仍然可以向 Google 发送服务器端请求,就像 Drupal 的 Geocoder autocomplete 模块一样。但即使没有,它仍然说明了我在寻找行为方面的内容。

标签: google-maps google-maps-api-3 geocoding google-geocoder google-geocoding-api


【解决方案1】:

您现有的示例不使用 Google Geocoder,它有自己的查询: https://weisse-liste.de/api/zip/suggest?term=120

您也可以这样做,例如使用 PHP 和 MySQL,但你应该有完整的邮政编码列表。我认为这将是另一个话题。

我可以在这里向您展示一个地方自动完成的 JavaScript 示例:https://jsfiddle.net/5377x9y8/

var input = document.getElementById('pac-input');
var options = {
  types: ['(regions)'],
  componentRestrictions: {'country': 'de'}
};

var autocomplete = new google.maps.places.Autocomplete(input, options);
autocomplete.addListener('place_changed', function() {
  var place = autocomplete.getPlace();
  var address = '';
  if (place.address_components) {
        address = [
          (place.address_components[0] && place.address_components[0].short_name || ''),
          (place.address_components[1] && place.address_components[1].short_name || ''),
          (place.address_components[2] && place.address_components[2].short_name || '')
        ].join(' ');
  }
  document.getElementById('addr').innerHTML = '<div><strong>' + place.name + '</strong><br>' + address;
});

很遗憾,它没有提供完整的邮政编码列表,因为结果仅限于 5 个项目。 但我希望这可以帮助你。

【讨论】:

  • 看起来不错!我不在乎 5 项限制。但在我当前的实现中,请求发生在服务器端,使用 PHP .. 我的网络选项卡显示例如maps.googleapis.com/maps/api/place/js/…不知道有没有办法手工制作这些网址?
  • 我将另一个答案标记为“已接受”。但这并不意味着这个答案是错误的或低劣的。我只需要选择一个,另一个更接近我的个人意图。顺便说一句,我对 types=(regions) vs types=geocode 的评论同样适用于这个答案。
【解决方案2】:

【讨论】:

  • 使用types=(regions),像“520”这样的数字作为搜索字符串将被解释为邮政编码的第一个字母。哪个好。另一方面,街道名称导致“ZERO_RESULTS”。如果使用“types=geocode”,则接受街道名称,但像“520”这样的搜索字符串将被解释为门牌号。也许我可以在此基础上构建一些逻辑,以决定是使用 types=geocode 还是 types=(regions)。对于服务器端和客户端 API 请求,这个问题似乎是一样的。
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 2012-09-15
  • 2016-03-13
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多