使用百度地图(下)
来源:互联网 发布:自定义oid取不到数据 编辑:程序博客网 时间:2024/05/16 15:21
命运如同手中的掌纹,无论多曲折,终掌握在自己手中。
本讲内容:使用百度地图
示例一:自定义定位图标并使用方向传感器
1、自定义定位图标
使用MyLocationConfigeration配置类来自定义定位图标,MyLocationConfigeration 构造器有3个参数:
第一个参数 mode:定位图层显示方式, 默认为 LocationMode.NORMAL 普通态
第二个参数 enableDirection:是否允许显示方向信息
第三个参数 customMarker:设置用户自定义定位图标,可以为 null
注意:要导入import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode 否则会报错。
代码如下 :
MyLocationConfiguration config=new MyLocationConfiguration(LocationMode.NORMAL, true, mIconLocation);mBaiduMap.setMyLocationConfigeration(config);
2、使用方向传感器
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);Sensor magneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);Sensor accelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);mSensorManager.registerListener(sensorListener, magneticSensor,SensorManager.SENSOR_DELAY_FASTEST);mSensorManager.registerListener(sensorListener, accelerometerSensor,SensorManager.SENSOR_DELAY_FASTEST);
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity {……// 自定义定位图标private BitmapDescriptor mIconLocation;private SensorManager mSensorManager;//传感器private float mCurrentZ;//Z轴protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);this.context = this;initView();initLocation();initSensor();}……/** * 初始化定位 */private void initLocation() {mLocationClient = new LocationClient(getApplicationContext());mLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(mLocationListener);LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll");// 设置返回的坐标类型(设置返回的定位结果是百度经纬度,默认值gcj02)option.setIsNeedAddress(true);// 返回的定位结果包含地址信息option.setOpenGps(true);// 是否打开GPSoption.setScanSpan(1000);// 设置发起定位请求的间隔时间为1000ms onReceiveLocation方法每隔1秒执行一次(要大于1秒)mLocationClient.setLocOption(option);// 初始化图标mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.map_gps_logo);}/** * 初始化传感器 */private void initSensor() {mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);Sensor magneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);Sensor accelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);mSensorManager.registerListener(sensorListener, magneticSensor,SensorManager.SENSOR_DELAY_FASTEST);mSensorManager.registerListener(sensorListener, accelerometerSensor,SensorManager.SENSOR_DELAY_FASTEST);}……/** * 定位接口 onReceiveLocation():接收异步返回的定位结果 */private class MyLocationListener implements BDLocationListener {public void onReceiveLocation(BDLocation location) {if (location == null) {return;}System.out.println(mCurrentZ);// 当参数比较多时,习惯在类里面建立一个Builder内部类来初始化参数MyLocationData data = new MyLocationData.Builder()//.direction(mCurrentZ)//.accuracy(location.getRadius())//.latitude(location.getLatitude())//.longitude(location.getLongitude())//.build();mBaiduMap.setMyLocationData(data);// 设置自定义图标MyLocationConfiguration config = new MyLocationConfiguration(LocationMode.NORMAL, true, mIconLocation);mBaiduMap.setMyLocationConfigeration(config);// 更新经纬度mLatitude = location.getLatitude();mLongtitude = location.getLongitude();// 使每次发起定位请求不会执行if (isFirstIn) {centerToMyLocation();isFirstIn = false;Toast.makeText(context, location.getAddrStr(),Toast.LENGTH_LONG).show();}}}/** * 方向传感器 */private SensorEventListener sensorListener = new SensorEventListener() {float[] accelerometerValues = new float[3];float[] magneticValues = new float[3];private float lastDegreeZ;public void onSensorChanged(SensorEvent event) {//判断当前是加速度传感器还是地磁传感器 if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ //注意赋值时要调用clone()方法 accelerometerValues=event.values.clone(); }else if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){ magneticValues=event.values.clone(); } float[] R=new float[9]; float[] values=new float[3]; SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues); SensorManager.getOrientation(R, values); mCurrentZ=(float) Math.toDegrees(values[0]); if(Math.abs(mCurrentZ-lastDegreeZ)>1){ lastDegreeZ=mCurrentZ; }}public void onAccuracyChanged(Sensor sensor, int accuracy) {}};……protected void onDestroy() {super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();if(mSensorManager!=null){mSensorManager.unregisterListener(sensorListener); //关闭传感器}}}
示例二:三种模式切换
<item android:id="@+id/id_map_mode_common" android:showAsAction="never" android:title="普通模式"/> <item android:id="@+id/id_map_mode_following" android:showAsAction="never" android:title="跟随模式"/> <item android:id="@+id/id_map_mode_compass" android:showAsAction="never" android:title="罗盘模式"/>在相应的菜单添加点击事件
0 0
- 使用百度地图(下)
- Android下 使用百度地图sdk
- Android下 使用百度地图sdk
- As环境下百度地图的使用
- 百度地图【下】
- 百度地图 iOS SDK - iOS8下使用百度地图SDK定位的问题
- 百度地图API使用
- 百度地图使用案例
- Android百度地图使用
- Android百度地图使用
- 百度地图API使用
- 百度地图SDK使用
- 百度地图 使用详解
- 百度地图使用
- 使用百度地图
- 百度地图使用小结
- Android百度地图使用
- 百度地图SDK使用
- ViewController 生命周期重要方法
- const修饰指针时候的注意事项
- Centos上8080端口被占用解决办法
- 实习第三天
- 安卓登陆框记住密码和自动登录的实现
- 使用百度地图(下)
- 20150630_UI之ViewCrontroller初步认识
- php如何输出中文json格式字符串
- 多线程笔试面试总结(一)
- java的多线程机制上
- C++实现栈的链接存储
- 过程之美——过程让结果更精彩
- 如何解决浏览器无法打开网页问题
- LeetCode(26) Remove Duplicates from Sorted Array