onLocationChanged以时间增量

时间:2014-03-22 20:27:56

标签: java android google-maps google-maps-android-api-2

我正在使用onLocationChanged:

    //set the location of a point
    point1 = (new LatLng(location.getLatitude()   , location.getLongitude()));

我正在尝试构建一条折线,指向我正在移动的方向。我已经使用computeHeading方法来计算标题,然后我将它放在computeOffset中以生成另一个x英尺远的点作为生成折线的远点。这是这样做的:

@Override
public void  onLocationChanged(Location location) {




    point1 = (new LatLng(location.getLatitude()   , location.getLongitude()));



    point2 = (new LatLng(location.getLatitude()   , location.getLongitude()));

     heading = SphericalUtil.computeHeading(point1, point2);

     navOrigin = (new LatLng(location.getLatitude()   , location.getLongitude()));

     navSecPoint = SphericalUtil.computeOffset(point2, 500, heading);



     PolylineOptions navigation = new PolylineOptions()
        .add(navOrigin)
        .add(navSecPoint)
        .color(Color.MAGENTA);

        if(navigationalLine !=null) { navigationalLine.remove(); }
        else { navigationalLine = getMap().addPolyline(navigation); }


         navigationalLine = getMap().addPolyline(navigation);

唯一的问题是确定瞬时航向我需要一个针对point1和point2的不同位置。目前,因为他们都在我的onLocationChanged他们都填写相同的位置数据。如果两个点位于同一位置,则无法计算标题。

如何创建某种基于计时器或位置的触发机制,在point1填充位置数据和几英尺之后用位置数据填充point2之间会产生一些毫秒的时间延迟。

You can see the problem illustrated here

1 个答案:

答案 0 :(得分:0)

不需要使用计时器来偏移两个点的位置。虽然可以使用sphere util工具计算标题,但android.location系列有一个getBearing()方法,该方法会不断更新设备的标题。

navSecPoint = SphericalUtil.computeOffset(point2, 500, heading);

可以替换为:

navSecPoint = SphericalUtil.computeOffset(point2, 500, bearing);

getBearing()方法是一个浮点数,而computeOffset需要一个double。这可以做到:

float floatbearing = location.getBearing();

    double bearing = floatbearing;

如果您决定使用计时器。使用java.util.TimerTask。

请遵循本教程:

run() with Timer