0

我最近使用 Google Maps V3 Js API 开发了一个经销商地理定位平台,但是我意识到当用户输入邮政编码时,地理定位很差。

例如,如果用户搜索 13001(马赛第一区),则地理定位是在 Aix-en-Provence(其 INSEE 代码为 13001)上完成的。13007(马赛第 7 区)同上,返回距马赛 20 公里的 Auriol。

似乎这是以下返回错误坐标的代码:

function GoogleGeocode(){
    geocoder = new google.maps.Geocoder();
    this.geocode = function(address, callbackFunction) {
        geocoder.geocode( { 'address': address}, function(results, status) {
          if (status === google.maps.GeocoderStatus.OK) {
            var result = {};
            result.latitude = results[0].geometry.location.lat();
            result.longitude = results[0].geometry.location.lng();                        
            callbackFunction(result);
          } else {
            if (settings.geocodeErrorAlert != "") {
              alert(settings.geocodeErrorAlert + status);
            }
            callbackFunction(null);
          }
        });
    };
  }

你有解决这个问题的解释和解决方案吗?

谢谢你们

4

1 回答 1

0

我遇到了同样的问题,我设法通过将搜索字符串中的数字传递给地理编码器的附加参数来解决它。

    var rawAddress = jQuery('#postcode').val();
    var components = {};

    // Test if the address only contains digits
    if(/^\d+$/.test(rawAddress)){
        components.postalCode = address;
    }
    var geocoder = new google.maps.Geocoder();
        geocoder.geocode({address: address, componentRestrictions: components}, geocoderCallback);

在此示例中,邮政编码正确发送,仅当搜索不包含任何其他内容时。

如果要使用位于更复杂搜索字符串中的邮政编码,则需要从中提取数字子字符串,如下所示:

var rawAddress = jQuery('#postcode').val();
var digits = rawAddress.match(/\d+/g);

if(digits != null && digits.length > 0){
            for(var i = 0 ; i < digits.length ; i++){
                if(digits[i].length == 5){
                    components.postalCode = digits[i];
                    address = address.replace(digits[i], '');
                }
            }
        }
于 2016-03-16T10:24:32.757 回答