Android定位SDK产品,支持全球定位,能够精准的获取经纬度信息。根据开发者的设置,在国内获得的坐标系类型可以是:国测局坐标、百度墨卡托坐标 和 百度经纬度坐标。在海外地区,只能获得WGS84坐标。请开发者在使用过程中注意坐标选择。定位SDK默认输出GCJ02坐标,地图SDK默认输出BD09ll坐标。
通过如下几步您便可以在自己的地图中展示当前所在位置的定位点。
1.加入如下权限使用声明
<!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2.在Application标签中声明定位的service组件
<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>
mBaiduMap.setMyLocationEnabled(true);
我们通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。
public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 销毁后不在处理新接收的位置if (location == null || mMapView == null){return;}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}}
//定位初始化mLocationClient = new LocationClient(this);//通过LocationClientOption设置LocationClient相关参数LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);//设置locationClientOptionmLocationClient.setLocOption(option);//注册LocationListener监听器MyLocationListener myLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(myLocationListener);//开启地图定位图层mLocationClient.start();
@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onDestroy() {mLocationClient.stop();mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();}
上图为18级缩放下的显示效果。
通过MyLocationConfiguration类来构造包括定位的属性,定位模式、是否开启方向、设置自定义定位图标、精度圈填充颜色以及精度圈边框颜色5个属性。
开发者可以利用BaiduMap中的setMapType()方法来设置地图类型,下面做简单展示。
MyLocationConfiguration(LocationMode mode,boolean enableDirection,BitmapDescriptor customMarker,int accuracyCircleFillColor,int accuracyCircleStrokeColor)
上述代码中五个参数详细介绍如下:
定位模式
地图SDK支持三种定位模式:NORMAL(普通态), FOLLOWING(跟随态),COMPASS(罗盘态)
mCurrentMode = LocationMode.FOLLOWING;//定位跟随态mCurrentMode = LocationMode.NORMAL; //默认为 LocationMode.NORMAL 普通态mCurrentMode = LocationMode.COMPASS; //定位罗盘态
自定义定位图标
支持自定义定位图标样式,替换定位icon
mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
自定义精度圈填充颜色
//自定义精度圈填充颜色accuracyCircleFillColor = 0xAAFFFF88;
自定义精度圈边框颜色
//自定义精度圈边框颜色accuracyCircleStrokeColor = 0xAA00FF00;
在定义了以上属性之后,通过如下方法来设置生效:
//自定义精度圈边框颜色mBaiduMap.setMyLocationConfiguration(mLocationConfiguration)
显示效果如图:
上图为21级缩放下的显示效果。
另外有两个属性不可以通过上述方法设置,说明如下:
定位精度圈大小
定位精度圈大小 ,是根据当前定位精度自动控制的,无法手动控制大小。精度圈越小,代表当前定位精度越高;反之圈越大,代表当前定位精度越低。
定位指针方向
定位指针朝向,是通过获取手机系统陀螺仪数据,控制定位指针的方向,需要开发者自己实现,并不在地图实现范畴。
开发者可以自行设置获取定位的时间间隔,详细的设置方法可以参考定位SDK。
自v7.5.7版本起,定位图标支持自定义功能。分别支持对定位中心图片和定位箭头的自定义,同时中心图片新增对gif图的支持 对应新增接口如下:
/*** 构造者模式* 构造自定义图标* @param locationMode* 定位图层显示方式, 默认为 LocationMode.NORMAL 普通态* @param enableArrow* 定位图标样式,true代表箭头模式,false代表整体模式*/public Builder(LocationMode locationMode,boolean enableArrow)
自定义定位图标
所需配置代码如下:
/*** 设置自定义中心图片* @param customMarker 中心图片* 所有传入的图片均会以图片的短边为直径裁剪成中心圆* @return*/public Builder setCustomMarker(BitmapDescriptor customMarker)/*** 设置自定义中心图片的大小 0.2~3倍,默认为直径30的圆形图* 同时适用gif图* @param markerSize 倍数* @return*/public Builder setMarkerSize(float markerSize)// 自定义定位箭头public Builder setArrow(BitmapDescriptor arrow)/*** 设置箭头图标的大小 0.2~3倍 默认原始图片大小* @param arrowSize 倍数* @return*/public Builder setArrowSize(float arrowSize)/*** 设置中心图片是否可以做呼吸动画* 非箭头模式下false* @param isNeedAnimation* @return*/public Builder setAnimation(boolean isNeedAnimation)
效果如下:
整体模式:
箭头模式(中心图片附带呼吸效果):
自定义gif定位图标
所需配置代码如下:
/*** 设置自定义中心gif图* @param gifPath gif图片的路径 内部处理gif图* 所有传入的图片均会以图片的短边为直径裁剪成中心圆* @return*/public Builder setGifMarker(String gifPath)
效果如下:
整体模式:
箭头模式(中心图片带呼吸效果):
上一篇
下一篇
本篇文章对您是否有帮助?