地理编码器不能正确返回位置

时间:2014-07-02 18:59:15

标签: google-maps-api-3 jquery-plugins

我有两个包含7个位置的纬度和经度的数组,我使用以下内容 获取这7个点位置的代码:

var geocoder;
initialize();
codeLatLng();
function initialize() {

geocoder = new google.maps.Geocoder();

}

 function codeLatLng() {
var arrlat=[45.95268273, 47.00196833,45.99168238, 46.2186456, 45.91612197, 45.91606814,     45.91606814];
var arrlon=[-66.68426012, -65.56480221, -63.98068545, -64.44419501, -66.74801471,      -66.74810832, -66.74810832];
  var input = document.getElementById("latlng").getAttribute('value');
 console.log(input);
var latlngStr = input.split(",", 2);
   var lat = parseFloat(latlngStr[0]);
   var lng = parseFloat(latlngStr[1]);
   for(var i=0;i<arrlat.length;i++)
  {    
        var latlng = new google.maps.LatLng(arrlat[i], arrlon[i]);
        geocoder.geocode({
            'latLng': latlng
        }, function(results, status) {

            //document.getElementById("test").innerHTML = '' +      (results[4].formatted_address); + ''
            alert(results[4].formatted_address);
        });
  }

}

每当我用5个较少的元素为数组提供代码时,代码正常工作但是超过5个,我得到5个警告,显示前5个元素的位置但是对于最后2个,我得到以下错误:

未捕获的TypeError:无法读取null

的属性“4”

以下是Jfiddle链接:

link

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

代码更具防御性。使用前请检查响应状态。如果不是“OK”,则不会有任何结果要处理。

function codeLatLng() {
    var arrlat=[45.95268273, 47.00196833,45.99168238, 46.2186456, 45.91612197, 45.91606814, 45.91606814];
    var arrlon=[-66.68426012, -65.56480221, -63.98068545, -64.44419501, -66.74801471, -66.74810832, -66.74810832];
 var input = document.getElementById("latlng").getAttribute('value');
console.log(input);
    var latlngStr = input.split(",", 2);
    var lat = parseFloat(latlngStr[0]);
    var lng = parseFloat(latlngStr[1]);
    for(var i=0;i<arrlat.length;i++)
    {    
            var latlng = new google.maps.LatLng(arrlat[i], arrlon[i]);
            geocoder.geocode({
                'latLng': latlng
            }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK ) {
                //document.getElementById("test").innerHTML = '' + (results[4].formatted_address); + ''
                if (results.length >= 5)
                  alert(results[4].formatted_address);
                else alert("less than 5 results");
            } else alert("reverse geocode failed, status="+status);
            });
    }

}

请参阅documentation on Status Codes了解失败代码的含义。