前面我们一起了解了百度地图的申请与集成Android 百度地图开发(一),今天我们接着来学习百度地图。
今天主要来了解如下问题:
1.百度地图的生命周期控制
上一篇张我们已经在布局文件里增加了mapView对象,现在我们通过findViewById拿到mapView对象,可以控制mapView的生命周期,然后又可以通过mapView的getmap方法获取到BaiduMap对象,可以对地图进行设置。
mapView = findViewById(R.id.mapView);
mBaiduMap = mapView.getMap();
在onResume ,onPause,onDestroy中分别设置MapView的生命周期
@Override
protected void onResume() {
mapView.onResume();
super.onResume();
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onDestroy() {
mLocationClient.stop();
mBaiduMap.setMyLocationEnabled(false);
mapView.onDestroy();
mapView = null;
super.onDestroy();
}
2.百度地图的一些属性设置
交通图,热力图,图层定位等,具体可看官方文档
//开启交通图,可看路况情况
mBaiduMap.setTrafficEnabled(true);
//开启热力图
// mBaiduMap.setBaiduHeatMapEnabled(true);
//开启图层定位
mBaiduMap.setMyLocationEnabled(true);
mBaiduMap.setIndoorEnable(true);//打开室内图,默认为关闭状态
mUisettings = mBaiduMap.getUiSettings();
mUisettings.setCompassEnabled(true);//显示指南针
mBaiduMap.setOnMapClickListener(onMapClickListener);
mBaiduMap.setOnMarkerClickListener(onMarkerClickListener);
3.百度地图定位以及中心位置控制
定位需要开启GPS,打开app的位置权限,然后借助百度的BDAbstractLocationListener监听定位的信息,听歌对LocationClient设置监听接收每次定位的位置
public class MylocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//mapView 销毁后不在处理新接收的位置
if (bdLocation == null || mapView == null) {
return;
}
if (isFirst) {
isFirst = false;
SetCenter(bdLocation.getLatitude(), bdLocation.getLongitude());
}
MyLocationData locData = new MyLocationData.Builder()
// .accuracy(bdLocation.getRadius())
// // 此处设置获取到的方向信息,顺时针0-360
// .direction(bdLocation.getDirection())
.latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
}
}
//初始化中心位置
private void SetCenter(double lat, double lon) {
LatLng cenpt = new LatLng(lat, lon); //设定中心点坐标
//图标 设置中心覆盖物
// BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.man);
// // 构建MarkerOption,用于在地图上添加
// OverlayOptions option = new MarkerOptions().position(cenpt).icon(bitmap).draggable(true);
// // 在地图上添加Marker,并显示
// mBaiduMap.addOverlay(option);
//移动到中心点
MapStatus mMapStatus = new MapStatus.Builder()//定义地图状态
.target(cenpt)
.zoom(16)
.build(); //定义Map对象StatusUpdate,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
mBaiduMap.setMapStatus(mMapStatusUpdate);//改变地图状态
AddOverLays();
}
//定位
private void GetLocations() {
mLocationClient = new LocationClient(this);
LocationClientOption option = new LocationClientOption();
//开启gps
option.setOpenGps(true);
//设置坐标类型
option.setCoorType("bd0911");
//设置刷新时间
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
//注册位置信息监听
MylocationListener mylocationListener = new MylocationListener();
mLocationClient.registerLocationListener(mylocationListener);
mLocationClient.start();
}
4.百度地图overlays
地图的marker有点、线,弧线,各种面等,详情请看http://lbsyun.baidu.com/index.php?title=androidsdk/guide/render-map/point
下面简单的绘制一下点、线
private void AddOverLays() {
//绘制点
MapUtils.getInstance().DrawMarkersPoint(R.mipmap.ic_bjsj,22.532d,114.0088d,mBaiduMap);
List<LatLng> points=new ArrayList<>();
points.add(new LatLng(22.530d,114.0007d));
points.add(new LatLng(22.551d,114.01101d));
points.add(new LatLng(22.541d,114.00087d));
// 绘制线
MapUtils.getInstance().DrawMarkerLine(points, Color.parseColor("#0000ff"),12,mBaiduMap);
}
MapUtils代码:
package com.kty.inspection.Utils;
import android.graphics.Point;
import android.os.Bundle;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolygonOptions;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.model.LatLng;
import java.util.List;
/**
* author : 肖波
* e-mail : xiaoboabc168@163.com
* date : 2019/2/22.
*/
public class MapUtils {
private MapUtils() {
}
public static MapUtils getInstance() {
return MapUtilsManager.instance;
}
public static class MapUtilsManager {
private static final MapUtils instance = new MapUtils();
}
/**
* 地图上添加标记点
*
* @param drawableId 要描绘的图片资源id
* @param latitude 纬度
* @param longitude 经度
* @param baiduMap 百度地图对象
*/
public void DrawMarkersPoint(int drawableId, double latitude, double longitude, BaiduMap baiduMap) {
if (baiduMap == null) {
return;
}
//定义Maker坐标点
LatLng latLng = new LatLng(latitude, longitude);
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(drawableId);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions options = new MarkerOptions().position(latLng).icon(bitmap).animateType(MarkerOptions.MarkerAnimateType.jump).visible(true);
//在地图上添加Marker,并显示
baiduMap.addOverlay(options);
}
/**
* 画marker点
* @param options OverlayOptions
* @param baiduMap 地图对象
*/
public void DrawMarkerPoint(OverlayOptions options,BaiduMap baiduMap){
if (baiduMap==null || options==null){
return;
}
// OverlayOptions op=new MarkerOptions()
.position()//位置坐标,latLng对象
// .alpha(0.8f)//透明度0-1
// .anchor(0.8f,1)//描点比例
// .animateType(MarkerOptions.MarkerAnimateType.jump)//动画类型,none drop grow jump
// .draggable(true)//是否可拖拽
// .extraInfo(new Bundle())//额外信息
// .fixedScreenPosition(new Point(40,80))//位于屏幕位置,参数坐标点point
// .flat(true)//是否平贴地图
// .icon(BitmapDescriptorFactory.fromResource(0))//ico,BitmapDescriptor对象
.icons()//
// .perspective(true)//是否开启近大远小效果
// .rotate(270)//旋转角度
// .title("maker1")//标题
// .visible(true);//是否显示
baiduMap.addOverlay(options);
}
/**
* 地图marker画线
* @param points
* @param color
* @param width
* @param baiduMap
*/
public void DrawMarkerLine(List<LatLng> points,int color,int width,BaiduMap baiduMap){
OverlayOptions options=new PolylineOptions()
.width(12)
.points(points)
.color(color);
baiduMap.addOverlay(options);
}
}
以上为今天的内容,感谢阅读!