【发布时间】:2020-03-03 01:27:02
【问题描述】:
我正在 c# 中创建一个距离计算器,使用 hasrsine 方程来计算经度和纬度之间的距离,但它给出了错误的输出,任何人都知道为什么吗? 第一个 long 和 lat 值是针对威尔士(班戈)的一个地方,另一个是针对英格兰(曼彻斯特)的一个地方 代码如下:
using System;
public static class Program
{
static double toRadians(double angle)
{
return (angle * Math.PI) / 180;
}
static double CalcDistance(double lon1, double lon2, double lat1, double lat2)
{
lon1 = toRadians(lon1);
lon2 = toRadians(lon2);
lat1 = toRadians(lat1);
lat2 = toRadians(lat2);
//haversine formula
double dlat, dlon;
dlat = lat2 - lat1;
dlon = lon2 - lon1;
double a = Math.Pow(Math.Sin(dlat / 2), 2) *
Math.Cos(lat1) * Math.Cos(lat2) *
Math.Pow(Math.Sin(dlon / 2), 2);
double c = 2 * Math.Asin(Math.Sqrt(a));
// earths radius is KM, use 3956 for miles
double earthRadius = 6371;
return (c * earthRadius);
}
static void Main(String[] args)
{
double lat1, lat2, lon1, lon2;
lon1= 53.222469;
lat1 = -4.129424;
lon2 = 53.244697;
lat2 = -2.13195;
Console.WriteLine(CalcDistance(lon1, lon2, lat1, lat2) + " KM");
}
}
当输出应该是大约130KM时,给出的输出是0.04301075336978381 KM
【问题讨论】:
-
这里有各种各样的操作。在调试器中单步执行代码时,哪个操作首先返回意外结果?该操作中使用的值是什么?结果如何?预期的结果是什么?为什么?
-
你能指出你使用的原始数学公式吗?
-
CalcDistance中的第一个*不应该是+吗? -
宾果游戏。 @MarcGravell's right
-
@OlivierRogier 如果您从代码中的注释中搜索“haversine 公式”,you end up here
标签: c# latitude-longitude haversine