我正在使用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之间会产生一些毫秒的时间延迟。
答案 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。
请遵循本教程: