Python,numpy,scipy:如何从GPS坐标中排除位置错误?(平均lon,lat)

Olg*_*lga 2 python gps numpy geolocation scipy

我用Python:

我有2个GPS点阵列 - lon和lat(超过500 000点).

我有1个日期时间数组.

lon = numpy.array(lon)
lat = numpy.array(lat)
dt = numpy.array(dt)
Run Code Online (Sandbox Code Playgroud)

我有位置错误(GPS传感器错误).例如15米.

GPS_sensor_error = 0.015    
Run Code Online (Sandbox Code Playgroud)

我需要从轨道上没有星号的坐标排除GPS_sensor_error.

在此输入图像描述

(我不会用相同的坐标绘制一个点)

在此输入图像描述

我怎么能这样做?

现在:

  1. 我计算点之间的距离.

  2. 我发现最小距离,如果它减去GPS_sensor_error,那么我平均lon,lat.

  3. 重复1.

  4. 重复2.

  5. 重复直到所有距离都不会更多GPS_sensor_error

更新:

     lon = numpy.array()
     lat = numpy.array()

     flag = True
     while flag:
        lon1 = lon[:-1]
        lon2 = lon[1:]
        lat1 = lat[:-1]
        lat2 = lat[1:]

        '''distance'''
        x = (lon2 - lon1)
        y = (lat2 - lat1)
        d = numpy.sqrt(x * x + y * y)

        min = numpy.min(d)
        if min < GPS_sensor_error:
            j = numpy.where(d == min)[0][0]

            lon[j] = (lon[j] + lon[j + 1]) / 2
            lat[j] = (lat[j] + lat[j + 1]) / 2

            lon = numpy.delete(lon, j + 1)
            lat = numpy.delete(lat, j + 1)

        else:
            flag = False
Run Code Online (Sandbox Code Playgroud)

绕过所有点在纯python上工作的时间非常长... 请提示,如何使用scipy,numpy实现它?


谢谢

Ps可能已经有一个scipy,numpy的GPS过滤器?

Ric*_*kyA 5

从数据科学的角度来看,你所做的事情并不正确.您不能仅使用平均误差距离作为截止值,并认为您的数据更正确.您要比较的两个点可能会有多于或少于15米的误差,它们可以相互移动或相互移开.如果您没有其他确切的数据集,则无法确定哪些是正确的点.您无法使此数据集更精确.

但是我认为你的目标是简化数据集,而不是让它更准确.为此,您可以使用Douglas-Peucker算法.我建议您在启用Postgis的数据库(Postgresql + postgis)中加载数据,然后使用简化功能.这将需要一些数据库设置时间,但随后它将大大加快您的速度.但是如果你想在纯python中使用这个问题有一个非常好的片段.

BTW.如果你正在用lat进行距离计算,那么就不要使用毕达哥拉斯.它是无效的,因为lat,lon不是Euclidean.使用hasrsine算法.

  • 如果这个想法适合你,你可能想看看[Shapely](http://pypi.python.org/pypi/Shapely)包,它也有一个`simplify`方法.从其文档字符串:'返回由Douglas-Puecker算法生成的简化几何'. (2认同)