代码之家  ›  专栏  ›  技术社区  ›  johnsonjp34

onLocationChanged时间增量

  •  0
  • johnsonjp34  · 技术社区  · 11 年前

    我正在使用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);
    

    唯一的问题是确定一个瞬时航向,我需要一个点1和点2的不同位置。目前,由于它们都在我的onLocationChanged中,它们都使用相同的位置数据填充。如果两个点位于同一位置,则无法计算航向。

    我如何创建某种计时器或基于位置的触发机制,在点1填充位置数据和几英尺后用位置数据填充点2之间提供一些毫秒的时间延迟。

    You can see the problem illustrated here

    1 回复  |  直到 7 年前
        1
  •  0
  •   johnsonjp34    11 年前

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

    这个

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

    可替换为:

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

    getBearing()方法是浮点数,computeOffset需要双精度。可以这样做:

    float floatbearing = location.getBearing();
    
        double bearing = floatbearing;
    

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

    遵循本教程:

    run() with Timer