android百度开发显示多个点标记,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 ListoverlayOptionses=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);//更新自定义标记显示

}

}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值