百度地图开发小结(2)
来源:互联网 发布:google chrome翻墙mac 编辑:程序博客网 时间:2024/04/27 18:50
前面完成了定位功能,我们想得到定位地点的名称,发现目前能获取到的数据只有地点的经纬度。
我们可以通过GeoCorder来得到地点的名称。
首先实现OnGetGeoCoderResultListener接口。
添加一个GeoCorder对象:
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用在onCreate方法中添加代码:
<span style="white-space:pre"></span>// 初始化搜索模块,注册事件监听mSearch = GeoCoder.newInstance();mSearch.setOnGetGeoCodeResultListener(this);前面我们在MyLocationListenner中实现了定位,我们可以得到当前位置的经纬度,下面就可以用GeoCorder的reverseGeoCode方法取得地点名称:
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));onGetReverseGeoCodeResult便接收到了相应的结果。
<span style="white-space:pre"></span>/** * Geo定位,经纬度获取地址 */@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {Toast.makeText(MainActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG).show();return;}mBaiduMap.clear();int size = result.getPoiList().size();if(size > 0){List<String> data = new ArrayList<String>();data.add(result.getAddress());for (PoiInfo info : result.getPoiList()) {String name = info.name;data.add(name);}ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.list, R.id.namelist, data);listView.setAdapter(adapter);}}这里顺便把地点的名称以及附近的POI信息添加到一个listview里。
--------------------------分割线------------------------------
定位以及获取名称完成了。接下来该实现导航功能了。
先给地图添加一个单击的监听:
OnMapClickListener listener = new OnMapClickListener() { /** * 地图单击事件回调函数 * @param point 点击的地理坐标 */ public void onMapClick(LatLng point){ mBaiduMap.clear(); double lat = point.latitude; double longit = point.longitude; BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); //在地图上添加Marker,并显示 mBaiduMap.addOverlay(option); ptEnd = point; if(ptEnd != null){ btnNav.setVisibility(Button.VISIBLE); } } /** * 地图内 Poi 单击事件回调函数 * @param poi 点击的 poi 信息 */ @Overridepublic boolean onMapPoiClick(MapPoi poi) {// TODO Auto-generated method stubreturn false;} };我们可以通过单击地图得到需要导航的目的地。
添加一个按钮启动导航,单击事件
<span style="white-space:pre"></span>public void startNavEngine(View view) {// 初始化导航引擎if(mIsEngineInitSuccess){launchNavigator2();return;}BaiduNaviManager.getInstance().initEngine(this, getSdcardDir(),mNaviEngineInitListener, ACCESS_KEY, mKeyVerifyListener);dialog = new ProgressDialog(this);dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);dialog.setMessage("初始化引擎中");dialog.show();}
<span style="white-space:pre"></span>private String getSdcardDir() {if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {return Environment.getExternalStorageDirectory().toString();}return null;}private NaviEngineInitListener mNaviEngineInitListener = new NaviEngineInitListener() {public void engineInitSuccess() {mIsEngineInitSuccess = true;Message message = new Message();message.what = 1;handler.sendMessage(message);}public void engineInitStart() {}public void engineInitFail() {Looper.prepare();Toast.makeText(MainActivity.this, "导航引擎初始化失败", 0).show();Looper.loop();}};private BNKeyVerifyListener mKeyVerifyListener = new BNKeyVerifyListener() {@Overridepublic void onVerifySucc() {// TODO Auto-generated method stub//Toast.makeText(MainActivity.this, "key校验成功", Toast.LENGTH_LONG).show();}@Overridepublic void onVerifyFailed(int arg0, String arg1) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "key校验失败", Toast.LENGTH_LONG).show();}};
<span style="white-space:pre"></span>Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:if(dialog.isShowing()){dialog.dismiss();}Toast.makeText(MainActivity.this, "导航引擎初始化成功", 0).show();launchNavigator2();break;default:break;}super.handleMessage(msg);}};以上检验了我们申请的key是否争取,引擎是否成功初始化。
/** * 指定导航起终点启动GPS导航.起终点可为多种类型坐标系的地理坐标。 * 前置条件:导航引擎初始化成功 */ private void launchNavigator2(){ //这里给出一个起终点示例,实际应用中可以通过POI检索、外部POI来源等方式获取起终点坐标 BNaviPoint startPoint = new BNaviPoint(ptCenter.longitude,ptCenter.latitude, "软件园", BNaviPoint.CoordinateType.BD09_MC); BNaviPoint endPoint = new BNaviPoint(ptEnd.longitude,ptEnd.latitude, "指定点", BNaviPoint.CoordinateType.BD09_MC); BaiduNaviManager.getInstance().launchNavigator(this, startPoint, //起点(可指定坐标系) endPoint, //终点(可指定坐标系) NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME, //算路方式 true, //真实导航 BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略 new OnStartNavigationListener() { //跳转监听 @Override public void onJumpToNavigator(Bundle configParams) { Intent intent = new Intent(MainActivity.this, BNavigatorActivity.class); intent.putExtras(configParams); startActivity(intent); } @Override public void onJumpToDownloader() { } }); }好了,可以进入导航界面了,这里只是用了其中一种导航的方式,其他的可以自行测试~
PS:assets文件夹的东西记得copy进去。
0 0
- 百度地图开发小结(2)
- 百度地图开发小结
- 百度地图开发小结(1)
- 百度地图开发(2)
- Android百度地图开发(2)
- Android studio 百度地图开发(2)地图定位
- Android 百度地图(三):知识点小结
- 地图使用小结(百度、google)
- 百度地图使用小结
- 百度地图js小结
- 百度地图API 小结
- Android Studio地图开发(百度地图)
- 百度地图的开发(2)
- 百度地图开发(一)
- 百度地图开发(一)
- 百度地图开发(1)
- 百度地图开发(记录)
- 百度地图开发(一)
- C语言二维数组作为函数的参数
- 串结构练习——字符串匹配
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- How to debug in Perl ?
- (转载)linux命令之四十二iostat命令
- 百度地图开发小结(2)
- 移动统计数据
- eclipse_cpp 配置mingw
- 获取鼠标hover表格的行列位置
- Linux - FTP命令使用详解
- 10 第十天【健身】
- 【Android 很进阶】android OOM理解以及相关方法分析
- xcode6 新建Pch文件
- iOS中UIWindow妙用(一) App 的密码保护功能