2012-10-31 157 views
3

我知道如何使用JavaScript通過使用下面的代碼如何計算谷歌地圖圓半徑JS把C#

var center = new google.maps.LatLng(3.2987599, 102.6872022); 
var latLng = new google.maps.LatLng(3.0987599, 101.6872022); 
var distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(center, latLng); 

計算半徑,但如何將google.maps.geometry.spherical.computeDistanceBetween轉換進入C#功能?

回答

5

之間的距離2:(LAT1,lon1)至(LAT2,lon2)

distance = acos(
    cos(lat1 * (PI()/180)) * 
    cos(lon1 * (PI()/180)) * 
    cos(lat2 * (PI()/180)) * 
    cos(lon2 * (PI()/180)) 
    + 
    cos(lat1 * (PI()/180)) * 
    sin(lon1 * (PI()/180)) * 
    cos(lat2 * (PI()/180)) * 
    sin(lon2 * (PI()/180)) 
    + 
    sin(lat1 * (PI()/180)) * 
    sin(lat2 * (PI()/180)) 
    ) * 3959 

3959是萬里地球半徑。用KM(或任何其他單位)中的 半徑替換此值,以獲得同一單元上的結果。

您可以通過比較這worked example驗證的實現:

+0

的公式是工作,JS轉換爲C#,因爲這google.maps.geometry.spherical.computeDistanceBetween的3959我使用地球半徑使用6371地球距離實例。 – Louisth

0

有關於如何計算它不與普通的C#從緯度和經度任何API的博客條目: LINK

1

我有寫C#解計算轉換

VAR distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(中心的距離,的latLng);

到C#中。以下是我使用的代碼。 6371是地球的半徑。

//Calculate distance earth between 2 coordinate point 
    double e = lat * (Math.PI/180); 
    double f = lng * (Math.PI/180); 
    double g = lat2 * (Math.PI/180); 
    double h = lng2 * (Math.PI/180); 
    double i = 
     (Math.Cos(e) * Math.Cos(g) * Math.Cos(f) * Math.Cos(h) 
     + Math.Cos(e) * Math.Sin(f) * Math.Cos(g) * Math.Sin(h) 
     + Math.Sin(e) * Math.Sin(g)); 
    double j = Math.Acos(i); 
    double k = (6371 * j); //Distance in KM 
+0

我發現如果你在網站上使用這個服務,最好在開始之前做一個簡單的檢查(節省大量的計算時間) if((lat == lat2)&&(lng == lng2 ))return 0; –