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.

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

我怎么能这样做?
现在:
我计算点之间的距离.
我发现最小距离,如果它减去GPS_sensor_error,那么我平均lon,lat.
重复1.
重复2.
重复直到所有距离都不会更多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过滤器?
从数据科学的角度来看,你所做的事情并不正确.您不能仅使用平均误差距离作为截止值,并认为您的数据更正确.您要比较的两个点可能会有多于或少于15米的误差,它们可以相互移动或相互移开.如果您没有其他确切的数据集,则无法确定哪些是正确的点.您无法使此数据集更精确.
但是我认为你的目标是简化数据集,而不是让它更准确.为此,您可以使用Douglas-Peucker算法.我建议您在启用Postgis的数据库(Postgresql + postgis)中加载数据,然后使用简化功能.这将需要一些数据库设置时间,但随后它将大大加快您的速度.但是如果你想在纯python中使用这个问题有一个非常好的片段.
BTW.如果你正在用lat进行距离计算,那么就不要使用毕达哥拉斯.它是无效的,因为lat,lon不是Euclidean.使用hasrsine算法.
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |