如何解决如何使用嘈杂的GPS数据有效地检测位置变化?
| 我正在开发资产跟踪应用程序。我有每5分钟发送一次GPS位置更新的设备。 现在,我需要创建一个报表,向我显示资产何时开始移动,何时停止,停止多长时间等。基本上,我需要对这些数据进行分组。 我的问题是GPS数据不准确。如果设备放置在同一地点-它将以不同的精度发送不同的经/纬度,从而产生嘈杂的数据。 分析此类数据的最有效方法是什么?或者,也许有一些方法可以在我收集时使其“干净”?有什么建议么? 有点开放性的问题,但我希望您能给我一些建议:)解决方法
每条记录都定义了资产实际所在的质心(位置和周围的模糊空间,即模糊度的大小,由准确性定义)。希望您可以忽略海拔高度,因为这会更加模糊,并且精度通常仅指水平精度。
首先,将其分配给群集(区域/卷)。考虑第二点,看看它是否落在群集内。如果是这样,那么您可以尝试优化质心(对旧点和新点进行平均),或者仅丢弃第二个点。细化质心非常诱人,但请确保以不允许非常缓慢的资产移动的方式进行。当您的下一个点落在质心之外时,启动一个新的质心并重复。
您可能会发现报告的准确度要比实际准确度好,在这种情况下,您可以输入一个愚蠢乘数或常数,以使质心比实际更模糊。
[编辑]
OP询问如何在SQL中执行此操作。好吧,我不是SQL专家。我遇到的问题是,我不能将外部联接限制为仅提供时间上连续的那些匹配项,而不能提供该位置处的所有匹配项。因此,在我的解决方案中,我不得不使用许多额外的SQL循环。
$curid = 0;
while ($hash = `select id,timestamp,position,accuracy from locations
where id > $curid
order by idlimit 1`)
{
print \"Was at $hash{\'position\'} at $hash{\'timestamp\'} \";
$curid = $hash{\'id\'} + 1;
$seenone = 0;
while ($hash2 = `select id,timestamp from locations where id=$cur_id and
distance($hash{\'position\'},position) < (accuracy+$hash{\'accuracy\'})`)
{
$curid = $hash2{\'id\'}+1;
$seenone = 1;
}
print \"until $hash2{\'timestamp\'}\\n\" if ($seenone);
print \"\\n\" unless ($seenone);
}
这将按ID遍历表位置。第一个查询获取下一个(第一个)位置信息,第二个查询跳过所有聚集到同一位置的id。冲洗并重复。
, 为什么不缓冲每个点,创建一个具有给定半径的圆形区域(根据对数据“噪声”的一些经验测量来缩放),然后将缓冲的多边形分解为单个多边形并取其质心?
, 我已经完成了一些使用GPS数据跟踪高空气球的工作。除非您需要以某种数字形式报告数据,否则我建议您使用Google Maps API。您可以创建地图,然后为GPS数据集中的每个点添加标记。这提供了一个很好的图形表示形式,但是如果您要处理较小的比例尺,它将不能很好地工作。
API文档:
http://code.google.com/apis/maps/documentation/javascript/reference.html#MarkerOptions
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。