2012-11-06 107 views
1

我使用谷歌地圖API來保存一個點的地址數據庫。從谷歌地圖反向地理編碼API

遇到了我無法決定的第三天的問題。你能給我一些建議嗎?

我循環遍歷地圖上標記的所有點,其中使用geotsoder.geoсode可識別並使用ajax將此地址寫入數據庫。

例子:

function saveAddress(marker_points) 
{ 
    var i = 0; 
    id = 0; 
    address = []; 
    var count = 0; 
    points = []; 
    for(i in marker_points) 
    { 
     var geocoder = new google.maps.Geocoder(); 
     geocoder.geocode({'address': marker_points[i]},function(results, status){ 
      address = results[0].formatted_address; 
     }); 

    $.ajax({ 
     type: "POST", 
     url: "/user.view.location.phone_id-{/literal}{$iPhoneId}{literal}.html", 
     cache: false, 
     data: "address=" + address + "&location_point=" + marker_points[i], 
     dataType: "html", 
     async: false, 
     timeout: 5000, 
     success: function (data) { 
     } 
    }); 
} 
} 

但在阿賈克斯通過最後一點,即寫在數據庫返回的最後地址以及該地址的最後一個點。

你能告訴我可能是什麼問題以及如何解決問題,因爲他嘗試了所有的選擇,它不起作用?

回答

0

您可以使用函數閉與響應的請求關聯。

Example using geocoded addresses:

它們的功能是得到的 「i」 是封:

function geocodeAddress(i) { 
    geocoder.geocode({'address' : locations[i]}, 
     function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results[0].geometry.location); 
      createMarker(results[0].geometry.location, i); 
      } else { 
      alert('Geocode was not successful for the following reason: ' 
        + status); 
      } 
    }); 
}  
+0

非常感謝,你幫了我很多,它的工作 – user1802647

0

我想你的腳本有時可能會在從geocoder.geocode獲得響應之前調用ajax方法。嘗試把$就法中的

function(results, status){ 
    address = results[0].formatted_address; 
} 

使你的代碼的片斷看起來是這樣的:

var marker_points = ["50.463425,30.508120","50.465822,30.514380","50.465317,30.515609"]; 

for(i in marker_points) { 
     codeAndSendAddress(marker_points[i]); 
} 

function codeAndSendAddress(point){ 
    var mp = point.split(',');//Extract numbes from string 
    var latLng = new google.maps.LatLng(mp[0],mp[1]) // create latitude/logitude object 


    geocoder.geocode({ 'latLng': latLng}, function(results, status) { 
     if(status == google.maps.GeocoderStatus.OK) { make sure location was found 

      var geocodedAddress = results[0].formatted_address; 
      var geocodedLocationPoint = results[0].geometry.location; 

      $.ajax({ 
       type: "POST", 
       url: "/user.view.location.phone_id-{/literal}{$iPhoneId}{literal}.html", 
       data: 'address='+geocodedAddress+ 
       '&geocoded_location_point='+geocodedLocationPoint+ 
       '&location_point='+point, 
       timeout: 5000, 
       success: function (data) {} 
      }); 

     } 
    }); 
} 
+0

我建議,而不是數據: 「地址=」 +地址+ 「&location_point =」 + marker_points [我]你可能只需傳遞一個對象:data:{address:address,location_point:marker_points [i]}這將幫助您避免在查詢字符串中轉義特殊字符的所有問題 –

+0

謝謝,但不幸的是它沒有工作 仍然爲所有地址後一點是 – user1802647

+0

好吧,2件事情:1)C你會展示一些示例marker_points包含哪些變量? 2)爲什麼你要聲明地址= []; ?我做了一些修改 –