Android 将保存的GPS(纬度、经度)点与当前GPS(纬度、经度)点进行比较?

Android 将保存的GPS(纬度、经度)点与当前GPS(纬度、经度)点进行比较?,android,gps,location,sharedpreferences,Android,Gps,Location,Sharedpreferences,我希望当我点击按钮时,它会保存gps坐标的当前位置和共享的首选项,还希望在位置更改时将该gps坐标与新坐标进行比较location changed event谁是执行此操作的最佳方法 您可以使用class distanceToLocation dest方法测量两个位置之间的距离(以米为单位) 从: 返回此位置与目标之间的近似距离(以米为单位) 给定的位置。使用WGS84椭球体定义距离 您可能可以使用sql oracle函数计算距离,如下所示: create or replace FUNCTION

我希望当我点击按钮时,它会保存gps坐标的当前位置和共享的首选项,还希望在位置更改时将该gps坐标与新坐标进行比较location changed event谁是执行此操作的最佳方法

您可以使用class distanceToLocation dest方法测量两个位置之间的距离(以米为单位)

从:

返回此位置与目标之间的近似距离(以米为单位) 给定的位置。使用WGS84椭球体定义距离


您可能可以使用sql oracle函数计算距离,如下所示:

create or replace
FUNCTION CALC_DISTANCE (Lat1 IN NUMBER,
                                     Lon1 IN NUMBER,
                                     Lat2 IN NUMBER,
                                     Lon2 IN NUMBER) RETURN NUMBER IS
 -- Convert degrees to radians
 DEGTORAD NUMBER := 57.29577951;
 Radius NUMBER := 6387.7;

BEGIN
  RETURN(NVL(Radius,0) * ACOS((sin(NVL(Lat1,0) / DegToRad) * SIN(NVL(Lat2,0) / DegToRad)) +
        (COS(NVL(Lat1,0) / DegToRad) * COS(NVL(Lat2,0) / DegToRad) *
         Cos(Nvl(Lon2,0) / Degtorad - Nvl(Lon1,0)/ Degtorad))));
END;

您可能可以在sqlite数据库中使用如下所示的select查询并获得输出

String selectQuery = "SELECT (NVL(6387.7,0) * ACOS((sin(NVL(Lat1,0) / 57.29577951) * SIN(NVL(Lat2,0) / 57.29577951)) +
            (COS(NVL(Lat1,0) / 57.29577951) * COS(NVL(Lat2,0) / 57.29577951) *
             Cos(Nvl(Lon2,0) / 57.29577951 - Nvl(Lon1,0)/ 57.29577951))))";

你尝试了什么?有什么复杂的地方?获取当前位置,获取原始位置,然后使用减法查看它们的变化程度。如果超过某个阈值,则将其计为已更改。Location.distanceTo可能会有所帮助。