百度地图—-覆盖物

ONE Goal ,ONE Passion !

百度地图SDK为广大开发者提供的基础地图和上面的各种覆盖物元素,具有一定的层级压盖关系,具体如下(从下至上的顺序):
1、基础底图(包括底图、底图道路、卫星图等);
2、瓦片图层(TileOverlay);
3、地形图图层(GroundOverlay);
4、热力图图层(HeatMap);
5、实时路况图图层(BaiduMap.setTrafficEnabled(true););
6、百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););
7、底图标注(指的是底图上面自带的那些POI元素);
8、几何图形图层(点、折线、弧线、圆、多边形);
9、标注图层(Marker),文字绘制图层(Text);
10、指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);
11、定位图层(BaiduMap.setMyLocationEnabled(true););
12、弹出窗图层(InfoWindow);
13、自定义View(MapView.addView(View););


下面介绍几个常用的地图覆盖物

自动定位

private BDLocation loc;//记录初次定位的位置// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(getApplication());LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型mLocClient.setLocOption(option);mLocClient.start();mLocClient.registerLocationListener(new MyLocationListenner());/*** 自动定位SDK监听函数*/public class MyLocationListenner implements BDLocationListener {private LatLng ll;@Overridepublic void onReceiveLocation(BDLocation location) {// map view 销毁后不在处理新接收的位置if (location == null || mMapView == null)return;loc = location;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;ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);//让地图执行位置移动动画mBaiduMap.animateMapStatus(u);}//发起反地理编码请求----下面有解释ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(ll);geocode.reverseGeoCode(options);}}

关于地理地址编码与反编码
http://blog.csdn.net/fengltxx/article/details/50552575


添加弹出窗覆盖物

 /*** 添加弹出窗覆盖物** @param address 为address添加覆盖物* @param ll      //添加的坐标*/public void addInfoWindow(String address, LatLng ll) {//创建InfoWindow展示的view-----弹出窗覆盖物final TextView button = new Button(getApplicationContext());button.setBackgroundResource(R.drawable.pop);button.setTextColor(Color.BLACK);button.setText(address);//创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量InfoWindow mInfoWindow = new InfoWindow(button, ll, -20);//显示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);}

添加标注

/*** 添加标注的方法** @param point*/public void addMarker(LatLng point) {//构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option_mark = new MarkerOptions().position(point).icon(bitmap);//在地图上添加Marker,并显示Overlay marker = mBaiduMap.addOverlay(option_mark);}

下面是以上几种方法使用的合集,写的比较乱.嘿嘿…代码不是最重要的,重要的是如何去使用百度提供给我们的接口


public class MainActivity extends Activity {TextView tv;Button btn_myLoc;//定位Button btn_mark; //markar覆盖物MapView mMapView = null;private BaiduMap mBaiduMap;private GeoCoder geocode;private String address = "";/*** 定位相关*/LocationClient mLocClient;boolean isFirstLoc = true;// 是否首次定位private BDLocation loc;//记录初次定位的位置public Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);tv.setText(msg.obj + "");}};@Overrideprotected 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);tv = (TextView) findViewById(R.id.tv);btn_myLoc = (Button) findViewById(R.id.btn_myLoc);btn_mark = (Button) findViewById(R.id.btn_mark);mBaiduMap = mMapView.getMap();//隐藏百度地图自带的按钮mMapView.showZoomControls(false);/***   自动定位*/btn_myLoc.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("点击了定位");// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(getApplication());LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型mLocClient.setLocOption(option);mLocClient.start();mLocClient.registerLocationListener(new MyLocationListenner());}});/***    添加 markar覆盖物*    34.7568711,    113.663221*/btn_mark.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//定义Maker坐标点LatLng point = new LatLng(34.7568711, 113.663221);
//构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option_mark = new MarkerOptions().position(point).icon(bitmap);
//在地图上添加Marker,并显示Overlay marker = mBaiduMap.addOverlay(option_mark);}});/***    地图点击监听*/mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {/***   点击地图上没有自动标注的地方触发*   在此处理点击事件* @param point*/public void onMapClick(LatLng point) {System.out.println("point-----" + point);}/*** 在此处理底图标注点击事件* @param poi* @return*/public boolean onMapPoiClick(MapPoi poi) {System.out.println("poi-------" + poi);return false;}});/***     mark点击物的监听*/mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {System.out.println("-----markar被点击" + marker);return false;}});/***      地图中心点的位置改变监听*/mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {@Overridepublic void onMapStatusChangeStart(MapStatus mapStatus) {}@Overridepublic void onMapStatusChange(MapStatus mapStatus) {}@Overridepublic void onMapStatusChangeFinish(MapStatus mapStatus) {//获得中心点坐标LatLng lat = mapStatus.target;getButtonAddress(lat);//发起反地理编码请求ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(lat);geocode.reverseGeoCode(options);}});}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();}/***  通过反地址编码获得地址信息* @param ll   中心点坐标*/public void getButtonAddress(final LatLng ll) {//通过反地址编码获得地址信息geocode = GeoCoder.newInstance();//设置查询结果监听者geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {return;}if (result != null && result.error == SearchResult.ERRORNO.NO_ERROR) {//得到位置address = result.getAddress();//创建InfoWindow展示的viewfinal TextView button = new Button(getApplicationContext());button.setBackgroundResource(R.drawable.pop);button.setTextColor(Color.BLACK);button.setText(address);//创建InfoWindow , 传入 view, 地理坐标, y 轴偏移量InfoWindow mInfoWindow = new InfoWindow(button, ll, -20);//显示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);//显示地址   ---- 通过handler显示位置Message msg = Message.obtain();msg.obj = address;handler.sendMessage(msg);}}@Overridepublic void onGetGeoCodeResult(GeoCodeResult arg0) {}});}/*** 自动定位SDK监听函数*/public class MyLocationListenner implements BDLocationListener {private LatLng ll;@Overridepublic void onReceiveLocation(BDLocation location) {// map view 销毁后不在处理新接收的位置if (location == null || mMapView == null)return;loc = location;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;ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);mBaiduMap.animateMapStatus(u);}getButtonAddress(ll);//发起反地理编码请求ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(ll);}public void onReceivePoi(BDLocation poiLocation) {}}}

简单的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayout
        android:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="vertical"><TextView
            android:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" /><Button
            android:id="@+id/btn_myLoc"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="定位" /><Button
            android:id="@+id/btn_mark"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示marker" /></LinearLayout><com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /></LinearLayout>

后续的地图功能慢慢完善

百度地图----地图覆盖物相关推荐

  1. 【百度地图API】如何判断点击的是地图还是覆盖物?

    原文:[百度地图API]如何判断点击的是地图还是覆盖物? 摘要:很多API爱好者问我,为什么我点击的是marker,而map也会响应该事件呢?怎样才能判断,我点击的是标注,还是地图呢?下面一起来看看. ...

  2. 百度地图自定义覆盖物,在手机上无法监听click事件

    百度地图自定义覆盖物,在手机上无法监听click事件 最近在做手机web端集成百度地图遇到了个坑儿:手机端不支持自定义覆盖物的click事件: 1.自带的marker是支持的(marker不属于自定义 ...

  3. android 百度地图标注覆盖物学习

    介绍 最近着手做一个新的项目,其中涉及到地图定位,以及从服务器获取附近的特定商家并在地图上面标注出来.于是就研究了一下百度地图标注覆盖物功能,然后进行一点个人总结,以便学习交流使用,个人学习总结还请各 ...

  4. Android studio3.0对于百度地图api开发(4)——百度地图地图覆盖物制作

    承接上文未完的继续介绍,上文内容:https://blog.csdn.net/qq_41562408/article/details/82810484主要实现百度地图的定位以及对于地图覆盖物进行简单介 ...

  5. QT实现加载百度离线地图

    在Qt中加载百度地图需要用到网络浏览器,在此采用webEngine模块,然后用webchannel进行qt与HTML/JavaScript的交互. 需求描述:软件加载百度地图,用鼠标在地图上选点,并进 ...

  6. 百度离线地图示例之三:矢量图

    前言介绍: 主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末 ...

  7. 百度离线地图示例之四:热力图

    前言介绍: 主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末 ...

  8. 百度离线地图示例之二:测距

    前言介绍: 主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末 ...

  9. Qt之加载百度离线地图(WebKit和WebEngine)

    最近翻看进年前写了一篇关于百度离线地图的博客:Qt加载百度离线地图,发现存在很多问题,比如不能加载折线等图形覆盖物:只支持QtWebKit,不支持QtWebEngine. 之前做项目需要在百度离线地图 ...

  10. 百度离线地图API2.0 百度离线地图api,已经修改源码

    百度离线地图API2.0 百度离线地图api,已经修改源码,绕过服务端验证,除了路书等需要服务端数据支持的功能外,其余功能已经全部实现,包括常用的:地图示例.地图控件添加.覆盖物添加.信息窗口展示等等 ...

最新文章

  1. R探索新数据分析(Exploratory Data Analysis,EDA)
  2. 移动端调取摄像头上面如何给出框_飞桨实战笔记:自编写模型如何在服务器和移动端部署...
  3. Adprep 无法完成,原因是回叫功能失败
  4. 数据结构实验之栈与队列八:栈的基本操作
  5. Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
  6. 云炬Android开发笔记 15评价晒单功能实现(自定义评分控件和仿微信自动多图选择控件)
  7. 电机编码器调零步骤_编码器原理、霍尔应用原理、调整步骤三个方面进行解读编码器调试...
  8. HDU 5510 Bazinga
  9. 平衡二叉树AVL插入
  10. 体系结构方案 -ETL 中间件
  11. 【SKILLS】拯救你的----连读
  12. 【BZOJ 3669】 [Noi2014]魔法森林 LCT维护动态最小生成树
  13. CCS(Code Composer Studio) 的下载、安装和导入工程
  14. 爱迪德CA系统与NDS CA系统对比分析(一)
  15. 软件工程小组第九次会议记录
  16. ubuntu 17 linux 网络,无路由器的情况下linux(ubuntu 17.04)如何连接联通的校园宽带?...
  17. 报错:此操作系统版本不支持此选项。管理员应使用“打开或关闭 Windows 功能”对话框、“服务器管理器”管理工具或 dism.exe 命令行工具安装/卸载包含 IIS8 的 ASP.NET 4.5
  18. 如何正确的打开google
  19. 电力电子应用技术的matlab仿真
  20. 第 256 场力扣周赛(状态压缩+dp,二进制子序列的动规、940)

热门文章

  1. QPS、TPS、PV、UV、GMV、IP、RPS含义简单说明
  2. 在macbook air中通过usb安装windows7操作系统
  3. 2.利用计算机进行信息加工的一般过程是:,信息加工
  4. 免费织梦wap手机网站模板下载
  5. 《java入门第一季》之面向对象综合小案例
  6. 项目分享| DIY STM32控制的电子负载(硬件方案分享,软件代码下载)
  7. Java final类详解
  8. 姜太公钓鱼:所有的人都上钩
  9. 计算机毕业设计SSM大学生创新创业项目活动管理平台【附源码数据库】
  10. VTK 画箭头带长度测量