2019超详细AndroidStudio新手开发百度地图(4)—百度地图_路线规划的实现

阅读: 评论:0

2019超详细AndroidStudio新⼿开发百度地图(4)—百度地图_路线规划的实现
百度地图_路线规划的实现
前⾔
从⼩⽩⼀步步开始,很多资源是很久以前的,⽽且没有操作配套截图和资源分享。现在本踩过了很多坑,现在开发完成后决定重新写⼀份教程,希望能借此帮助到许多其他有这⽅⾯需求的⼈。
精⼒有限,会尽可能详细。
本⽂同项⽬同步完成,已经是做过好⼏个类似项⽬⼯程,但还是出了⼀些⼩问题,已经附上解决⽅法,本⽂中所⽤到资源⽂件已经附上下载链接,也可以⾃⾏去百度地图开发者官⽹去下载,不过由于版本更新很快,若使⽤本⽂开发还是强烈推荐使⽤本⽂提供链接进⾏下载,尤其是SDK,如果在构建项⽬中出⼀些问题很可能是SDK已经被官⽅更新导致,本⽂的操作步骤只在本⼈开发时保证有效,随着时间推移可能已经不适合,本⼈也不可能⼀直维护更新操作步骤。
另外,源码已在⽂末给出下载地址,若导⼊源码出现问题很⼤程度上可以考虑是Android Studio(AS)和Gradle版本的问题,请⾃⾏百度去解决。
还想说的是,若可以编译⽣成了APK,在虚拟机或实体设备运⾏中出现问题,给⼤家分享的⼀些本⼈开发百度地图调试的主要思路:
1.⾸先请⾃⾏百度学习⼀下AS的BUG调试,同其他的IDE程序⼀样,AS也可以标识代码运⾏到哪⼀步出现问题
2.到出问题的代码,BUG调试⾥会有报错原因提⽰,可以直接复制报错原因,百度查解决⽅法,⼤概率会有类似的解决帖⼦
相信按照本⽂可以解决绝⼤数问题,每个⼈的开发运⾏环境不同,不可避免会出⼀些其他问题,若还有其他问题,本⼈只能提供⼀些建议,具体措施可能还是需要你⾃⼰去解决,若分享链接失效,⽂末附上了**联系⽅式(会及时查看好友申请,同时请注明添加理由,否则不通过申请)**或者评论区冒泡。
于2020.3.7 19:16更新了失效链接,重新编辑了前⾔
注:
本⽂仅在前⽂的基础上只新增了步⾏规划,其实只要搞懂原理,只不过把路线规划其他抽象⽅法进⾏实现⽽已,这⾥仅举例实现步⾏规划的抽象⽅法。下⽂会具体指出在哪⾥实现抽象⽅法。
注:
路线规划的发起不能放到onCreate中,所以做了路线规划按钮。
参考官⽅⽂档()步骤:
其实参考价值⽐较⼩,只提供了所需要的MainActivity部分代码,具体所需要的类⽅法以及绘制路线的覆盖物资源都没有提供,⼀路磕磕绊绊了好多资源最后实现了路线规划,现分享如下(另外也可以去官⽅平台下载官⽅Demo进⾏参考,下⾯⽤到的资源其实也是官⽅的资源):
布局⽂件更新:
<Button
android:id="@+id/but_RoutrPlan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="规划"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="50dp"/>
MainActivity⽂件更新(类包会⾃动导⼊):
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private MapView mMapView = null;
private BaiduMap mBaiduMap = null;
private Context context;
//定位相关
private double mLatitude;
private double mLongtitude;
/
/⽅向传感器
private MyOrientationListener mMyOrientationListener;
private float mCurrentX;
//⾃定义图标
private BitmapDescriptor mIconLocation;
private LocationClient mLocationClient;
public BDAbstractLocationListener myListener;
private LatLng mLastLocationData;
private boolean isFirstin = true;
// 路线规划相关
private RoutePlanSearch mSearch = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
SDKInitializer.setCoordType(CoordType.BD09LL);
mMapView = (MapView) findViewById(R.id.bmapView);
//获取地图控件引⽤
mBaiduMap = Map();
initMyLocation();
initPoutePlan();
}
protected void onStart() {
//开启定位
mBaiduMap.setMyLocationEnabled(true);
if (!mLocationClient.isStarted())
mLocationClient.start();
//开启⽅向传感器
mMyOrientationListener.start();
}
@Override
protected void onResume() {
五台山一日游最佳路线图Resume();
}
@Override
protected void onPause() {
}
@Override
protected void onStop() {
//停⽌定位
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop();
//停⽌⽅向传感器
mMyOrientationListener.stop();
}
@Override
protected void onDestroy() {
mBaiduMap.setMyLocationEnabled(false);
mMapView = null;
mSearch.destroy();
}
@Override
public void onClick(View v) {
SDKInitializer.initialize(getApplicationContext());
switch (v.getId()) {
case R.id.but_Loc: {
centerToMyLocation(mLatitude, mLongtitude);
break;
}
case R.id.but_RoutrPlan: {
StarRoute();
break;
}
}
}
//按钮响应
private void button() {
//按钮
Button mbut_Loc = (Button) findViewById(R.id.but_Loc);
Button mbut_RoutrPlan = (Button) findViewById(R.id.but_RoutrPlan);    //按钮处理
mbut_Loc.setOnClickListener(this);
mbut_RoutrPlan.setOnClickListener(this);
}
//定位
private class MyLocationListener extends BDAbstractLocationListener {
public void onReceiveLocation(BDLocation location) {
//mapView 销毁后不在处理新接收的位置
if (location == null || mMapView == null){
return;
}
MyLocationData locData = new MyLocationData.Builder()
.Radius())
// 此处设置开发者获取到的⽅向信息,顺时针0-360
.direction(mCurrentX).Latitude())
.Longitude()).build();
mBaiduMap.setMyLocationData(locData);
//设置⾃定义图标
MyLocationConfiguration config = new
MyLocationConfiguration(
MyLocationConfiguration.LocationMode.NORMAL, true, mIconLocation);
mBaiduMap.setMyLocationConfiguration(config);
//更新经纬度
mLatitude = Latitude();
mLongtitude = Longitude();
//设置起点
mLastLocationData = new LatLng(mLatitude, mLongtitude);
if (isFirstin) {
Latitude(), Longitude());
if (LocType() == BDLocation.TypeGpsLocation) {
// GPS定位结果
东莞松山湖房价
Toast.makeText(context, "定位:"+AddrStr(), Toast.LENGTH_SHORT).show();
} else if (LocType() == BDLocation.TypeNetWorkLocation) {
// ⽹络定位结果
Toast.makeText(context, "定位:"+AddrStr(), Toast.LENGTH_SHORT).show();
} else if (LocType() == BDLocation.TypeOffLineLocation) {
// 离线定位结果
Toast.makeText(context, "定位:"+AddrStr(), Toast.LENGTH_SHORT).show();
} else if (LocType() == BDLocation.TypeServerError) {
Toast.makeText(context, "定位:服务器错误", Toast.LENGTH_SHORT).show();
} else if (LocType() == BDLocation.TypeNetWorkException) {
Toast.makeText(context, "定位:⽹络错误", Toast.LENGTH_SHORT).show();
} else if (LocType() == BDLocation.TypeCriteriaException) {
Toast.makeText(context, "定位:⼿机模式错误,请检查是否飞⾏", Toast.LENGTH_SHORT).show();            }
isFirstin = false;
}
}
}
//初始化定位
private void initMyLocation() {
//缩放地图
MapStatusUpdate msu = To(15.0f);
mBaiduMap.setMapStatus(msu);
//开启定位迪拜最穷的人每月工资
mBaiduMap.setMyLocationEnabled(true);
//声明LocationClient类
mLocationClient = new LocationClient(this);
//通过LocationClientOption设置LocationClient相关参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setIsNeedAddress(true);//设置是否需要地址信息宁波海洋世界门票
option.setScanSpan(1000);
//设置locationClientOption
mLocationClient.setLocOption(option);
myListener = new MyLocationListener();
//注册监听函数
mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.navi_map_gps);
initOrientation();
涠洲岛民宿价格多少//开始定位
mLocationClient.start();
}
//回到定位中⼼
private void centerToMyLocation(double latitude, double longtitude) {
mBaiduMap.clear();
mLastLocationData = new LatLng(latitude, longtitude);
MapStatusUpdate msu = wLatLng(mLastLocationData);
mBaiduMap.animateMapStatus(msu);
}
世界之窗深圳门票
//传感器
private void initOrientation() {
//传感器
mMyOrientationListener = new MyOrientationListener(context);
mMyOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() {        @Override
public void onOrientationChanged(float x) {
mCurrentX = x;
}
});
}
//路线规划初始化
private void initPoutePlan() {
mSearch = wInstance();
mSearch.setOnGetRoutePlanResultListener(listener);
}
// 路线规划模块
public OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {
@Override
public void onGetWalkingRouteResult(WalkingRouteResult result) {
if (result == null || != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this, "路线规划:未到结果,检查输⼊", Toast.LENGTH_SHORT).show();            //禁⽌定位
isFirstin = false;
}
assert result != null;
if ( == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接⼝获取建议查询信息
return;
}
if ( == SearchResult.ERRORNO.NO_ERROR) {
mBaiduMap.clear();
Toast.makeText(MainActivity.this, "路线规划:搜索完成", Toast.LENGTH_SHORT).show();
WalkingRouteOverlay overlay = new WalkingRouteOverlay(mBaiduMap);
overlay.RouteLines().get(0));
overlay.addToMap();
}
//禁⽌定位
isFirstin = false;
}
@Override
public void onGetTransitRouteResult(TransitRouteResult var1) {
}
@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult var1) {
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult result) {
}

本文发布于:2023-09-05 19:54:32,感谢您对本站的认可!

本文链接:http://www.035400.com/whly/1/612237.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:规划   路线   百度   问题   设置   定位   地图
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2024-2030 Comsenz Inc.Powered by © 文化旅游网 滇ICP备2022007236号-403 联系QQ:1103060800网站地图