如何过滤错误的GPS点?


11

我有一个GPS点数据库。没有任何轨道,只有一点。我需要为每100米计算一些值,但是GPS有时会给出错误的坐标,该坐标距离真实的GPS点很远,因此,我必须为一个很大的矩形区域计算它,而不是计算一个小正方形的值。

过滤错误的GPS点的最佳算法是什么?

我做了一个屏幕截图以帮助理解:

![http://content.screencast.com/users/smirnoffs/folders/Jing/media/94624331-db6a-4171-bed9-e2183f953a1d/gps_error.png]


1
我会使用移动帧的较小倍数(例如最后10个点),将点之间的平均距离作为检测此类异常值的标准。
lynxlynxlynx 2012年

您能否更详细地描述您的方法?我有一个点数据库,它们不以任何形式排序。因此,距离可能是2米或500米。但是有些要点很远。我制作了一个屏幕截图以帮助您理解
smirnoffs,2012年

2
我知道了。在这种情况下,我的方法不是很好。相反,我将为每个点计算最近的相邻点,然后将那里的异常值剔除。
lynxlynxlynx 2012年

2
@lynx建议的第二种方法可以很好地处理样本数据,特别是在异常检测方法很好的情况下。在我们的统计网站上查看有关离群值的问题,以获取选项。例如,在stats.stackexchange.com/questions/213中建议了许多创造性(有效)的方法。
ub

Answers:


3

对分运行Anselin Local Moran的I,并用z得分低于-1.96扔掉任何东西。这是用于定位空间异常值的统计方法。您必须确保所有点的值都与其空间位置有关。

但是,在whuber发表评论后检查了10.1中的工具时,我意识到,如果您使用ArcGIS 10.1,则可以使用分组分析工具,这确实是您想要做的。

我想您想对Delaunay三角剖分空间约束进行分组分析。这里的障碍是您需要具有等于或大于断开连接的组的数量的分区组(如果任何异常值是彼此的自然邻居)。否则,没有自然邻居的离群值将不会从分组分析中得出任何分组。

基于此,我认为Delauney三角剖分可能是过滤器算法的来源,但我不确定。

另一个更新:深入研究了运行分组分析工具的Partition.py之后,我认为可以将其中的算法用于与NoNeighbors部分结合的不连续组,尽管我在挖掘该部分内容时遇到了麻烦脚本。


(-1)保证无论如何丢掉40分中的1分。不建议将任何此类测试用于异常值检测。
ub

1
当测试纯空间异常值(如果存在空间异常值)时,情况并非如此。如果不存在空间离群值,那么您将遇到该问题,但如果确实存在,则仅那些离群值应落入如此低的z得分。这完全取决于点的空间分布。
blord-castillo 2012年

1
几乎:如果异常值本身形成一个群集,则可能无法完全检测到它们。(请考虑将空坐标或明显错误的坐标自动映射到(0,0)的情况。)您的评论表明,发现异常值可能很棘手,并且取决于异常值的性质:是否可以存在一个或多个;是否存在一个或多个?他们有多远 他们是否可以集群;作为一般原则,做出分布假设的统计信息(例如使用Local Moran's I)不像健壮的非参数统计数据那样有效。

2
我正在考虑一个特定的理论问题,在该问题中,您有“好” GPS点,而在边界框的远角处彼此叠放了相等数量的“坏” GPS点。如果不了解“好”点的关注领域,我认为您无法从统计学上分离出哪一组是“好”和哪一组是“坏”。这可能是一个问题,需要手动指定感兴趣的区域。
blord-castillo 2012年

2
没错:您已经描述了双峰多元分布。在这种情况下通常要做的是估计混合模型或应用聚类算法。结果是分离出混合物/群集组分,但没有将它们中的任何一个指定为“异常值”:必须由用户承担责任。

3

这可能有助于获取异常值列表:

SELECT p1.point_id 
FROM p1 AS points, p2 AS points
WHERE p1.point_id <> p2.point_id AND
ST_Distance(p1.geom, p2.geom) > 10000

在这里,point_id将是您的积分表中的主键。距离功能将查找最近的点大于10000米的点。(当然,您可以输入任何适当的值)

如果上述方法可行,则更改为DELETE语句,例如:

DELETE FROM points WHERE point_id IN (
-- SELECT as above
SELECT ....
);

1
1.点不排序。2.如果误差小于10000米怎么办?例如150米?
smirnoffs 2012年

1
也许我听不懂。从您的图像中,我看到几乎所有的点都聚集在一个区域中,并且很少的点距离很远。那不是问题吗?如果一个点与另一个点仅相距150米,您怎么知道这是一个离群值?
Micha 2012年

1

我将尝试提供更实用的答案,以帮助您完成工作。(很抱歉,如果您正在寻找有关算法的讨论)

方案1:您提到了“ GPS点”,因此,如果您可以访问原始GPS航路点,则工作将变得更加容易。您可以抛出高HDOP / VDOP或视点数量高的点-最初会导致错误。像gpsbabel这样的免费工具内置有此类过滤器。http://www.gpsbabel.org/htmldoc-development/Data_Filters.html

方案2:您只是有一些要点。然后问题就变成了检测空间异常值。这个领域有很多研究,我从网络搜索中看到很多关于该主题的论文。如果您要清理数据,则可以使用GRASS的v.outlier算法,该算法应根据您共享的屏幕截图在您的情况下起作用。http://grass.osgeo.org/gdp/html_grass63/v.outlier.html


感谢您的评论。不幸的是我只有座标。GPS只是坐标的来源,我无法访问原始的GPS轨迹。
smirnoffs 2012年

-2

我认为您有垃圾数据。实际上,如果您担心某些数据是错误的事实,并且无法使用其他因素可靠地识别每个错误点,那么您的分析中将有一些不良数据。

如果那很重要,那么您可能应该考虑扔掉所有东西,找出根本原因(例如,不良的GPS点来自多径),解决该根本原因(例如,添加扼流圈天线,或者使用更好的GPS类型,或者采用最佳解决方案是),然后重做数据收集。

如果坏数据无关紧要,请使用它并忽略错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.