android百度地图显示多个自定义标记

一、配置相关参数

配置定位SDK参数

private int span = 5000;
private void initLocationSDK() {		
	LocationClientOption option = new LocationClientOption();//通过LocationClientOption设置LocationClient相关参数
	option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
	option.setCoorType("bd09ll");// 坐标类型,可选,默认gcj02,设置返回的定位结果坐标系		
	option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
	option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
	option.setOpenGps(true);// 可选,默认false,设置是否使用gps
	option.setLocationNotify(true);// 可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
	option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation
	// .getLocationDescribe里得到,结果类似于“在北京天安门附近”
	option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
	option.setOpenGps(true); // 打开gps
	option.setIgnoreKillProcess(false);// 可选,默认为true不杀死,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程
	option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
	option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
	mLocationClient.setLocOption(option);//参数设置
	//设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
//	option.setOpenAutoNotifyMode(3000,5, LocationClientOption.LOC_SENSITIVITY_HIGHT); 
	}

二、获取GPS定位数据

可从LocationListener中直接获取到当前的经纬度。

LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());

三、多个标记点的显示

创建List,把Marker信息放进去,然后调用BaiduMap的addOverlays方法,将多个标记一并添加到地图上显示。

private List overlayOptionses=new ArrayList();
private MarkerOptions options;
private void updateView(LatLng latLng){		
	mBaiduMap.clear();//先清除图层
	LatLng point=latLng;	
	if( point!= null){       	
           BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_mark);//构建Marker图标           	
           options = new MarkerOptions().position(point).icon(bitmap);// 构建MarkerOption,用于在地图上添加Marker
           overlayOptionses.add(options);          		
           mBaiduMap.addOverlays(overlayOptionses);// 在地图上添加Marker数组,并显示
        }else{
           		
         }		
	}

四、定时刷新

可以自己做一个定时器,也可以借助BDLocationListener

可能自己写的定时器更加灵活把,有些繁琐,我也没用,就不介绍了,以后用了再上代码段。

我是借助了BDLocationListener监听接口,很是简单,在sdk参数配置中的”option.setScanSpan(span)“可以用来控制定位的间隔,直接把updateView方法放到重写的onReceiveLocation方法中即可,如下所示:

private class MyLocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());		
			MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 构造定位数据
					// 此处设置开发者获取到的方向信息,顺时针0-360
					.direction(100).latitude(location.getLatitude())
					.longitude(location.getLongitude()).build();			
			mBaiduMap.setMyLocationData(locData);// 设置定位数据
			if (isFirstLoc) {
				isFirstLoc = false;
				MapStatus.Builder builder = new MapStatus.Builder();
				builder.zoom(28.0f).target(latLng);
				mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

				if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果	
					Toast.makeText(NetworkRecordActivity.this,location.getAddrStr(), Toast.LENGTH_SHORT).show();
					Log.d("TypeGpsLocation location", location.toString());
				}else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果					
					Toast.makeText(NetworkRecordActivity.this,location.getAddrStr(), Toast.LENGTH_SHORT).show();
				}else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果					
					Toast.makeText(NetworkRecordActivity.this,location.getAddrStr(), Toast.LENGTH_SHORT).show();
				} else if (location.getLocType() == BDLocation.TypeServerError) {
					Toast.makeText(NetworkRecordActivity.this, "服务器错误,请检查",Toast.LENGTH_SHORT).show();
				} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
					Toast.makeText(NetworkRecordActivity.this, "网络错误,请检查",Toast.LENGTH_SHORT).show();
				} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
					Toast.makeText(NetworkRecordActivity.this,"仪器模式错误,请检查是否飞行", Toast.LENGTH_SHORT).show();
				}
			}
				updateView(latLng);//更新自定义标记显示		
		}
	}

结束语:不知道该怎么详细说了,我已经尽力了,有不尽之处以后再完善把。愿成长之路坎坷不绕远,布满荆棘却受益匪浅。

你可能感兴趣的:(Android)