如何检测坐标集之间路径的偏差
How to detect deviation in path between coordinates set
我有从类似源头到类似目的地的各种车辆的坐标数据(纬度、经度)。
在某些情况下,这些车辆在从源头到目的地时不遵循常规路径。我试图找到那些与标准路径有变化的坐标集。
我有纬度、经度和时间。我必须分析路径的变化并检测路径变化的位置。我有大量数据,所以我正在尝试找到一种最佳方法。
我对 hausdorff 距离和 Jackardd 相似度略知一二。但我正在尝试获得更有效的方法,因为我的数据集接近 1TB。
另外,如果有任何简单的方法可以使用 PostGis 执行此操作。请提出建议。
对于指定的数据量,恐怕 QGIS 不是一个合适的选择。如果您决定使用 PostGIS,则必须牢记源数据的 GPS 精度。我的意思是,即使你走完全相同的路线两次,你也不一定会得到两个相同的足迹。
然而,在将您的数据上传到 PostGIS 时,我首先要考虑的是简化 (st_simplify()
) 它以去除不必要的顶点,从而提高进一步的计算速度。
接下来,我将使用 st_buffer()
将路线包装到缓冲区中,以容忍 GPS 数据偏差在某个可接受的范围内。
之后,结合st_intersection()
和st_area()
,我会根据两个缓冲区的公共区域来衡量两条路线的可能性。
因此,对于三个示例路线
非常基本的查询
select st_area(st_intersection(st_buffer(r1.geom,0.001),st_buffer(r2.geom, 0.001)))/st_area(st_buffer(r1.geom, 0.001)) as "blue2red",
st_area(st_intersection(st_buffer(r1.geom,0.001),st_buffer(r3.geom, 0.001)))/st_area(st_buffer(r1.geom, 0.001)) as "yellow2red",
st_area(st_intersection(st_buffer(r2.geom,0.001),st_buffer(r3.geom, 0.001)))/st_area(st_buffer(r2.geom, 0.001)) as "blue2yellow"
from route r1
join route r2
on r2.name='blue'
join route r3
on r3.name='yellow'
where r1.name='red'
returns
blue2red yellow2red blue2yellow
0.495408079 0.641252527 0.688753036
我想,这看起来像是一个开始。
我有从类似源头到类似目的地的各种车辆的坐标数据(纬度、经度)。
在某些情况下,这些车辆在从源头到目的地时不遵循常规路径。我试图找到那些与标准路径有变化的坐标集。
我有纬度、经度和时间。我必须分析路径的变化并检测路径变化的位置。我有大量数据,所以我正在尝试找到一种最佳方法。
我对 hausdorff 距离和 Jackardd 相似度略知一二。但我正在尝试获得更有效的方法,因为我的数据集接近 1TB。 另外,如果有任何简单的方法可以使用 PostGis 执行此操作。请提出建议。
对于指定的数据量,恐怕 QGIS 不是一个合适的选择。如果您决定使用 PostGIS,则必须牢记源数据的 GPS 精度。我的意思是,即使你走完全相同的路线两次,你也不一定会得到两个相同的足迹。
然而,在将您的数据上传到 PostGIS 时,我首先要考虑的是简化 (st_simplify()
) 它以去除不必要的顶点,从而提高进一步的计算速度。
接下来,我将使用 st_buffer()
将路线包装到缓冲区中,以容忍 GPS 数据偏差在某个可接受的范围内。
之后,结合st_intersection()
和st_area()
,我会根据两个缓冲区的公共区域来衡量两条路线的可能性。
因此,对于三个示例路线
非常基本的查询
select st_area(st_intersection(st_buffer(r1.geom,0.001),st_buffer(r2.geom, 0.001)))/st_area(st_buffer(r1.geom, 0.001)) as "blue2red",
st_area(st_intersection(st_buffer(r1.geom,0.001),st_buffer(r3.geom, 0.001)))/st_area(st_buffer(r1.geom, 0.001)) as "yellow2red",
st_area(st_intersection(st_buffer(r2.geom,0.001),st_buffer(r3.geom, 0.001)))/st_area(st_buffer(r2.geom, 0.001)) as "blue2yellow"
from route r1
join route r2
on r2.name='blue'
join route r3
on r3.name='yellow'
where r1.name='red'
returns
blue2red yellow2red blue2yellow
0.495408079 0.641252527 0.688753036
我想,这看起来像是一个开始。