1.了解地图的最基本管理类BaiduMap
方法很简单就是
[java] view
plaincopyprint?
- mapview.getMap();
然后我们来看一下里面的方法
官方文档这么说来着
void |
addHeatMap(HeatMap heatmap)
添加热力图 |
Overlay |
addOverlay(OverlayOptions options)
向地图添加一个 Overlay |
void |
animateMapStatus(MapStatusUpdate update)
以动画方式更新地图状态,动画耗时 300 ms |
void |
animateMapStatus(MapStatusUpdate update,
以动画方式更新地图状态 |
void |
clear()
清空地图所有的 Overlay 覆盖物以及 InfoWindow |
MyLocationConfiguration |
getLocationConfigeration()
获取定位图层配置信息 |
MyLocationData |
getLocationData()
获取定位数据 |
MapStatus |
getMapStatus()
获取地图的当前状态 |
int |
getMapType()
获取地图当前的模式,普通地图或者卫星图 |
float |
getMaxZoomLevel()
获取地图最大缩放级别 |
float |
getMinZoomLevel()
获取地图最小缩放级别 |
Projection |
getProjection()
获取地图投影坐标转换器, 当地图初始化完成之前返回 null,在 OnMapLoadedCallback.onMapLoaded() 之后才能正常 |
UiSettings |
getUiSettings()
获取地图ui控制器 |
void |
hideInfoWindow()
隐藏当前 InfoWindow |
boolean |
isBaiduHeatMapEnabled()
获取是否打开百度热力图层(百度自有数据图层) |
boolean |
isBuildingsEnabled()
获取是否允许楼块效果 |
boolean |
isMyLocationEnabled()
获取是否允许定位图层 |
boolean |
isSupportBaiduHeatMap()
查询当前图区是否支持百度热力图 |
boolean |
isTrafficEnabled()
获取是否打开交通图层 |
void |
removeMarkerClickListener(BaiduMap.OnMarkerClickListener listener)
移除一个地图 Marker 覆盖物点击事件监听者 |
void |
setBaiduHeatMapEnabled(boolean enabled)
设置是否打开百度热力图图层(百度自有数据图层) 注:地图层级大于11时,可显示热力图 |
void |
setBuildingsEnabled(boolean enabled)
设置是否允许楼块效果 |
void |
setMapStatus(MapStatusUpdate update)
改变地图状态 |
void |
setMapType(int type)
设置地图类型 |
void |
setMaxAndMinZoomLevel(float max,
设置地图最大以及最小缩放级别,地图支持的最大最小级别分别为[3-20] |
void |
setMyLocationConfigeration(MyLocationConfiguration configeration)
设置定位图层配置信息,只有先允许定位图层后设置定位图层配置信息才会生效,参见 setMyLocationEnabled(boolean) |
void |
setMyLocationData(MyLocationData data)
设置定位数据, 只有先允许定位图层后设置数据才会生效,参见 setMyLocationEnabled(boolean) |
void |
setMyLocationEnabled(boolean enabled)
设置是否允许定位图层 |
void |
setOnMapClickListener(BaiduMap.OnMapClickListener listener)
设置地图单击事件监听者 |
void |
setOnMapDoubleClickListener(BaiduMap.OnMapDoubleClickListener listener)
设置地图双击事件监听者 |
void |
setOnMapDrawFrameCallback(BaiduMap.OnMapDrawFrameCallback callback)
设置百度地图在每一帧绘制时的回调接口,该接口在绘制线程中调用 |
void |
setOnMapLoadedCallback(BaiduMap.OnMapLoadedCallback callback)
设置地图加载完成回调 |
void |
setOnMapLongClickListener(BaiduMap.OnMapLongClickListener listener)
设置地图长按事件监听者 |
void |
setOnMapStatusChangeListener(BaiduMap.OnMapStatusChangeListener listener)
设置地图状态监听者 |
void |
setOnMapTouchListener(BaiduMap.OnMapTouchListener listener)
设置触摸地图事件监听者 |
void |
setOnMarkerClickListener(BaiduMap.OnMarkerClickListener listener)
设置地图 Marker 覆盖物点击事件监听者,自3.4.0版本起可设置多个监听对象,停止监听时调用removeMarkerClickListener移除监听对象 开发者注意根据OnMarkerClickListener的参数Marker来判断响应某个对象的点击事件 |
void |
setOnMarkerDragListener(BaiduMap.OnMarkerDragListener listener)
设置 Marker 拖拽事件监听者 |
void |
setOnMyLocationClickListener(BaiduMap.OnMyLocationClickListener listener)
设置定位图标点击事件监听者 |
void |
setTrafficEnabled(boolean enabled)
设置是否打开交通图层 |
void |
showInfoWindow(InfoWindow infoWindow)
显示 InfoWindow |
void |
snapshot(BaiduMap.SnapshotReadyCallback callback)
发起截图请求 |
void |
snapshotScope(Rect rect, BaiduMap.SnapshotReadyCallback callback)
发起区域截图请求 注: Rect为null,截全屏 |
下面我们就用上面的方法来做一些基本的例子
2.实时交通图
xml文件不变,志勇对activity做一点修改就可以了。
[java] view
plaincopyprint?
- package com.flyou.hellomap;
- import android.app.Activity;
- import android.os.Bundle;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.map.MapView;
- public class TrafficMapActivity extends Activity {
- MapView mMapView = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
- // 注意该方法要再setContentView方法之前实现
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- // 获取地图控件引用
- mMapView = (MapView) findViewById(R.id.bmapView);
- // 设置开启交通图
- mMapView.getMap().setTrafficEnabled(true);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
- mMapView.onDestroy();
- }
- @Override
- protected void onResume() {
- super.onResume();
- // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
- mMapView.onResume();
- }
- @Override
- protected void onPause() {
- super.onPause();
- // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
- mMapView.onPause();
- }
- }
图中绿色的路段为畅通路段,红色的呵呵……
3.城市热力图
配置类似于上面
[java] view
plaincopyprint?
- package com.flyou.hellomap;
- import android.app.Activity;
- import android.os.Bundle;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.map.MapView;
- public class HeatMapActivity extends Activity {
- MapView mMapView = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
- // 注意该方法要再setContentView方法之前实现
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- // 获取地图控件引用
- mMapView = (MapView) findViewById(R.id.bmapView);
- mMapView.getMap().setBaiduHeatMapEnabled(true);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
- mMapView.onDestroy();
- }
- @Override
- protected void onResume() {
- super.onResume();
- // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
- mMapView.onResume();
- }
- @Override
- protected void onPause() {
- super.onPause();
- // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
- mMapView.onPause();
- }
- }
好吧,这是晚上获取的热力图,基本上温度都不是很高,看不出来……白天很明显
4.标注坐标点
LatLng 是最新版里面增加的坐标类,里面设置有坐标的经度和纬度
// 构建mark图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
//声明图标覆盖
OverlayOptions options = new MarkerOptions().icon(bitmap).title("河南大学").position(point);
[java] view
plaincopyprint?
- package com.flyou.hellomap;
- import android.app.Activity;
- import android.os.Bundle;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.map.BaiduMap;
- import com.baidu.mapapi.map.BitmapDescriptor;
- import com.baidu.mapapi.map.BitmapDescriptorFactory;
- import com.baidu.mapapi.map.MapView;
- import com.baidu.mapapi.map.MarkerOptions;
- import com.baidu.mapapi.map.OverlayOptions;
- import com.baidu.mapapi.model.LatLng;
- public class OverlayMapActivity extends Activity {
- MapView mMapView = null;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
- // 注意该方法要再setContentView方法之前实现
- SDKInitializer.initialize(getApplicationContext());
- setContentView(R.layout.activity_main);
- // 获取地图控件引用
- mMapView = (MapView) findViewById(R.id.bmapView);
- // 获得map的管理对象
- BaiduMap map = mMapView.getMap();
- // 定义坐标点
- LatLng point = new LatLng(39.963175, 116.400244);
- // 构建mark图标
- BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
- // 构建markeroption,用于在地图上添加marker
- OverlayOptions options = new MarkerOptions().icon(bitmap).title("河南大学").position(point);
- map.addOverlay(options);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
- mMapView.onDestroy();
- }
- @Override
- protected void onResume() {
- super.onResume();
- // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
- mMapView.onResume();
- }
- @Override
- protected void onPause() {
- super.onPause();
- // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
- mMapView.onPause();
- }
- }
5.几何覆盖物
核心代码
[java] view
plaincopyprint?
- //定义多边形的五个顶点
- LatLng pt1 = new LatLng(39.93923, 116.357428);
- LatLng pt2 = new LatLng(39.91923, 116.327428);
- LatLng pt3 = new LatLng(39.89923, 116.347428);
- LatLng pt4 = new LatLng(39.89923, 116.367428);
- LatLng pt5 = new LatLng(39.91923, 116.387428);
- List<LatLng> pts = new ArrayList<LatLng>();
- pts.add(pt1);
- pts.add(pt2);
- pts.add(pt3);
- pts.add(pt4);
- pts.add(pt5);
- //构建用户绘制多边形的Option对象
- OverlayOptions polygonOption = new PolygonOptions()
- .points(pts)
- .stroke(new Stroke(5, 0xAA00FF00))
- .fillColor(0xAAFFFF00);
- //在地图上添加多边形Option,用于显示
- map.addOverlay(polygonOption);
6.文字覆盖物
[java] view
plaincopyprint?
- //定义文字所显示的坐标点
- LatLng llText = new LatLng(39.86923, 116.397428);
- //构建文字Option对象,用于在地图上添加文字
- OverlayOptions textOption = new TextOptions()
- .bgColor(0xAAFFFF00)
- .fontSize(24)
- .fontColor(0xFFFF00FF)
- .text("flyou")
- .rotate(-30)
- .position(llText);
- //在地图上添加该文字对象并显示
- map.addOverlay(textOption);
7.自定义其他弹出覆盖物
[java] view
plaincopyprint?
- /创建InfoWindow展示的view
- Button button = new Button(getApplicationContext());
- button.setBackgroundResource(R.drawable.button_down);
- //定义用于显示该InfoWindow的坐标点
- LatLng pt = new LatLng(39.86923, 116.397428);
- //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量
- InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);
- //显示InfoWindow
- map.showInfoWindow(mInfoWindow);
这一次我们主要学习了一些覆盖物和图层的用法,都很简单有没有……