1

我希望能够在 Android 上确定用户是朝给定位置的方向行驶还是远离它。我正在从服务接收定期位置更新,并且想知道我该如何解决这个问题,因为我在考虑它时似乎正在绘制空白。我正在使用 fusedlocation 提供程序进行位置更新。

基本场景:

位置 L1,位置 L2 用户位置会定期更新 一旦用户在 L1 范围内,只通知用户一次 如果用户现在正朝着 L2 前进,那很好 如果不通知用户他们走错了方向

代码片段

在位置更改时广播带有新位置的意图

@Override
public void onLocationChanged(Location location) {

    Intent i = new Intent();
    i.setAction(NavigationAnimatorActivity.INTENT_ACTION);
    i.putExtra(LocationClient.KEY_LOCATION_CHANGED, location);

    Log.v(getClass().getSimpleName(),
            i.getExtras().get(LocationClient.KEY_LOCATION_CHANGED)
                    .toString());

    // Broadcast the intent carrying the data

    sendBroadcast(i);

}

处理位置数据

class ReceiveLocationUpdate extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        String action = intent.getAction();

        // send message to activity

        Bundle b = null;

        // Check we have a bundle
        if ((b = intent.getExtras()) != null) {
            // Check if we have location data
            if (action.equalsIgnoreCase(INTENT_ACTION)) {

                Object o = b.get(LocationClient.KEY_LOCATION_CHANGED);
                Log.v(getClass().getName(), o.toString());
                if (o != null && o instanceof Location) {
                    mCurrentLocation = (Location) o;                        
                    checkIfAtLocation(mCurrentLocation);
                }
            }

        }

    }

}

检查我们是否在需要通知用户的位置附近

private void checkIfAtLocation(Location currLocation) {

        Location L1 = s.asLocation();
        Location L2; // Next waypoint           

        // Check if we're within range of a waypoint, notifying user if we are
        if (mCurrentLocation.distanceTo(L1)) <= RADIUS) {

            // Notify Once

            // How do I check that user is travelling towards L2?
        }
    }

谢谢

4

1 回答 1

1

要计算用户是否正在接近某个点:使用Location.distanceTo()方法:传入当前纬度、经度和目的地纬度/经度,并存储该距离;

过一会儿再做同样的事情,比较现在的距离是否小于旧的距离。
如果距离更小,则接近目的地,如果更大,他会离开。
如果距离<50m,他已经到达目的地。

于 2013-06-09T15:45:42.797 回答