在 Android 中,我使用警报管理器通过 GPS 每 30 秒获取一次位置。我想使用地理点检测设备是否正在旅行或存在于同一位置。如果设备在同一位置 GPS 有时会在距离地图上显示的准确位置 20 或 30 米的时间获得近似数据。
所以在寻找设备旅行时遇到了问题。
如何找到设备不在旅行?
否则,在locationListener中,您可以执行以下操作: 由于接收到的 GPS 信号即使在同一位置也会有所不同,因此您不能只将新位置与旧位置进行比较。我会使用类似下面的代码
double venueLat =latitude // Last known lat
double venueLng = longitude // Last known lng
double latDistance = Math.toRadians(userLat - venueLat);
double lngDistance = Math.toRadians(userLng - venueLng);
double a = (Math.sin(latDistance / 2) * Math.sin(latDistance / 2)) +
(Math.cos(Math.toRadians(userLat))) *
(Math.cos(Math.toRadians(venueLat))) *
(Math.sin(lngDistance / 2)) *
(Math.sin(lngDistance / 2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = 6371 * c;
if (dist<0.01){ (in km, you can use 0.1 for metres etc.)
/* If it's within 10m, we assume we're not moving */
}
您可以在 onLocationChanged() 方法中编写代码。每当设备更改其位置时,您都会在那里获得新的纬度经度。仅当位置已更改时才调用 OnLocationChange() 方法。但是,如果您想要一些特定的距离计算,那么您必须计算较旧的经纬度和较新的经纬度之间的距离。您可以使用 lat-long 找到距离。
每隔 30 秒,当您获得新位置时,您可以将其与之前的位置进行比较,以查看位置是否有任何差异,并确定设备是否正在移动。