地图开发(二)"/>
Android 百度地图开发(二)
前面我们一起了解了百度地图的申请与集成Android 百度地图开发(一),今天我们接着来学习百度地图。
今天主要来了解如下问题:
1.百度地图的生命周期控制
上一篇张我们已经在布局文件里增加了mapView对象,现在我们通过findViewById拿到mapView对象,可以控制mapView的生命周期,然后又可以通过mapView的getmap方法获取到BaiduMap对象,可以对地图进行设置。
mapView = findViewById(R.id.mapView);mBaiduMap = mapView.getMap();
在onResume ,onPause,onDestroy中分别设置MapView的生命周期
@Overrideprotected void onResume() {mapView.onResume();super.onResume();}@Overrideprotected void onPause() {mapView.onPause();super.onPause();}@Overrideprotected 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 {@Overridepublic 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();//开启gpsoption.setOpenGps(true);//设置坐标类型option.setCoorType("bd0911");//设置刷新时间option.setScanSpan(1000);mLocationClient.setLocOption(option);//注册位置信息监听MylocationListener mylocationListener = new MylocationListener();mLocationClient.registerLocationListener(mylocationListener);mLocationClient.start();}
4.百度地图overlays
地图的marker有点、线,弧线,各种面等,详情请看.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,用于在地图上添加MarkerOverlayOptions 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);}}
以上为今天的内容,感谢阅读!
更多推荐
Android 百度地图开发(二)
发布评论