【问题标题】:Calculate Current Speed in .NET - With GPS在 .NET 中计算当前速度 - 使用 GPS
【发布时间】:2012-11-08 09:18:40
【问题描述】:

我想知道用 GPS 计算当前速度的最佳方法是什么。 我有一个外部 GPS 接收器,它通过 USB 连接到我的汽车笔记本电脑。它只给了我以下信息: - 经度 - 纬度 - 海拔

我的尝试是获取两个带有时间戳的位置信息。 然后我找到时间差(timestamp2 - timestamp1)并计算速度(距离/时间)。

是否有任何其他可能性或任何可用的库?

【问题讨论】:

  • GPS 只给你 XYZ 坐标有点奇怪。标准的 GPS 消息应该包含更多信息,所以我猜测该设备没有与您共享它们(例如速度、卫星数量或其他更模糊的数据)。没有可以调整的 GPS 设备设置吗?
  • 嗯,我想我可以修改设备的固件以提供更多信息。但我希望 lang、lat 和高度足以满足我的目的。
  • 它通常是,但感觉就像重新发明轮子,因为 GPS 应该为您提供与速度一样基本的东西。 ;)
  • 谢谢,我会考虑的。

标签: c# .net gps


【解决方案1】:

要计算距离,您需要Haversine Formula

你会在网上找到很多它的实现,这是我在 C# 中使用的一个:

private static double ArcInMeters(double lat0, double lon0, double lat1, double lon1)
{
    double earthRadius = 6372797.560856; // m
    return earthRadius * ArcInRadians(lat0, lon0, lat1, lon1);
}

private static double ArcInRadians(double lat0, double lon0, double lat1, double lon1)
{
    double latitudeArc = DegToRad(lat0 - lat1);
    double longitudeArc = DegToRad(lon0 - lon1);
    double latitudeH = Math.Sin(latitudeArc * 0.5);
    latitudeH *= latitudeH;
    double lontitudeH = Math.Sin(longitudeArc * 0.5);
    lontitudeH *= lontitudeH;
    double tmp = Math.Cos(DegToRad(lat0)) * Math.Cos(DegToRad(lat1));
    return 2.0 * Math.Asin(Math.Sqrt(latitudeH + tmp * lontitudeH));
}

private static double DegToRad(double x)
{
    return x * Math.PI / 180;
}

【讨论】:

  • 这个计算不是给你“像乌鸦飞一样”的距离吗?我的意思是,如果你想计算你在车内的运动,你需要根据地图(Bing 或 Google 等)绘制你的坐标,然后确定从那里行驶的距离,因为那是您在车上行驶的距离。
  • @BrettRigby 是的,这是两点之间的最短距离。但我希望原始问题中的点在时间和空间上都足够接近,以期望汽车在它们之间直线移动。由于问题是关于如何计算当前速度,而不是确切的总行程,我认为我的方法应该没问题。
  • @Timbo - 是的,请不要误会我的意思,您提供的内容很棒;我的评论只是为了突出两者之间的差异,以供其他希望计算行驶速度的读者使用。 :o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 2012-05-17
  • 2019-12-29
相关资源
最近更新 更多