GPS数据异常值

问题描述

我有一组纬度和经度点,但是我很难构建可以消除异常点的算法(以橙色圆圈显示)。我尝试的是获取点之间的矢量角度,然后在达到一定阈值(即大角度)后将其删除,是否有更好的方法?另外,当我在熊猫中使用数据框时,我遇到了循环问题。当向量较大时循环,返回到基点(红色圆圈),然后移除,直到下一个有点笔直的点。预先感谢。enter image description here

这是我的示例代码

df_4 = df_3.copy()
def angle(vector1,vector2):
    unit_vector_1 = vector1 / np.linalg.norm(vector1)
    unit_vector_2 = vector2 / np.linalg.norm(vector2)
    dot_product = np.dot(unit_vector_1,unit_vector_2)
    angle = np.arccos(dot_product)
    return np.degrees(angle)
df_4.reset_index(inplace=True)
th = 20
angle_vector = 0
idx=0
a=0
for x in range(len(df_4)):
    print('for:',str(idx))
    vector1 = [(df_4.loc[idx+1,'Longitude'] - df_4.loc[idx,'Longitude']),(df_4.loc[idx+1,'Latitude']-df_4.loc[idx,'Latitude'])]
    vector2 = [(df_4.loc[idx+2,'Longitude'] - df_4.loc[idx+1,(df_4.loc[idx+2,'Latitude']-df_4.loc[idx+1,'Latitude'])]
    angle_vector = angle(vector1,vector2)
    df_4.at[idx+1,'angle_vector'] = angle_vector
    #print(angle_vector)
    print('before:',len(df_4))
    i = 0
    while(angle_vector > th & (angle_vector not in [a for a in range(86,96)])):
        df_4.drop(df_4.index[idx+1],inplace=True )
        df_4.reset_index(inplace=True,drop=True)
        print('after:',len(df_4))
        print('while:',str(i))
        vector3 = [(df_4.loc[idx+i,'Longitude'] - df_4.loc[idx+i-a,(df_4.loc[idx+i,'Latitude']-df_4.loc[idx+i-a,'Latitude'])]
        angle_vector = angle(vector1,vector3)
        i += 1
    idx+=1

`

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)