2014-01-27 72 views
3

我期待添加一個功能到訂單輸入系統,以實時顯示訂單位置和指定送貨車之間的KM距離。車輛GPS跟蹤設備

客貨車有一個High Point GPS的GPS跟蹤系統,帶有一個查詢駕駛位置的API,返回LAT/LONG格式和位置地址(如果有的話)。

一旦我得到位置,我可以使用Web服務來計算兩個位置之間的距離,有誰知道什麼是使用LAT/LONG獲取車輛和地址查找送貨地點?

+2

嗨以色列,你打電話給HighPoint GPS的客戶服務嗎?他們說了什麼? –

+0

是的,他們確實支持API來獲取車輛的LAT/LONG,但是我需要獲得距離我的應用程序的訂單位置 –

+0

您正在尋找直線距離還是行駛距離?由於我們談論的是車輛和目的地,它看起來更像是後者,這是一個與前者不同的問題。這輛麪包車可能在100碼外,但是在一些鐵軌的錯誤一側,必須開幾英里才能到達目的地。 – cdkMoose

回答

5

這取決於你已經使用的其他服務。例如,我們已經使用谷歌地圖來顯示路線,所以我們使用他們的geocoding service將地址翻譯爲座標,以及their distance service來計算距離。

1

我已經做到了這一點,但在Java中,也許你可以將它移植到C#,沒有很大的努力。

這對距離短於2000公里的距離非常準確,然後它可以與實際距離有所不同。這是由於地球曲率。但是對於很小的距離,你可以認爲它對結果沒有影響或影響很小。

這是我發現有用的link

另一個link,在C#中的Haversine的實現。

希望它有幫助。費德里科最好的問候。

public String execute(String plat1, String plon1, String plat2, String plon2) { 
     String distance; 
     double lat1, lon1, lat2, lon2; 
     try{ 
      lat1 = Double.parseDouble(plat1); 
      lon1 = Double.parseDouble(plon1); 
      lat2 = Double.parseDouble(plat2); 
      lon2 = Double.parseDouble(plon2); 
     } catch (Exception e){ 
      lat1 = 0.0d; 
      lon1 = 0.0d; 
      lat2 = 0.0d; 
      lon2 = 0.0d; 
     } 

     //theta and distance 
     double theta = lon1 - lon2; 
     double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); 

     //distance 
     dist = Math.acos(dist); 
     dist = rad2deg(dist); 
     dist = dist * 60 * 1.1515; 
     dist = dist * 1.609344; 

     //convert to meters 
     dist = dist * 1000; 

     //output in meters 
     distance = Double.toString(dist); 
     return distance; 
    } 

    private double deg2rad(double deg) { 
     return (deg * Math.PI/180.0); 
    } 

    private double rad2deg(double rad) { 
     return (rad * 180.0/Math.PI); 
    } 

一點解釋:

  • (plat1,plon1)是lat和點1或起源的LNG
  • (plat2,plon2)是lat和點2或目的地的LNG
  • 方法「執行」是您要調用的方法,它返回一個包含以米爲單位的距離的字符串(可輕鬆轉換爲其他單位)
  • 兩個輔助函數被聲明爲「deg2rad」和「rad2deg」。
1

答案很簡單,你可能會發現,是一個簡單的公式:

Calculate distance between two points in google maps V3

var rad = function(x) { 
    return x * Math.PI/180; 
}; 

var getDistance = function(p1, p2) { 
    var R = 6378137; // Earth’s mean radius in meter 
    var dLat = rad(p2.lat() - p1.lat()); 
    var dLong = rad(p2.lng() - p1.lng()); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * 
    Math.sin(dLong/2) * Math.sin(dLong/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    var d = R * c; 
    return d; // returns the distance in meter 
}; 

使用谷歌地圖API將是最好的解決辦法:

https://developers.google.com/maps/documentation/distancematrix/