我有一个GPS点数据库。没有任何轨道,只有一点。我需要为每100米计算一些值,但是GPS有时会给出错误的坐标,该坐标距离真实的GPS点很远,因此,我必须为一个很大的矩形区域计算它,而不是计算一个小正方形的值。
过滤错误的GPS点的最佳算法是什么?
我做了一个屏幕截图以帮助理解:
我有一个GPS点数据库。没有任何轨道,只有一点。我需要为每100米计算一些值,但是GPS有时会给出错误的坐标,该坐标距离真实的GPS点很远,因此,我必须为一个很大的矩形区域计算它,而不是计算一个小正方形的值。
过滤错误的GPS点的最佳算法是什么?
我做了一个屏幕截图以帮助理解:
Answers:
对分运行Anselin Local Moran的I,并用z得分低于-1.96扔掉任何东西。这是用于定位空间异常值的统计方法。您必须确保所有点的值都与其空间位置有关。
但是,在whuber发表评论后检查了10.1中的工具时,我意识到,如果您使用ArcGIS 10.1,则可以使用分组分析工具,这确实是您想要做的。
我想您想对Delaunay三角剖分空间约束进行分组分析。这里的障碍是您需要具有等于或大于断开连接的组的数量的分区组(如果任何异常值是彼此的自然邻居)。否则,没有自然邻居的离群值将不会从分组分析中得出任何分组。
基于此,我认为Delauney三角剖分可能是过滤器算法的来源,但我不确定。
另一个更新:深入研究了运行分组分析工具的Partition.py之后,我认为可以将其中的算法用于与NoNeighbors部分结合的不连续组,尽管我在挖掘该部分内容时遇到了麻烦脚本。
这可能有助于获取异常值列表:
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:您提到了“ 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