最新Android百度地图3.4.x的使用

来源:互联网 发布:勤智数码 大数据 编辑:程序博客网 时间:2024/05/16 05:17

最近碰到一个跟地图有关系的业务,很早之前到是用过百度地图还是1.x 今天去用发现已经不能使用了,查看百度API发现已经都改了,到网上去查新版的地图使用结果

发现全部都是以前的版本,看来想偷懒是不可能,只能自己去看文档来写了。

官方的文档:http://developer.baidu.com/map/index.php 根据需要去下载对应的SDK(我这里只用地图和定位)

根据官方的开发步骤,在自己的工程里 导入需要的jar文件和so文件即可。

同时需要申请key,具体过程请看官方指导很详细,这里就不再啰嗦。

今天要完成的功能是定位和实现在地图上的线路规划(步行)

1 定位:

布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" ><LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content">    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="步行线路"        android:onClick="start_line"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="定位"        android:onClick="start_location"        />    <TextView        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:padding="@dimen/padding_medium"        android:text="@string/hello_world"        /></LinearLayout>
        <!-- 引入百度地图组件 参考官方例子-->
       <com.baidu.mapapi.map.MapView        android:id="@+id/bmapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" /></LinearLayout>


根据需要就直接在界面上加入了百度的地图组件 MapView .

先说明下我们会使用到的几个东西:

 private MapView baidum = null ;//地图显示组件
 private BaiduMap mBaiduMap = null ;//百度地图对象
 private LocationClient locationc = null ;//定位客户端
 private boolean isFirstLoc = true ;//是否是第一次定位
 private RoutePlanSearch mSearch =null ; //poi搜索(步行规划需要)
 //还需要对应的定位监听和步行规划监听 2个对象,在后面给出
 private BDLocationListener location_listener = null;//定位监听

下面给出代码:

@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.activity_main);        //        baidum = (MapView)findViewById(R.id.bmapView);        mBaiduMap = baidum.getMap();//获取地图对象// 开启定位图层mBaiduMap.setMyLocationEnabled(true);        locationc = new LocationClient(this);        location_listener = new MyLocationListener();//定位监听实现类        locationc.registerLocationListener(location_listener);//注册监听    }

默认一开始地图会显示京城为默认显示地图,所以这里我用一个按钮来切换到当前自己的 位置:

public void start_location(View v){    //按钮事件    LocationClientOption option = //定位参数设置,参考官方    new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(5*60*1000);//定位的频率(ms)locationc.setLocOption(option);locationc.start();//开始定位,定位成功会回调监听    }

监听对象的实现,需要实现定位监听接口:

class MyLocationListener implements BDLocationListener{@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null || baidum == null){return;}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(0).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);if (isFirstLoc) {isFirstLoc = false;LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());//设置定位显示模式为:跟随(会有个箭头)、普通、指南针三种mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.FOLLOWING,true,null));MapStatusUpdate u1 = MapStatusUpdateFactory.zoomTo(17);//定位目标时放到到17倍mBaiduMap.setMapStatus(u1);//MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);//定位到的坐标mBaiduMap.animateMapStatus(u);//动画显示到目标位置,也就是自己的手机所在地}TextView tv = (TextView)findViewById(R.id.tv);tv.setText("经纬度:"+location.getLongitude() + " : " + location.getLatitude());}        }

部署到手机,运行,打开GPS和网络 基本就可以实现了(注意,需要在清单里加入所必须的内容和所需的权限在后面给出,如果是空白网格 key错误的可能性比较大)

下面给出步行规划的实现(按钮完成):

 

public void start_line(View v){    //参考官方包: com.baidu.mapapi.search.route    mSearch = RoutePlanSearch.newInstance();//实例化 路径规划搜索接口 mSearch.setOnGetRoutePlanResultListener(rlistener);//规划监听    WalkingRoutePlanOption option = new WalkingRoutePlanOption() ;//步行规划对象    PlanNode start = PlanNode.withCityNameAndPlaceName("长沙", "林科大");  //起点    PlanNode end = PlanNode.withCityNameAndPlaceName("长沙", "五一广场");//终点    option.from(start);      option.to(end);    if(mSearch.walkingSearch(option)){    Toast.makeText(getApplicationContext(), "步行线路完成", Toast.LENGTH_SHORT).show();    }    }

路径搜索监听:


OnGetRoutePlanResultListener rlistener = new OnGetRoutePlanResultListener() {@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {//步行规划结果 List<WalkingRouteLine> all_lines = result.getRouteLines(); if(all_lines!=null){ for(WalkingRouteLine line : all_lines){ //步行规划覆盖层: WalkingRouteOverlay wo = new WalkingRouteOverlay(mBaiduMap); wo.setData(line); wo.addToMap();//添加到地图 wo.zoomToSpan();//缩放到合适大小显示整个线路 } }}@Overridepublic void onGetTransitRouteResult(TransitRouteResult arg0) {//公交}@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult arg0) {//驾车}};


到此已经能完整的显示结果了。

附权限(都可以从官网上提示获取):

<!-- 这个权限用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!-- 这个权限用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><!-- 获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!-- SD卡读取权限,用户写入离线定位数据--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.ACCESS_GPS" />    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />


需要在清单里写的内容(详情参考官方说明)

在<application>里写入:

<meta-data            android:name="com.baidu.lbsapi.API_KEY"            android:value="你自己程序的key" />

还有这个:

<service            android:name="com.baidu.location.f"            android:enabled="true"            android:process=":remote" />


Ok。去试试吧!小东西,大神无视吧……

源码下载,打了那么多字支持下吧




 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高中孩子爱打架怎么办 宝宝性格太弱怎么办 宝宝太老实了怎么办 一岁多宝宝爱打人怎么办 一岁半宝宝爱打人怎么办 两岁半宝宝喜欢打人怎么办 孩子总是挨欺负怎么办 一年级孩子爱打架怎么办 孩子没规矩家长怎么办 小朋友在幼儿园打人怎么办 幼儿园小朋友喜欢打人怎么办 三周岁宝宝爱哭怎么办 2周岁宝宝爱哭怎么办 一个月宝宝爱哭怎么办 2岁宝宝爱哭怎么办 三岁小朋友打人怎么办 一岁半小朋友喜欢打人怎么办 爷爷偏心我该怎么办 冲动型学生老师怎么办 两个宝宝争东西怎么办 2周岁宝宝打人怎么办 小孩幼儿园被打怎么办 小孩喝了润滑油怎么办 孩子被打了怎么办 宝宝吃了指甲油怎么办 孩子掉了深海怎么办 小孩打了别人怎么办 两岁宝宝爱咬人怎么办 孩子上学老打人怎么办 孩子上学爱说话怎么办 孩子抢玩具打人怎么办 生气就像打人怎么办 小孩总喜欢打人怎么办 小孩性格好翘怎么办 一岁小宝宝打人怎么办 小孩子老喜欢打人怎么办 孩子被大人欺负怎么办 小孩识字量少怎么办 父母打架孩子该怎么办 小孩嘴唇里面烂怎么办 幼儿园小朋友很调皮怎么办