使用百度地图(下)

来源:互联网 发布:自定义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
原创粉丝点击