gpt4 book ai didi

sql - 如何使用嘈杂的 GPS 数据有效地检测位置变化?

转载 作者:行者123 更新时间:2023-12-02 04:08:26 25 4
gpt4 key购买 nike

我正在开发 Assets 跟踪应用程序。我有每 5 分钟发送一次 GPS 位置更新的设备。

现在我需要创建一个报告,显示 Assets 何时开始移动、何时停止以及持续了多长时间等。基本上,我需要对这些数据进行分组。

我遇到的问题是 GPS 数据不准确。如果设备放置在同一个位置 - 它会以不同的精度发送不同的纬度/经度,从而产生噪声数据。

分析此类数据的最有效方法是什么?或者也许有办法在我收集它时让它“干净”?有什么建议么?

有点开放式的问题,但我想要你能给我的任何想法:)

enter image description here

最佳答案

每条记录都定义了 Assets 实际所在的质心(位置和其周围的模糊空间——由准确性定义的模糊大小)。希望您可以忽略高度,因为它更加模糊,并且通常精度仅涉及水平精度。

取第一点,将其分配给一个集群(面积/体积)。取第二点,看它是否落入簇内。如果是这样,那么您可以尝试优化您的质心(平均新旧点)或丢弃第二个点。优化质心非常诱人,但请确保以不允许非常缓慢的 Assets 移动的方式进行。当你的下一个点落在质心之外时,启动一个新的质心并重复。

您可能会发现您报告的准确度比实际准确度要好,在这种情况下,您可以输入一个愚蠢乘数或常数,以使质心比实际更模糊。

[编辑]

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。冲洗并重复。

关于sql - 如何使用嘈杂的 GPS 数据有效地检测位置变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6433780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com