您的位置:首页 > 移动开发 > Android开发

Android 高德的路线规划一个小坑

2017-05-19 11:53 344 查看
最近用到了高德地图的路线规划。。这个时候。。
4000
发现了个小问题。就是,起点和终点之间的距离过长时,骑行的路线规划,,就会很长时间,甚至规划不出来。。。

造成这个问题的原因就是之间的距离过长了,,用骑行的路线规划不合适,我也没仔细找这个距离具体是多少。。。如果遇到这个问题,你可以先计算下两点之间的距离。,然后如果大于一个距离,就把路线规划换成驾车的路线规划。

LatLng latLng=new LatLng(mStartPoint.getLatitude(),mStartPoint.getLongitude());
LatLng latLng1=new LatLng(mEndPoint.getLatitude(),mEndPoint.getLongitude());
float v = AMapUtils.calculateLineDistance(latLng, latLng1);
Log.e("zmm","距离-->"+v);
if(v>3000){
curType=1;
searchRouteResult(RouteSearch.DrivingDefault,TYPE_DRIVE);
}else{
curType=1;
searchRouteResult(RouteSearch.RidingDefault,TYPE_RIDE);
}


/**
* 开始搜索路径规划方案
*/
public void searchRouteResult(int mode,int type) {
Log.e("zmm","searchRouteResult");
if (mStartPoint == null) {
ToastUtil.show(GaoMipActivity.this, "定位中,稍后再试...");
return;
}
if (mEndPoint == null) {
ToastUtil.show(GaoMipActivity.this, "终点未设置");
}
final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStartPoint, mEndPoint);

if(type==TYPE_DRIVE){
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, mode, null, null, "");
mRouteSearch.calculateDriveRouteAsyn(query);
}else{
RouteSearch.RideRouteQuery query1 = new RouteSearch.RideRouteQuery(fromAndTo, mode);
mRouteSearch.calculateRideRouteAsyn(query1);// 异步路径规划骑行模式查询
}
}


/**
* 驾车的路线规划成功以后的回调
* @param result
* @param errorCode
*/
@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {

dissmissProgressDialog();
aMap.clear();// 清理地图上的所有覆盖物
//        Log.e("zmm","-->"+errorCode);
if (errorCode == 1000) {
if (result != null && result.getPaths() != null) {
if (result.getPaths().size() > 0) {
emptyView.hideView();
mDriveRouteResult = result;
final DrivePath drivePath = mDriveRouteResult.getPaths()
.get(0);
DrivingRouteOverLay drivingRouteOverlay = new DrivingRouteOverLay(
GaoMipActivity.this, aMap, drivePath,
mDriveRouteResult.getStartPos(),
mDriveRouteResult.getTargetPos(), null);
drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
mBottomLayout.setVisibility(View.VISIBLE);
int dis = (int) drivePath.getDistance();
int dur = (int) drivePath.getDuration();
String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";
mRotueTimeDes.setText(des);
mRouteDetailDes.setVisibility(View.VISIBLE);
int taxiCost = (int) mDriveRouteResult.getTaxiCost();
mRouteDetailDes.setText("打车约"+taxiCost+"元");
mBottomLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(GaoMipActivity.this,
DriveRouteDetailActivity.class);
intent.putExtra("drive_path", drivePath);
intent.putExtra("drive_result",
mDriveRouteResult);
startActivity(intent);
}
});
} else if (result != null && result.getPaths() == null) {
ToastUtil.show(GaoMipActivity.this, R.string.no_result);
emptyView.hideView();
}

} else {
ToastUtil.show(GaoMipActivity.this, R.string.no_result);
emptyView.hideView();
}
} else {
ToastUtil.show(this.getApplicationContext(), errorCode);
emptyView.showErrorView();
emptyView.setRetryBtnListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchRouteResult(RouteSearch.RidingDefault,curType);
}
});
}

}

@Override
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {

}

/**
* 骑行路线规划成功以后的回调
* @param result
* @param errorCode
*/
@Override
public void onRideRouteSearched(RideRouteResult result, int errorCode) {
dissmissProgressDialog();
aMap.clear();// 清理地图上的所有覆盖物
if (errorCode == 1000) {
if (result != null && result.getPaths() != null) {
if (result.getPaths().size() > 0) {
emptyView.hideView();
mRideRouteResult = result;
final RidePath ridePath = mRideRouteResult.getPaths()
.get(0);
RideRouteOverlay rideRouteOverlay = new RideRouteOverlay(
this, aMap, ridePath,
mRideRouteResult.getStartPos(),
mRideRouteResult.getTargetPos());
rideRouteOverlay.removeFromMap();
rideRouteOverlay.addToMap();
rideRouteOverlay.zoomToSpan();
rideRouteOverlay.setNodeIconVisibility(false);//设置是否显示路段节点图标
mBottomLayout.setVisibility(View.VISIBLE);
int dis = (int) ridePath.getDistance();
int dur = (int) ridePath.getDuration();
String des = AMapUtil.getFriendlyTime(dur) + "(" + AMapUtil.getFriendlyLength(dis) + ")";
mRotueTimeDes.setText(des);
mRouteDetailDes.setVisibility(View.GONE);
mBottomLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(GaoMipActivity.this,
RideRouteDetailActivity.class);
intent.putExtra("ride_path", ridePath);
intent.putExtra("ride_result",
mRideRouteResult);
startActivity(intent);
}
});
} else if (result != null && result.getPaths() == null) {
ToastUtil.show(GaoMipActivity.this, R.string.no_result);
emptyView.hideView();
emptyView.showEmptyView();

}
} else {
emptyView.hideView();
emptyView.showEmptyView();
ToastUtil.show(GaoMipActivity.this, R.string.no_result);
}
} else {
ToastUtil.show(this.getApplicationContext(), errorCode);
emptyView.showErrorView();
emptyView.setRetryBtnListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchRouteResult(RouteSearch.RidingDefault,curType);
}
});
}
}


如果就算是长距离的也想用骑行的路线规划。。我们可以稍微伪装下,当然,这个时候算出来的时间是不对的,因为用的是驾驶的速度来算的时间,你可以在驾驶的回调里面,把驾驶的速度修改下,就可以了。。。

写的有不妥的地方,望见谅。。。

最后:每日一语录:

只要路是对的,就不要害怕它是短暂还是遥远,你终究会到达。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: