Java 融合位置提供程序不绘制连续线
有谁能帮我解决这样的问题,用熔合提供程序在最后和当前位置之间绘制连续线 onLocationChanged方法如下所示:Java 融合位置提供程序不绘制连续线,java,android,plot,Java,Android,Plot,有谁能帮我解决这样的问题,用熔合提供程序在最后和当前位置之间绘制连续线 onLocationChanged方法如下所示: public void onLocationChanged(Location mylocation) { logEvent("onLocationChanged"); mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); mCurr
public void onLocationChanged(Location mylocation) {
logEvent("onLocationChanged");
mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
mCurrentLocation = mylocation;
plotroute(mylocation);
mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
}
和绘制路线方法:
public void plotroute (Location mylocation){
logEvent("------------Plotting route---------------");
mCurrentLocation = mylocation;
LatLng lastLatLng = new LatLng(mlastLocation.getLatitude(),mlastLocation.getLongitude());
LatLng thisLatLng = new LatLng(mylocation.getLatitude(),mylocation.getLongitude());
map.addPolyline(new PolylineOptions().add(lastLatLng).add(thisLatLng).width(20).color(Color.RED));
}
这是logcat的最后和当前位置输出
并绘制了路线图
如您所见,绘制的线不是连续的。有什么我应该改变的,使它顺利进行吗 您的问题是使用
getLastLocation()
作为行的另一端。相反,您应该始终记住在onLocationChanged()
中收到的上一个位置,并从上一个位置到最新位置画一条线
“最后一个位置”是对当前位置的最佳估计,您的mCurrentLocation
也是当前位置。有时这两个可能完全相同,你只需要画点而不是线。现在,在现实生活中,它们经常会有一些变化,所以你会得到一些彼此不相连的线路。您基本上是在绘制刚刚通过onLocationChanged()
接收到的当前位置与通过getLastLocation()
后面的逻辑估计的当前位置之间的差异
您的代码可能类似于:
感谢您的回复,当我这样更改它时,我在plotroute方法内的这一行得到null值:LatLng lastLatLng=new LatLng(mlastLocation.getLatitude(),mlastLocation.getLongitude());啊,对不起。第一次运行代码时,
mCurrentLocation
仍为null
,因此mLastLocation
将为null
。代码可以检查mCurrentLocation
是否仍然为null
,在这种情况下,将myLocation
分配给它。或者,如果mlastLocation
为null,您可以选择不调用plotroute()
。我创建了类似于if(mlastLocation==null){mlastLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);}的检查,尽管该多段线中存在一些小故障,但现在已经修复
public void onLocationChanged(Location mylocation) {
logEvent("onLocationChanged");
//mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
mlastLocation = mCurrentLocation;
mCurrentLocation = mylocation;
if (mlastLocation != null) {
plotroute(mylocation);
}
mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
}