




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android百度地图定位SDK(版本v3.1)(一)分类: Android百度地图2013-02-16 21:12 1078人阅读 评论(2) 收藏 举报androidAndroidANDROIDgpsGPS在wifi3G2G环境下定位百度地图一、使用百度提供的地图定位服务所需资源:在百度官网,下载百度地图定位SDK(Android版),在里面找liblocSDK3.so和locSDK_3.1.jar这两个文件。下载地址:/map/geosdk-android-download.htm二、搭建环境: 1、将liblocSDK3.so文件拷贝到libs/armeabi目录下,将locSDK3.1.jar文件拷贝到libs目录下,并将locSDK3.1.jar导入到工程中。如下图: 2、修改AndroidManifest.xml文件: a. 在application标签中声明service组件html view plaincopy1 b. 声明所需权限 html view plaincopy5 6 7 8 9 10 11 12 13 14 三、具体实现: 1、构建LocationClient类的对象,设置定位参数,并注册实现了BDLocationListener接口的类的对象为监听器。java view plaincopy15 mLocationClient = new LocationClient(this.getApplicationContext(); 16 17 mBDLocationListener = new MyBDLocationListener(); 18 mLocationClient.registerLocationListener(mBDLocationListener); 19 20 LocationClientOption option = new LocationClientOption(); 21 22 / 需要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无地址信息。 23 option.setAddrType(all); 24 / 设置是否返回POI的电话和地址等详细信息。默认值为false,即不返回POI的电话和地址信息。 25 option.setPoiExtraInfo(true); 26 27 / 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。 28 option.setProdName(定位我当前的位置); 29 30 / 打开GPS,使用gps前提是用户硬件打开gps。默认是不打开gps的。 31 option.setOpenGps(false); 32 33 / 定位的时间间隔,单位:ms 34 / 当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。 35 / option.setScanSpan(1000); 36 37 / 查询范围,默认值为500,即以当前定位位置为中心的半径大小。 38 option.setPoiDistance(500); 39 / 禁用启用缓存定位数据 40 option.disableCache(true); 41 42 / 坐标系类型,百度手机地图对外接口中的坐标系默认是bd09ll 43 option.setCoorType(bd09ll); 44 45 / 设置最多可返回的POI个数,默认值为3。由于POI查询比较耗费流量,设置最多返回的POI个数,以便节省流量。 46 option.setPoiNumber(3); 47 48 / 设置定位方式的优先级。 49 / 即使有GPS,而且可用,也仍旧会发起网络请求。这个选项适合对精确坐标不是特别敏感,但是希望得到位置描述的用户。 50 option.setPriority(LocationClientOption.NetWorkFirst); 51 52 mLocationClient.setLocOption(option); 2、发起请求:java view plaincopy53 / 发起定位请求 54 findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() 55 56 Override 57 public void onClick(View v) 58 mLocationClient.start(); 59 60 ); 61 62 / 发起重新定位 63 findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() 64 65 Override 66 public void onClick(View v) 67 if (mLocationClient != null & mLocationClient.isStarted() 68 mLocationClient.requestLocation(); 69 70 71 ); 72 73 / 发起查询请求 74 findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() 75 76 Override 77 public void onClick(View v) 78 if (mLocationClient != null & mLocationClient.isStarted() 79 mLocationClient.requestPoi(); 80 81 82 ); 3、 编写BDLocationListener接口的实现类,接收异步返回的定位结果和异步返回的POI查询结果。java view plaincopy83 final class MyBDLocationListener implements BDLocationListener 84 85 Override 86 public void onReceiveLocation(BDLocation location) 87 Log.e(TAG, -onReceiveLocation()-); 88 89 if(location = null) 90 Log.e(TAG, -onReceiveLocation-location is NULL-); 91 return; 92 93 94 int type = location.getLocType(); 95 Log.i(TAG, 当前定位采用的类型是:type = + type); 96 97 String coorType = location.getCoorType(); 98 Log.i(TAG, 坐标系类型:coorType = + coorType); 99 100 / 判断是否有定位精度半径 101 if(location.hasRadius() 102 / 获取定位精度半径,单位是米 103 float accuracy = location.getRadius(); 104 Log.i(TAG, accuracy = + accuracy); 105 106 107 if(location.hasAddr() 108 / 获取反地理编码。 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。 109 String address = location.getAddrStr(); 110 Log.i(TAG, address = + address); 111 112 113 String province = location.getProvince(); / 获取省份信息 114 String city = location.getCity(); / 获取城市信息 115 String district = location.getDistrict(); / 获取区县信息 116 117 Log.i(TAG, province = + province); 118 Log.i(TAG, city = + city); 119 Log.i(TAG, district = + district); 120 121 double latitude = location.getLatitude(); 122 double longitude = location.getLongitude(); 123 Log.i(TAG, latitude = + latitude); 124 Log.i(TAG, longitude = + longitude); 125 126 127 128 Override 129 public void onReceivePoi(BDLocation poiLocation) 130 131 Log.e(TAG, -onReceivePoi()-); 132 133 if(poiLocation = null) 134 Log.e(TAG, -onReceivePoi-location is NULL-); 135 return; 136 137 138 if(poiLocation.hasPoi() 139 String poiStr = poiLocation.getPoi(); 140 Log.i(TAG, poiStr = + poiStr); 141 142 143 144 if(poiLocation.hasAddr() 145 / 获取反地理编码。 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。 146 String address = poiLocation.getAddrStr(); 147 Log.i(TAG, address = + address); 148 149 150 4、定位结束后停止服务:java view plaincopy151 if(mLocationClient != null & mLocationClient.isStarted() 152 if(mBDLocationListener != null) 153 mLocationClient.unRegisterLocationListener(mBDLocationListener); 154 155 156 mLocationClient.stop(); 157 mLocationClient = null; 158 四、运行效果图:1、在3G/2G网络环境下:点击第一个按钮,Logcat打印的日志如下:点击第二个按钮,Logcat打印的日志如下:点击第二个按钮,Logcat打印的日志如下:点击第三个按钮,Logcat打印的日志如下:点击第三个按钮,Logcat打印的日志如下:点击第三个按钮,Logcat打印的日志如下:2、在wifi环境下:点击第二个按钮,Logcat打印的日志如下:点击第三个按钮,Logcat打印的日志如下:注:我是在房子里面,也就是说:只能用WIFI或者3G/2G网络粗略的确定我当前的位置信息。我用3G/2G网络和WIFI都测过了,每次间隔要大于1秒。通过上面的Logcat打印出的结果,我们大致可以得出这样的结论:在WIFI或者3G/2G网络只能粗略的确定我当前的位置信息。可能会差很大,也就是说不靠谱。大家可以自己测测看,呵呵。完整代码:java view plaincopy159 package com.android.baidu.map; 160 161 import android.app.Activity; 162 import android.os.Bundle; 163 import android.util.Log; 164 import android.view.View; 165 166 import com.baidu.location.BDLocation; 167 import com.baidu.location.BDLocationListener; 168 import com.baidu.location.LocationClient; 169 import com.baidu.location.LocationClientOption; 170 171 /* 172 * 获取我当前的位置信息。 173 * 对精确坐标不是特别敏感,但是希望得到位置描述。 174 * author android_ls 175 * 176 */ 177 public class BaiduMapLoactionActivity extends Activity 178 179 private static final String TAG = BaiduMapLoactionActivity; 180 181 private LocationClient mLocationClient; 182 183 private MyBDLocationListener mBDLocationListener; 184 185 Override 186 public void onCreate(Bundle savedInstanceState) 187 super.onCreate(savedInstanceState); 188 setContentView(R.layout.main); 189 190 mLocationClient = new LocationClient(this.getApplicationContext(); 191 192 mBDLocationListener = new MyBDLocationListener(); 193 mLocationClient.registerLocationListener(mBDLocationListener); 194 195 LocationClientOption option = new LocationClientOption(); 196 197 / 需要地址信息,设置为其他任何值(string类型,且不能为null)时,都表示无地址信息。 198 option.setAddrType(all); 199 / 设置是否返回POI的电话和地址等详细信息。默认值为false,即不返回POI的电话和地址信息。 200 option.setPoiExtraInfo(true); 201 202 / 设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。 203 option.setProdName(定位我当前的位置); 204 205 / 打开GPS,使用gps前提是用户硬件打开gps。默认是不打开gps的。 206 option.setOpenGps(false); 207 208 / 定位的时间间隔,单位:ms 209 / 当所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。 210 / option.setScanSpan(1000); 211 212 / 查询范围,默认值为500,即以当前定位位置为中心的半径大小。 213 option.setPoiDistance(500); 214 / 禁用启用缓存定位数据 215 option.disableCache(true); 216 217 / 坐标系类型,百度手机地图对外接口中的坐标系默认是bd09ll 218 option.setCoorType(bd09ll); 219 220 / 设置最多可返回的POI个数,默认值为3。由于POI查询比较耗费流量,设置最多返回的POI个数,以便节省流量。 221 option.setPoiNumber(3); 222 223 / 设置定位方式的优先级。 224 / 即使有GPS,而且可用,也仍旧会发起网络请求。这个选项适合对精确坐标不是特别敏感,但是希望得到位置描述的用户。 225 option.setPriority(LocationClientOption.NetWorkFirst); 226 227 mLocationClient.setLocOption(option); 228 229 / 发起定位请求 230 findViewById(R.id.btn_request).setOnClickListener(new View.OnClickListener() 231 232 Override 233 public void onClick(View v) 234 mLocationClient.start(); 235 236 ); 237 238 / 发起重新定位 239 findViewById(R.id.btn_location).setOnClickListener(new View.OnClickListener() 240 241 Override 242 public void onClick(View v) 243 if (mLocationClient != null & mLocationClient.isStarted() 244 mLocationClient.requestLocation(); 245 246 247 ); 248 249 / 发起查询请求 250 findViewById(R.id.btn_address).setOnClickListener(new View.OnClickListener() 251 252 Override 253 public void onClick(View v) 254 if (mLocationClient != null & mLocationClient.isStarted() 255 mLocationClient.requestPoi(); 256 257 258 ); 259 260 261 262 final class MyBDLocationListener implements BDLocationListener 263 264 Override 265 public void onReceiveLocation(BDLocation location) 266 Log.e(TAG, -onReceiveLocation()-); 267 268 if(location = null) 269 Log.e(TAG, -onReceiveLocation-location is NULL-); 270 return; 271 272 273 int type = location.getLocType(); 274 Log.i(TAG, 当前定位采用的类型是:type = + type); 275 276 String coorType = location.getCoorType(); 277 Log.i(TAG, 坐标系类型:coorType = + coorType); 278 279 / 判断是否有定位精度半径 280 if(location.hasRadius() 281 / 获取定位精度半径,单位是米 282 float accuracy = location.getRadius(); 283 Log.i(TAG, accuracy = + accuracy); 284 285 286 if(location.hasAddr() 287 / 获取反地理编码。 只有使用网络定位的情况下,才能获取当前位置的反地理编码描述。 288 String address = location.getAddrStr(); 289 Log.i(TAG, address = + address); 290 291 292 String province = location.getProvince(); / 获取省份信息 293 String city = location.getCity(); / 获取城市信息 294 String district = location.getDistrict(); / 获取区县信息 295 296 Log.i(TAG, province = + province); 297 Log.i(TAG, city = + city); 298 Log.i(TAG, district = + district); 299 300 double latitude = location.ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南机电职业技术学院选聘云南省产业导师(12人)考试模拟试题及答案解析
- 2025四川绵阳三台县教体系统考调事业单位工作人员6人备考考试试题及答案解析
- 2025浙江农业商贸职业学院劳务派遣人员招聘1人考试模拟试题及答案解析
- 2025湖南怀化市靖州苗族侗族自治县政务服务中心见习人员招聘2人备考考试题库附答案解析
- 2025中山大学附属第一医院广西医院神经外科等科室人才招聘6人考试模拟试题及答案解析
- 2025湖南郴州市宜航人力资源有限责任公司招聘项目现场管理人员、现场技术人员2人考试参考题库及答案解析
- 2025年淮北濉溪职业技术学校公开招聘代课教师33名考试模拟试题及答案解析
- 2025年财会类初级银行从业人员-法律法规与综合能力参考题库含答案解析(5卷)
- 2025年下半年新疆兵团招聘事业单位工作人员(2398人)备考考试题库附答案解析
- 2025年赣州市南康区初中学校公开选调区内教师备考考试题库附答案解析
- GB 25585-2010食品安全国家标准食品添加剂氯化钾
- 小学信息技术人工智能教学案例
- 服装零售业概况
- sg1000系列光伏并网箱式逆变器通信协议
- 专升本03297企业文化历年试题题库(考试必备)
- 第四讲大学生就业权益及其法律保障课件
- 重庆大学介绍课件
- 学校开展校园欺凌专项治理情况自查表
- 牛津深圳版九年级上册Module 1 Geniuses Unit1 Wise Man in History话题作文期末复习
- 电能表生产流程
- Scala基础语法课件汇总整本书电子教案全套课件完整版ppt最新教学教程
评论
0/150
提交评论