仅限澳大利亚的Google地图地理编码邮政编码0821

时间:2016-02-16 01:18:31

标签: javascript google-maps typescript google-geocoder

我正在尝试对澳大利亚邮政编码0821进行地理编码,并且无法可靠地识别北领地内存在的此邮政编码。 0820和0822工作正常。

我在做什么的例子

      var gm = google.maps;
      var gc = new gm.Geocoder();
      var grq:google.maps.GeocoderRequest = {
        address:s, region:"au"
      };
      var m = /[0-9]{4}/.exec(s);
      if(m && m.length == 1)
        grq.componentRestrictions = {
          country:'au'/*, postalCode:m[1]*/
        };
      gc.geocode(grq,(results, status)=>{
        if(status == gm.GeocoderStatus.OK) {
          var latLng = results[0].geometry.location;
          $.ajax({
            url:`${apiUrl}near/${latLng.lat()},${latLng.lng()}`,
            success: (response)=>this.parseResult(response,latLng)});
        } else {
          this.search.searchEnded();
          console.warn("Gecode Failed",results,status);
          alert('Unable to find location, try entering more specific search');
        }

这个例子https://google-developers.appspot.com/maps/documentation/javascript/examples/full/geocoding-simple似乎也显示出类似的问题,而不是找到0821,在布宜诺斯艾利斯(搜索'澳大利亚0821'或'0821澳大利亚')显示它,搜索'澳大利亚0822'作品发现。

我也尝试过使用postalCode限制,这会让事情变得更糟。

您如何可靠地对邮政编码进行地理编码?

3 个答案:

答案 0 :(得分:1)

var geocoder = new google.maps.Geocoder();
geocoder.geocode({
  componentRestrictions: {
    country: 'AU',
    postalCode: postcode
  }
}

答案 1 :(得分:0)

我建议查看AusPost's postcode api如果这是澳大利亚特定的,否则有许多API(http://www.zippopotam.us/)是一个很好的imo。

这可能只是谷歌系统中的一个错误,如果所有类似的邮政编码都有效,我可能会在他们的产品论坛中报告。

答案 2 :(得分:0)

我今天在AU的两个不同的邮政编码(5000,0800)遇到了同样的问题,并决定使用故障转移方法并拨打两个电话,而不是一个。

邮政编码5000将返回结果而0800不会,反之亦然,只使用单一方法,所以我想出了这个:

<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>

<script>
  var region = 'AU';
  var zip = '2000';
  var address = zip + ',' + region;
  geocoder = new google.maps.Geocoder();
  geocoder.geocode({
    'address': address,
    'componentRestrictions': {
      'country': region,
      'postalCode': zip
    }
  }, function(results, status) {
    //check status
    if (status == google.maps.GeocoderStatus.OK) {
      //do work here 
    } else {
      console.log('STATUS - ', status);
      console.log('Trying with only component restrictions.');
      geocoder.geocode({
        'componentRestrictions': {
          'country': region,
          'postalCode': zip
        }
      }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          console.log("Works! - ", status);
        } else {
          console.log("noResults - ", status);
        }
      });
    }
  });
</script>