2014-07-02 103 views
-1

我有一個包含緯度和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我收到以下錯誤:

遺漏的類型錯誤:無法讀取屬性「4」空的

這裏是Jfiddle鏈接:

link

燦有人幫忙嗎?

+1

您不檢查地理編碼器返回的狀態。你得到了一個OVER_QUERY_LIMIT狀態響應[更新小提琴](http://jsfiddle.net/LSDH7/1/) – geocodezip

回答

1

代碼更防守。使用前檢查響應的狀態。如果不是「確定」,則不會有任何結果需要處理。

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

+0

非常感謝,我有一個問題,在陣列中有7點,但我得到6個位置,我得到1警報說:超過查詢限制。這是什麼意思?我檢查了所有的觀點,看起來他們都是正確的。你有什麼想法嗎?來自[文檔](https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingStatusCodes)的 –

+1

:google.maps.GeocoderStatus.OVER_QUERY_LIMIT表示您已超過配額。有關更多信息,請參閱適用於非商業用戶的Maps for Business文檔中的超出使用限制的文章.'大多數情況下您超過了速率限制,因爲_geocoding_似乎允許〜10個調用,似乎是反向地理編碼的數量較小。 – geocodezip

+0

謝謝你幫了我很多:) –

相關問題