百度地图实时定位+导航路径规划的实现APP
本科生毕业设计:《一种智能停车系统的设计》,成都信息工程大学,2018
使用到的技术
- 百度地图SDK
- LBS云数据管理
- 路径规划与导航
- 二维码扫描和识别
- NFC功能——2020.04新增
1、简单实时定位效果如图,打开即可用
2、高级功能:LBS云
已实现车辆的自动识别(二维码扫描识别功能)、车位计时、充值缴费(模拟)、地图自动引导(路线规划功能)。登录注册(包含自动登录) 等功能。基于B/S架构的java web网络结构模式,采用了百度地图和LBS云服务器的设计方法
LBS云添加自定义车位信息
二维码扫描识别
路径规划:
包含步行路线、驾车路线,可设置时间最短、路径最短等策略
3、数据库设计
程序功能逻辑设计
本科生毕业设计配套答辩PPT前言页
程序的说明文档
附上源码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
//this.requestWindowFeature(Window.FEATURE_NO_TITLE); //去标题
setContentView(R.layout.activity_main);
this.context=this;
activityList.add(this);
mCloudManager = CloudManager.getInstance();
mCloudManager.init();
mCloudManager.registerListener(MainActivity.this);
initMap();//初始化地图
initLocation();//定位
initView();//初始化控件
final PoiSearch search = PoiSearch.newInstance();
//路线规划对象
final RoutePlanSearch routePlanSearch = RoutePlanSearch.newInstance();
/**///城市搜索,需要城市名称和关键字
Button poi=(Button) findViewById(R. id.poi) ;
//mDb06ll = (Button) findViewById(R.id.mDb06llNaviBtn);
initListener();
if (initDirs()) {
initNavi();
}
}
//步行路线结果回调
@Override
public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
mBaiduMap.clear();
if (walkingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
WalkingRouteOverlay walkingOverlay = new WalkingRouteOverlay(mBaiduMap);
walkingOverlay.setData(walkingRouteResult.getRouteLines().get(0));// 设置一条路线方案
walkingOverlay.addToMap();
walkingOverlay.zoomToSpan();
mBaiduMap.setOnMarkerClickListener(walkingOverlay);
Log.e("TAG", walkingOverlay.getOverlayOptions() + "");
} else {
Toast.makeText(getBaseContext(), "搜不到!", Toast.LENGTH_SHORT).show();
}
}
//驾车路线结果回调
@Override
public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
mBaiduMap.clear();//清除图标或路线
if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(mBaiduMap);
drivingRouteOverlay.setData(drivingRouteResult.getRouteLines().get(0));// 设置一条驾车路线方案 0换成1会闪退!!
mBaiduMap.setOnMarkerClickListener(drivingRouteOverlay);
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
int totalLine = drivingRouteResult.getRouteLines().size();
Toast.makeText(getBaseContext(),"共查询出" + totalLine + "条符合条件的线路", Toast.LENGTH_LONG).show();
// 通过getTaxiInfo()可以得到很多关于驾车的信息
}
else Toast.makeText(getBaseContext(), "抱歉,未找到结果",Toast.LENGTH_SHORT).show();
}
private void initLocation() {
locationMode= MyLocationConfiguration.LocationMode.NORMAL;
//定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动
mlocationClient=new LocationClient(this);
mlistener=new MylocationListener();
//注册监听器
mlocationClient.registerLocationListener(mlistener);
//配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等
LocationClientOption mOption=new LocationClientOption();
//设置坐标类型
mOption.setCoorType("bd09ll");
//设置是否需要地址信息,默认为无地址
mOption.setIsNeedAddress(true);
//设置是否打开gps进行定位
mOption.setOpenGps(true);
//设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
int span=1000;
mOption.setScanSpan(span);
//设置 LocationClientOption
mlocationClient.setLocOption(mOption);
//初始化图标,BitmapDescriptorFactory是bitmap 描述信息工厂类,在使用该类方法之前请确保已经调用了 SDKInitializer.initialize(Context) 函数以提供全局 Context 信息。
//mIconLocation= BitmapDescriptorFactory.fromResource(R.drawable.car);
myOrientationListener=new MyOrientationListener(context);
myOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() {
@Override
public void onOrientationChanged(float x) {
mCurrentX=x;
}
});
}
//云检索
public void onGetSearchResult(CloudSearchResult result, int error) {
if (result != null && result.poiList != null
&& result.poiList.size() > 0) {
Log.d(LTAG, "onGetSearchResult, result length: " + result.poiList.size());
mBaiduMap.clear();
BitmapDescriptor bd = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
LatLng ll;
LatLngBounds.Builder builder = new Builder();
for (CloudPoiInfo info : result.poiList) {
ll = new LatLng(info.latitude, info.longitude);
BDMapDataY bean =new BDMapDataY();//云数据
bean.setLatitude(info.latitude);
bean.setLongitude(info.longitude);
bean.setTitle(info.title);//这里是title!!
Bundle data = new Bundle();
data.putSerializable("Cloud", bean);//哇 信息量巨大!
OverlayOptions oo = new MarkerOptions().icon(bd).position(ll).extraInfo(data);
mBaiduMap.addOverlay(oo);
builder.include(ll);
}
LatLngBounds bounds = builder.build();
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngBounds(bounds);
mBaiduMap.animateMapStatus(u);
}
else Toast.makeText(getApplication(), "搜索不到你需要的信息!", Toast.LENGTH_SHORT).show();
}
附APP下载链接 https://download.csdn.net/download/u011752195/12373007
整个下来通过网络资源整理学习,并完善了一些代码,程序员挺累的
如果觉得不错可以点歌关注吧~
后续将分享更多程序代码~
合作请联系chat 1012638162
有问题可以在下面提出来~