【问题标题】:Compute Latitude and Longitude to Kilometer计算纬度和经度到公里
【发布时间】:2015-03-12 04:08:49
【问题描述】:

我正在尝试使用纬度和经度计算从 Destination1Destination2 的公里距离

Destination1(Cebu City PH) 纬度:1017.8590,经度:12353.4304

Destination2(Talisay PH) 纬度:1015.6445,经度:12350.0404

我的输出是:299.28607720457882 KM

代码:

double lat1 = Convert.ToDouble(txtLat1.Text.ToString());
double lat2 = Convert.ToDouble(txtLat2.Text.ToString());
double lon1 = Convert.ToDouble(txtLong1.Text.ToString());
double lon2 = Convert.ToDouble(txtLong2.Text.ToString());

        var R = 6378.137; // Radius of earth in KM
        var dLat = (lat2 - lat1) * Math.PI / 180;
        var dLon = (lon2 - lon1) * Math.PI / 180;
        var a =
            Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
            Math.Cos(lat1 * Math.PI / 180) * Math.Cos(lat2 * Math.PI / 180) *
            Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        string x = (R * c).ToString();
        var d = (R * c);

我尝试使用http://www.entfernungsrechner.net/en/distance/city/1717512/city/1683881这个网站来计算该目的地的公里数,输出为12.2公里

【问题讨论】:

  • 299.28607724057882km!计算到纳米的距离显然会有用
  • HoboSapiens 有什么用?你能给我一些链接或代码吗?
  • 你错过了我评论中的讽刺。
  • stackoverflow.com/a/905913/55693 可能会有所帮助。

标签: c# google-maps math


【解决方案1】:

嗯,对于初学者来说,它说的是 12.2 公里,就像你开车一样。这与您上面的 Haversine 公式的输出不同。

您应该尝试将小数放在正确的位置。我得到了 4.45 公里的更合理的结果。

https://dotnetfiddle.net/cs5Ppq

public class Program
{
    public static void Main()
    {
        double lat1 = 10.178590;
        double lat2 = 10.156445;
        double lon1 = 123.500404;
        double lon2 = 123.534304;

        var R = 6378.137; // Radius of earth in KM
        var dLat = (lat2 - lat1) * Math.PI / 180;
        var dLon = (lon2 - lon1) * Math.PI / 180;
        var a =
            Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
            Math.Cos(lat1 * Math.PI / 180) * Math.Cos(lat2 * Math.PI / 180) *
            Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
        var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
        string x = (R * c).ToString();
        var d = (R * c);
        Console.WriteLine(d);
    }
}

注意:您可以对照此http://andrew.hedges.name/experiments/haversine/ 工具检查您的结果

编辑:如果您想要最准确的数字,因为 Haversine 公式可能会低估和高估地球上极端的距离,您需要使用 Vincety 解决方案。这不适合内心脆弱的人: http://www.movable-type.co.uk/scripts/latlong-vincenty.html

【讨论】:

  • 但距离为 9KM,而距离为 4.45KM。我想它仍然缺乏。但如果它达到 7KM 及以上,那将是一个很好的答案
  • 他们计算的大概飞行距离是 9KM,因为我看不到他们是如何计算的,我不确定我是否相信它。
  • 使用 Vincenty forumla,您将获得 4449.704 米,精确到毫米。您引用的网站有误,或者正在计算机场之间的距离。
  • 此外,如果您查看他们的源代码,他们使用的坐标与您提供的坐标不同。 (10.3167200, 123.8907100); (10.2447200, 123.8494400); 产生 9.20186196876873 公里
  • 感谢您向我展示该代码。我真的无法进入那里的源代码。谢谢
猜你喜欢
  • 2010-11-18
  • 2016-10-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 2010-11-10
  • 2012-05-12
  • 2015-10-18
  • 1970-01-01
相关资源
最近更新 更多