我期待添加一個功能到訂單輸入系統,以實時顯示訂單位置和指定送貨車之間的KM距離。車輛GPS跟蹤設備
客貨車有一個High Point GPS的GPS跟蹤系統,帶有一個查詢駕駛位置的API,返回LAT/LONG格式和位置地址(如果有的話)。
一旦我得到位置,我可以使用Web服務來計算兩個位置之間的距離,有誰知道什麼是使用LAT/LONG獲取車輛和地址查找送貨地點?
我期待添加一個功能到訂單輸入系統,以實時顯示訂單位置和指定送貨車之間的KM距離。車輛GPS跟蹤設備
客貨車有一個High Point GPS的GPS跟蹤系統,帶有一個查詢駕駛位置的API,返回LAT/LONG格式和位置地址(如果有的話)。
一旦我得到位置,我可以使用Web服務來計算兩個位置之間的距離,有誰知道什麼是使用LAT/LONG獲取車輛和地址查找送貨地點?
這取決於你已經使用的其他服務。例如,我們已經使用谷歌地圖來顯示路線,所以我們使用他們的geocoding service將地址翻譯爲座標,以及their distance service來計算距離。
您可以使用谷歌地圖由托馬斯·Clayson獲得地址 見答案的緯度/龍
How can I get latitude, longitude of a location programmatically or using a api
然後,你可以通過使用餘弦定理計算兩個座標之間的距離或Haversine公式 See Law of Cosines
爲源點和目標點創建兩個DbGeography實例(http://msdn.microsoft.com/en-us/library/system.data.spatial.dbgeography.distance(v=vs.110).aspx)。然後用DbGeography的距離法找出兩點之間的距離。
對於距離單位參考這篇文章:System.Data.Spatial DbGeography.Distance units?
我已經做到了這一點,但在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);
}
一點解釋:
答案很簡單,你可能會發現,是一個簡單的公式:
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/
嗨以色列,你打電話給HighPoint GPS的客戶服務嗎?他們說了什麼? –
是的,他們確實支持API來獲取車輛的LAT/LONG,但是我需要獲得距離我的應用程序的訂單位置 –
您正在尋找直線距離還是行駛距離?由於我們談論的是車輛和目的地,它看起來更像是後者,這是一個與前者不同的問題。這輛麪包車可能在100碼外,但是在一些鐵軌的錯誤一側,必須開幾英里才能到達目的地。 – cdkMoose