簡體   English   中英

計算C#中兩點之間的距離

[英]calculating distance between two points in c#

我使用此代碼,它需要兩個不同位置的經度和緯度,並計算它們之間的距離,我的代碼是

protected void Button1_Click(object sender, EventArgs e)
{
    double lat1= Convert.ToDouble(TextBox1.Text);
    double lon1= Convert.ToDouble(TextBox2.Text);
    double lat2= Convert.ToDouble(TextBox3.Text);
    double lon2= Convert.ToDouble(TextBox4.Text);

    var rlat1 = Math.PI * lat1/180;
    var rlat2 = Math.PI * lat2/180;
    var rlon1 = Math.PI * lon1/180;
    var rlon2 = Math.PI * lon2 / 180;
    var theta = lon1-lon2;
    var rtheta = Math.PI * theta/180;
    var dist = Math.Sign(rlat1) * Math.Sign(rlat2) + Math.Cos(rlat1) * Math.Cos(rlat2) * Math.Cos(rtheta);
    dist = Math.Acos(dist);
    dist = dist * 180/Math.PI;
    dist = dist * 60 * 1.1515;
    dist = dist * 1.609344 ;
    TextBox5.Text = dist.ToString("0.######");  
}

但是對於所有輸入值,我得到的結果都是NaN。請幫助我。

好吧,因為我帶領您與我以前的答案花園小徑,我移植這個給你的作品的算法:

void Main()
{
    double lat1=12.916933d, 
           lon1=77.562658d,
           lat2=12.930140d,
           lon2=77.587732d;
    double dist = GetDistanceFromLatLonInKm(lat1, lon1, lat2, lon2);
    // dist == 3.08890370651166 yay!

}

double GetDistanceFromLatLonInKm(double lat1,
                                 double lon1,
                                 double lat2,
                                 double lon2) {
  var R = 6371d; // Radius of the earth in km
  var dLat = Deg2Rad(lat2 - lat1);  // deg2rad below
  var dLon = Deg2Rad(lon2 - lon1); 
  var a = 
    Math.Sin(dLat / 2d) * Math.Sin(dLat / 2d) +
    Math.Cos(Deg2Rad(lat1)) * Math.Cos(Deg2Rad(lat2)) * 
    Math.Sin(dLon / 2d) * Math.Sin(dLon / 2d); 
  var c = 2d * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1d - a)); 
  var d = R * c; // Distance in km
  return d;
}

double Deg2Rad(double deg) {
  return deg * (Math.PI / 180d);
}

當您提供固定值時,您的計算似乎正常工作:

 
 
 
  
  var lat1 = 0d; var lon1 = 52d; var lat2 = 0d; var lon2 = -52d;
 
  

而是暗示這些轉換失敗了:

 
 
 
  
  double lat1 = Convert.ToDouble(TextBox1.Text); double lon1 = Convert.ToDouble(TextBox2.Text); double lat2 = Convert.ToDouble(TextBox3.Text); double lon2 = Convert.ToDouble(TextBox4.Text);
 
  

如果仍然遇到問題,請在這些行上放置一個斷點,然后查看 TextBox1.Text等的值。

為了更可預測地解析浮點數,最好提供區域性信息:

 
 
 
  
  Convert.ToDouble("1.2", System.Globalization.CultureInfo.InvariantCulture)
 
  

檢查小數分隔符是否有效。 它必須是逗號或點號,具體取決於您的區域設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM