百度地图的集成定位与路径规划
2016-03-31 17:43
190 查看
不说了直接上代码
**1.在配置文件中**
<!-- 百度地图的权限 --> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <!-- 用于读取手机当前的状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡读取权限,用户写入离线定位数据 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission> <!--在application配置服务与key--> <!-- 百度地图所用的key --> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="x00wfDGOo7RRpc8jaIoRwGDCRrZIv5lL" /> <!-- 百度地图所用的服务 --> <!-- 另注:android:enabled="true" 要注意了 需要定位是 此处的参数为true 若不定位则无所谓 --> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service>
2.在xml中
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout>
3.在代码中
定位界面(主要代码)
– 如果看不清楚有demo可以自行下载(下载后需要更改key值 在百度API官网申请自己的key)
这是baseActivity做了一些对百度sdk的初始化
private MyReceiver receiver; public MapView bmapView; public BaiduMap baiduMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initSDK(); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(com.example.mapdamo.R.layout.map); bmapView = (MapView) findViewById(R.id.bmapView); baiduMap = bmapView.getMap(); initMap(); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); bmapView.onDestroy(); } @Override protected void onResume() { super.onResume(); bmapView.onResume(); } @Override protected void onPause() { super.onPause(); bmapView.onPause(); } public abstract void initMap(); private void initSDK() { SDKInitializer.initialize(getApplicationContext()); receiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR); filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR); registerReceiver(receiver, filter); } class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR .equals(intent.getAction())) { } if (SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR .equals(intent.getAction())) { } } }
这是LocationActivity继承自baseActivity
public void initMap() { //建立定位对象 loClient = new LocationClient(getApplicationContext()); //初始化定位 initLocation(); //设置监听 loClient.registerLocationListener(myListener); //开始定位 if (!loClient.isStarted()) { loClient.start(); } } /** * 设置定位参数 */ private void initLocation() { // 设置定位请求参数 LocationClientOption option = new LocationClientOption(); // 设置定位精度 option.setLocationMode(LocationMode.Hight_Accuracy); // 设置经纬度格式 option.setCoorType("bd09ll"); // 设置请求间隔 option.setScanSpan(5000); // 设置返回数据包括地址信息 option.setIsNeedAddress(true); // 设置返回数据包括机头方向 option.setNeedDeviceDirect(true); // 设置参数 loClient.setLocOption(option); // 开启定位 baiduMap.setMyLocationEnabled(true); // 更改地图的缩放级别 3-19 MapStatusUpdate mapStatusUpdate2 = MapStatusUpdateFactory.zoomTo(17.0f); baiduMap.animateMapStatus(mapStatusUpdate2); } /** * 接受定位后返回的信息 * * @author xu-pc * */ public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { //得到返回码 int i = bdLocation.getLocType(); Log.i("123", "返回码是"+i); //拿到偏移量 MyOrientationListener myOrientationListener = new MyOrientationListener( LocationActivity.this); myOrientationListener .setOnOrientationListener(new OnOrientationListener() { @Override public void onOrientationChanged(float x) { mCurrentX = x;//偏移量 } }); baiduMap.setMyLocationData(new MyLocationData.Builder() .direction(mCurrentX).accuracy(bdLocation.getRadius()) .latitude(bdLocation.getLatitude()) .longitude(bdLocation.getLongitude()).build()); Log.e("123", "经度:" + bdLocation.getLatitude()); Log.e("123", "纬度:" + bdLocation.getLongitude()); //移动到当前位置 centerToMyLocation(bdLocation.getLatitude(), bdLocation.getLongitude()); } } /** * 定位到所在位置 * * @param mLongtitude * @param mLatitude */ private void centerToMyLocation(double mLatitude, double mLongtitude) { latLng = new LatLng(mLatitude, mLongtitude); msu = MapStatusUpdateFactory.newLatLng(latLng);// baiduMap.animateMapStatus(msu); } /** * 退出时停止定位 */ @Override protected void onStop() { super.onStop(); loClient.stop(); // 关闭定位 baiduMap.setMyLocationEnabled(false); }
这是关于设置广播监听地图的异常
package com.example.mapdamo.uitls; import com.baidu.mapapi.SDKInitializer; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * 设置广播监听地图的异常 * @author xu-pc * */ public class BaiduReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 网路异常 if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR .equals(intent.getAction())) { Log.i("123", "网路异常"); } // 权限异常 if (SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR .equals(intent.getAction())) { Log.i("123", "权限异常"); } } }
这是关于火星坐标进行偏移量的获取(在LocationActivity用到)
package com.example.mapdamo.uitls; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; public class MyOrientationListener implements SensorEventListener { private SensorManager mSensorManager; private Context mContext; private Sensor mSensor; private float lastX; public MyOrientationListener(Context context) { this.mContext = context; } @SuppressWarnings("deprecation") public void start() { mSensorManager = (SensorManager) mContext .getSystemService(Context.SENSOR_SERVICE); if (mSensorManager != null) { mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } if (mSensor != null) { mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI); } } public void stop() { mSensorManager.unregisterListener(this); } @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } @SuppressWarnings( { "deprecation" }) @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { float x = event.values[SensorManager.DATA_X]; if (Math.abs(x - lastX) > 1.0) { if (mOnOrientationListener != null) { mOnOrientationListener.onOrientationChanged(x); } } lastX = x; } } private OnOrientationListener mOnOrientationListener; public void setOnOrientationListener( OnOrientationListener mOnOrientationListener) { this.mOnOrientationListener = mOnOrientationListener; } public interface OnOrientationListener { void onOrientationChanged(float x); } }
下面是demo的连接
百度地图定位与路径规划下载地址百度地图官方demo
相关文章推荐
- 15电气1班麻天骄
- 电气一班 宋家欢 高级排序
- zoj 3657 策略题 easy
- sqlmap用户手册
- 15教育技术余晓红
- 欢迎使用CSDN-markdown编辑器
- 7个基于Linux命令行的文件下载和网站浏览工具
- Thread详解16:Timer
- 在小米手机上,修改APP的launcher应用图标不生效的解决方案
- Android中内容观察者的使用---- ContentObserver类详解
- 从零开始学_JavaScript_系列(五)——dojo(基础,动画移动,重力模拟,动画合并,添加标签)
- USB设备开发---- usb描述符概述
- zenfone5安卓5.0降级(3.24.40.87到3.24.40.80)教程(亲测成功)
- 排序
- 15电气1班麻天骄作业
- vb
- java并行调度框架封装及演示样例
- 7个基于Linux命令行的文件下载和网站浏览工具
- redis简单了解 二 (集群)
- hdu 1009 贪心算法