2013-09-21 147 views
-2

在這裏我有一個代碼,將顯示用戶點擊標記時谷歌地方的API數據。函數獲取兩個位置之間的距離和時間

我也有兩個點,位置座標(緯度,經度),所以Point1[], Point2[]

我如何計算在這個地方,在顯示HTML之間公里,實時道路距離。 谷歌地圖有一個功能,將計算這個距離和時間?

CODE:

google.maps.event.addListener(marker,'click',function(){ 

     service.getDetails(request, function(place, status) { 
      if (status == google.maps.places.PlacesServiceStatus.OK) { 
      //class m_tooltip 
      var contentStr = '<div><h5>'+place.name+'</h5><p>'+place.formatted_address+'</p>'; 
      if (!!place.photos) contentStr += '<img src='+place.photos[0].getUrl({ 'maxWidth': 500, 'maxHeight': 500 })+'></img>'; 
      if (!!place.formatted_phone_number) contentStr += '<br>'+place.formatted_phone_number; 
      if (!!place.website) contentStr += '<br><a target="_blank" href="'+place.website+'">'+place.website+'</a>'; 

      var Point1 = [34,666, 56,888]; 
      var Point2 = [77.876, 45,555]; 
      contentStr += '<p>Distance in km:' + functionThatReturnRoadDistance(Point1, Point2) + '</p>'; 


      $(contentStr).dialog({ 
       modal:true 
      }); 

      } else { 
      var contentStr = "<h5>No Result, status="+status+"</h5>"; 

      $(contentStr).dialog(); 
      } 
     }); 

所以有一些谷歌地圖或相似的功能,這將返回我的地方卻道/路由距離之間米或公里的不是簡單的距離的距離???

更新:我TRU這樣:

function calculateDistances(start,stop) { 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
     origins: [start], 
     destinations: [stop], 
     travelMode: google.maps.TravelMode.DRIVING, 
     unitSystem: google.maps.UnitSystem.METRIC, 
     avoidHighways: false, 
     avoidTolls: false 
    }, callback); 
} 
    function callback(response, status) { 
    if (status != google.maps.DistanceMatrixStatus.OK) { 
    alert('Error was: ' + status); 
    } else { 
    var origins = response.originAddresses; 
    var destinations = response.destinationAddresses; 


    for (var i = 0; i < origins.length; i++) { 
     var results = response.rows[i].elements; 
     for (var j = 0; j < results.length; j++) { 
     var xxx= ""; 
     xxx += origins[i] + ' to ' + destinations[j] 
      + ': ' + results[j].distance.text + ' in ' 
      + results[j].duration.text + '<br>'; 
    return xxx; 
     } 
    } 
    } 
} 

,並把它與撥打:

var start = document.getElementById("from").value; 
     var stop = place.formatted_address; 
     contentStr += '<p>'+ calculateDistances(start,stop); + '</p>'; 

     $(contentStr).dialog({ 
      modal:true 
     }); 

,但不工作,DistanceMatrix

+0

你嘗試過什麼?這是一個很好的起點https://developers.google.com/maps/documentation/distancematrix/ – slash197

+0

我嘗試,但這是asinhron函數,所以我不能爲每個彈出窗口(對話框)調用它 – drTesla

+0

我更新我的問題與我試着做 – drTesla

回答

0

根據http://www.movable-type.co.uk/scripts/latlong.html

if (typeof(Number.prototype.toRad) === 'undefined') 
{ 
    Number.prototype.toRad = function() { 
    return this * Math.PI/180; 
    } 
} 

function getDistance(lat1, lon1, lat2, lon2) { 
    var R = 6371; // km 
    var dLat = (lat2-lat1).toRad(); 
    var dLon = (lon2-lon1).toRad(); 
    var lat1 = lat1.toRad(); 
    var lat2 = lat2.toRad(); 

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 
    return d; 
} 

這裏整合的一個例子:http://jsfiddle.net/dFqmG/(結果公里)

+0

是的,我知道,但這不是道路距離,這只是直接(AIR)地點之間的距離 – drTesla

0

這可以幫助你 Distance Matrix

+0

我知道,但我不能在彈出對話框中調用此函數,其中Point1,Point2每次都是不同的,所以有人告訴我,距離矩陣是asinhrony,我不能這樣稱呼它... – drTesla

+0

什麼是'asinhrony'? – Andy

+0

看到更新,我在控制檯中用distancematrix – drTesla

相關問題