百度地图开发之不同图层及覆盖物

1.了解地图的最基本管理类BaiduMap

方法很简单就是

[java] view
plain
copyprint?

  1. mapview.getMap();

然后我们来看一下里面的方法

官方文档这么说来着

void addHeatMap(HeatMap heatmap)

添加热力图

Overlay addOverlay(OverlayOptions options)

向地图添加一个 Overlay

void animateMapStatus(MapStatusUpdate update)

以动画方式更新地图状态,动画耗时 300 ms

void animateMapStatus(MapStatusUpdate update,
int durationMs)

以动画方式更新地图状态

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)

设置地图类型 MAP_TYPE_NORMAL 普通图; MAP_TYPE_SATELLITE 卫星图

void setMaxAndMinZoomLevel(float max,
float min)

设置地图最大以及最小缩放级别,地图支持的最大最小级别分别为[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
plain
copyprint?

  1. package com.flyou.hellomap;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import com.baidu.mapapi.SDKInitializer;
  5. import com.baidu.mapapi.map.MapView;
  6. public class TrafficMapActivity extends Activity {
  7. MapView mMapView = null;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
  12. // 注意该方法要再setContentView方法之前实现
  13. SDKInitializer.initialize(getApplicationContext());
  14. setContentView(R.layout.activity_main);
  15. // 获取地图控件引用
  16. mMapView = (MapView) findViewById(R.id.bmapView);
  17. // 设置开启交通图
  18. mMapView.getMap().setTrafficEnabled(true);
  19. }
  20. @Override
  21. protected void onDestroy() {
  22. super.onDestroy();
  23. // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  24. mMapView.onDestroy();
  25. }
  26. @Override
  27. protected void onResume() {
  28. super.onResume();
  29. // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
  30. mMapView.onResume();
  31. }
  32. @Override
  33. protected void onPause() {
  34. super.onPause();
  35. // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
  36. mMapView.onPause();
  37. }
  38. }

图中绿色的路段为畅通路段,红色的呵呵……

3.城市热力图

配置类似于上面

[java] view
plain
copyprint?

  1. package com.flyou.hellomap;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import com.baidu.mapapi.SDKInitializer;
  5. import com.baidu.mapapi.map.MapView;
  6. public class HeatMapActivity extends Activity {
  7. MapView mMapView = null;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
  12. // 注意该方法要再setContentView方法之前实现
  13. SDKInitializer.initialize(getApplicationContext());
  14. setContentView(R.layout.activity_main);
  15. // 获取地图控件引用
  16. mMapView = (MapView) findViewById(R.id.bmapView);
  17. mMapView.getMap().setBaiduHeatMapEnabled(true);
  18. }
  19. @Override
  20. protected void onDestroy() {
  21. super.onDestroy();
  22. // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  23. mMapView.onDestroy();
  24. }
  25. @Override
  26. protected void onResume() {
  27. super.onResume();
  28. // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
  29. mMapView.onResume();
  30. }
  31. @Override
  32. protected void onPause() {
  33. super.onPause();
  34. // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
  35. mMapView.onPause();
  36. }
  37. }

好吧,这是晚上获取的热力图,基本上温度都不是很高,看不出来……白天很明显

4.标注坐标点

LatLng 是最新版里面增加的坐标类,里面设置有坐标的经度和纬度

// 构建mark图标

BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);

//声明图标覆盖

OverlayOptions options = new MarkerOptions().icon(bitmap).title("河南大学").position(point);

[java] view
plain
copyprint?

  1. package com.flyou.hellomap;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import com.baidu.mapapi.SDKInitializer;
  5. import com.baidu.mapapi.map.BaiduMap;
  6. import com.baidu.mapapi.map.BitmapDescriptor;
  7. import com.baidu.mapapi.map.BitmapDescriptorFactory;
  8. import com.baidu.mapapi.map.MapView;
  9. import com.baidu.mapapi.map.MarkerOptions;
  10. import com.baidu.mapapi.map.OverlayOptions;
  11. import com.baidu.mapapi.model.LatLng;
  12. public class OverlayMapActivity extends Activity {
  13. MapView mMapView = null;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
  18. // 注意该方法要再setContentView方法之前实现
  19. SDKInitializer.initialize(getApplicationContext());
  20. setContentView(R.layout.activity_main);
  21. // 获取地图控件引用
  22. mMapView = (MapView) findViewById(R.id.bmapView);
  23. // 获得map的管理对象
  24. BaiduMap map = mMapView.getMap();
  25. // 定义坐标点
  26. LatLng point = new LatLng(39.963175, 116.400244);
  27. // 构建mark图标
  28. BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
  29. // 构建markeroption,用于在地图上添加marker
  30. OverlayOptions options = new MarkerOptions().icon(bitmap).title("河南大学").position(point);
  31. map.addOverlay(options);
  32. }
  33. @Override
  34. protected void onDestroy() {
  35. super.onDestroy();
  36. // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  37. mMapView.onDestroy();
  38. }
  39. @Override
  40. protected void onResume() {
  41. super.onResume();
  42. // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
  43. mMapView.onResume();
  44. }
  45. @Override
  46. protected void onPause() {
  47. super.onPause();
  48. // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
  49. mMapView.onPause();
  50. }
  51. }

5.几何覆盖物

核心代码

[java] view
plain
copyprint?

  1. //定义多边形的五个顶点
  2. LatLng pt1 = new LatLng(39.93923, 116.357428);
  3. LatLng pt2 = new LatLng(39.91923, 116.327428);
  4. LatLng pt3 = new LatLng(39.89923, 116.347428);
  5. LatLng pt4 = new LatLng(39.89923, 116.367428);
  6. LatLng pt5 = new LatLng(39.91923, 116.387428);
  7. List<LatLng> pts = new ArrayList<LatLng>();
  8. pts.add(pt1);
  9. pts.add(pt2);
  10. pts.add(pt3);
  11. pts.add(pt4);
  12. pts.add(pt5);
  13. //构建用户绘制多边形的Option对象
  14. OverlayOptions polygonOption = new PolygonOptions()
  15. .points(pts)
  16. .stroke(new Stroke(5, 0xAA00FF00))
  17. .fillColor(0xAAFFFF00);
  18. //在地图上添加多边形Option,用于显示
  19. map.addOverlay(polygonOption);

6.文字覆盖物

[java] view
plain
copyprint?

  1. //定义文字所显示的坐标点
  2. LatLng llText = new LatLng(39.86923, 116.397428);
  3. //构建文字Option对象,用于在地图上添加文字
  4. OverlayOptions textOption = new TextOptions()
  5. .bgColor(0xAAFFFF00)
  6. .fontSize(24)
  7. .fontColor(0xFFFF00FF)
  8. .text("flyou")
  9. .rotate(-30)
  10. .position(llText);
  11. //在地图上添加该文字对象并显示
  12. map.addOverlay(textOption);

7.自定义其他弹出覆盖物

[java] view
plain
copyprint?

  1. /创建InfoWindow展示的view
  2. Button button = new Button(getApplicationContext());
  3. button.setBackgroundResource(R.drawable.button_down);
  4. //定义用于显示该InfoWindow的坐标点
  5. LatLng pt = new LatLng(39.86923, 116.397428);
  6. //创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量
  7. InfoWindow mInfoWindow = new InfoWindow(button, pt, -47);
  8. //显示InfoWindow
  9. map.showInfoWindow(mInfoWindow);

这一次我们主要学习了一些覆盖物和图层的用法,都很简单有没有……

时间: 2024-10-14 00:25:44

百度地图开发之不同图层及覆盖物的相关文章

百度地图开发(二)之添加覆盖物 + 地理编码和反地理编码

之前写过一篇关于百度地图开发的blog,主要介绍了百度地图的基本地图的显示. 详见:Android百度地图开发(一)之初体验 下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造OverlayOptions(地图覆盖物选型基类). 3. 在地图上添加覆盖物. 4. 添加相应的监听事件. 在API中可以看到,BaiDuMap类中有一个方法: 这个方法就是用

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

[android] 百度地图开发 (二).定位城市位置和城市POI搜索

一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么如何在百度地图上定位某一个位置呢?       通过类GeoPoint可以定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法可以获取Location对象,再定位经纬度设置其为地图中心即可显示当

[android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么怎样在百度地图上定位某一个位置呢?       通过类GeoPoint能够定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法能够获取Location对象,再定位经纬度设置其为地图中心就可以显

android 百度地图开发实例(转载)

因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点android 百度地图开发常用的方法. 1初始化 MapManager mBMapMan = new BMapManager(this);boolean isSuccess = mBMapMan.init(this.mStrKey, new MyGeneralListener()); isSuccess 的值

百度地图3.0实现图文并茂的覆盖物

百度地图3.0实现图文并茂的覆盖物 分类: 地图API开发 android2014-07-03 00:30 2176人阅读 评论(2) 收藏 举报 前一段时间搞地图要显示周围房源信息,之前搜索的都是使用2.x的,现在百度地图官方新出了3.0版本由于之前思维局限一直没有实现图文并茂,今天看了别人2.0的实现方式,把它用到3.0上成功显示,下面看一下效果 现在3.0显示覆盖物mBaiduMap.addOverlay(OverlayOptions arg0),有两个类可以添加MarkerOptions

百度地图开发定位与显示Demo(Android)

百度地图给我们提供了非常丰富的API供我们进行二次开发.百度地图的SDK与定位SDK在今年6月份进行了更新.地图更新为3.0,定位更新为4.2.百度说:这次更新对接口有了较大部分的调整,与之前版本不兼容.本篇博文基于以上最新版本的API提供一个小例子:获取自己当前的经纬度坐标,并且显示在地图上.这里只给出核心代码,其他KEY的引入,地图控件的添加,权限的声明,定位服务的声明可在百度地图API官网(http://developer.baidu.com/map/sdkandev-download.h

android,百度地图只见网格不见图层

在android开发中,使用百度地图功能,出现了只见网格不见图层的问题,经过一番查找,才得出是由于自己错误的使用了apk自己的sha1值来申请key才导致这样的问题. 在申请key时,需要使用eclipse中android下build的sha1值.这样就正常了. android,百度地图只见网格不见图层

Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

标签: Android百度地图API Key  分类: Android 百度地图开发(2)  最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!   一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/a