将GPS坐标与c中的一定余量进行比较

时间:2015-05-02 19:22:19

标签: gps arduino compare double floating-accuracy

我一直在努力用arduino制作一个使用两个GPS模块的设备。因此,一个发送gps线,另一个接收并将其当前位置与发送方的位置进行比较,一旦接收方距离发送方几米,指示灯将打开,指示发送在附近,如果您要离开领导者会关闭发件人。所以我的问题是我无法弄清楚如何比较线的接收和当前值以准确工作。这就是我一直试图开始工作我不知道如果我用这个完成错误的方式我不知道你是否可以做某种半径并使用如果有人可以帮助我解决这个我会非常感激它。从发送方Lat收到的示例数据:12.76433041 Lon:来自接收方Lat的-54.74539143:12.76433854 Lon:-54.74539435。

 int destLat;
 int currLat;
 int destLon;
 int currLng;

  currLat = gps.location.lat();
  destLat = Lat;
  currLng = gps.location.lng();
  destLon = Lon; 

  bool AreSame(float currLat, float destLat)
    if fabs(currLat - destLat) < EPSILON;
    {
      if fabs(currLng - destLon) < EPSILON;
      digitalWrite (4, HIGH);
    }

1 个答案:

答案 0 :(得分:1)

您正在寻找的是找到&#34;距离&#34;在两个地理坐标之间。

这不是一项简单的任务。有几个公式可以近似这个,但我认为你找不到可能给你一个小于1米的误差的东西。

另外,正如吉姆所说,GPS测量本身的误差在大多数情况下高于几米。一些GPS接收器将在运行时提供估计的水平误差。我假设你使用的是廉价的。您应该考虑到精度还取决于接收器的质量,因此不要期望获得很好的结果。

您需要使用的确切公式是我所知,我只能提供一些关键字作为参考,您可能想要研究&#34; hasrsine&#34;和#34;大圆距离&#34;。

然而你可以&#34;作弊&#34;一点。假设设备的所有使用都将在同一局部区域中执行,您可以确定&#34; epsilon&#34;的值。实验。

启动你的arduino,去北X米记录Latitudes的差异,这是你的E1。回到起点,向东走X米,记录经度的差异,这是E2。

然后一个超级粗略的公式来测试一个设备是否比第二个设备超过X米:

sqrt(ΔLat**2 + ΔLong**2) < sqrt(E1**2 + E2**2). 

这当然是假设接收器的误差不是太高。