百度地图_api

时间:2016-06-27 23:12:08   收藏:0   阅读:3001

  这一天主要讲的是百度地图api的使用,由于百度有很详细的开发文档了,所以我这里只做一个大概的笔记

百度地图API的使用

1,入门

1.1,三大核心

①SDKInitializer 整个百度的初始化工具类,引擎

②MapView 用来显示地图的控件

③baiduMap 相当于控制器,缩放,旋转,移动

 

1.2,准备工作(到百度地图LBS开放平台上查看)

获取API Key,按网上的帮助文档走步骤

获取SHA1码

百度地图的Key和应用是相互绑定的,一个Key对应一个应用.

 

1.3,创建工程拷贝jar包

 技术分享

 

拷贝的时候注意要拷贝文件夹,这个jar包必须用arme处理器的模拟器和手机

X86的手机这个应用是跑不起来的(百度限定的,无法解决)

V7a的运算速度比不带V7a的速度要快一些,手机会自动匹配

 

添加权限 ,拷贝对应的权限文件即可.

 

1.4 使用步骤(下载的依赖包中有帮助文档):

①布局文件添加MapView百度的自定义控件.

额外:两套jar包,可以只留下一个不带v7a的包,运行速度会快一些

报错: have not supplyed the global app context info from SDKInitializer.........(没有对百度引擎进行初始化,需要校验一下上面申请的api key)

//不知道怎么搜搜就百度查找一下

>>>Android SHA1与Package获取方式

keytool -list -v -keystore debug.keystore

②清单文件中,Application 中的创建子标签<meta-data,name,value(key)/>

③在使用Map的 activity中,

调用sdkInitializer.initialize(getApplication(必须全局的context))

这里的返回结果是通过广播来实现了,所以要写一个广播接收者来判断结果

//通过接收到的广播intent.getAction的值来判断结果(无网络,校验失败等)

代码注册的时候通过sdkInitializer.XXXX可以设定意图过滤器的action

1.5缩放级别,设置中心点

缩放级别的设置:

①缩放级别是3-19(V2.X以前是3-18)的.

2.x与1.x的区别

修改了地图文件的格式,1.x的地图采用栅格版,2.x的地图采用矢量版,优化了数据

例如:北京地图110M>>>15M

增加了一个级别(18>>19带有3D效果)

 

②baiduMap控制器:管理具体的某一个MapView:选择,缩放,移动

BaiduMap baiduMap = mapView.getMap();//根据mapView控件的对象找到控制器

baiduMap.setMapStatus(MapStatusUpdate)//改变当前地图状态

//设置缩放到15级,百度地图默认12级

MapStatusUpdate update = MapStatusUpdateFactory.zoomTo(15);

 

③设置中心点:默认是天安门

baiduMap.setMapStatus(MapStatusUpdate)

MapStatusUpdate update = MapStatusUpdateFactory.newLateLng(latlng)

LatLng latlng =new LatLng(经度,维度);//百度地图使用的是经纬度

 

2,三个核心类(MVC)

2.1 SDKInitializer中有两个方法

①初始化全局,②初始化全局并指定存储的位置

 

2.2 MapView 显示地图的视图,必须按照它的生命周期进行操控.

①必须绑定Activity的生命周期,不然最小化再返回来的话可能会出BUG

②onResume(),onPause(),onDestory()与activity对应的生命周期方法进行绑定.

它是继承ViewGroup的,有ViewGroup的方法.

可以指定比例尺控件的位置,设置缩放控件的位置,是否显示比例尺,缩放控件等,查看API即可.

 

2.3 BaiduMap

① 有一堆接口进行回调,监听地图的各种事件

②方法:加载热地图,更新地图状态(带动画的,可以指定动画的耗时)等,查看API即可..

③主要操作:

缩放级别:baiduMap.setMapStatus(mapStatus(通过工厂指定返回的对象信息,增加减少缩放级别))

旋转:以自身为中心,顺时针旋转.

以XYZ轴的3D立体图(俯视,仰视的旋转,本质是以一条坐标轴进行旋转);

//以一个点为中心进行旋转

Mapstatus = baiduMap.getMapStatus()//拿到当前地图状态

Float rotate = mapstatus.rotate;//拿到地图的旋转角度

//更新旋转角度

baiduMap.setMapStatus(rotateMapstatu);

MapStatusUpdate rotateMapstatu = MapStatusUpdateFactory.newMapStatus(rotateStatus)

MapStatus rotateStatus = new MapStatus.builder().rotate(0-360°).build();

 

//以一条直线为轴旋转(OverLooking)

Mapstatus = baiduMap.getMapStatus()//拿到当前地图状态

Mapstatus.overlook//0~45°

更新轴旋转与点旋转的效果类似.

 

//移动,类似参考设置中心点(带动画就有过程,不带过程就是直接跳过去的)

baiduMap.animateMapStatus(通过工厂.new Latlang(纬度,经度));

3,百度地图入门总结:

三大核心类的使用

获取APIKEY,获取SHA1值:通过DOS命令,通过Eclipse

拷贝JAR包和权限,X86处理器不能使用.

加载MapView控件,记得进行初始化操作,校验key(在setContentView(view)之前调用)

在清单文件中配置百度地图APIKEY节点

控制管理:缩放比例,中心位置,移动,旋转角度,

指南针的设置:UiSettings().setCompassEnabled(false)//设置不可见

Uisettings()可以通过BaiduMap.getUiSettings()//获取

也可以更换位置,查看API即可.

处理地图事件:baiduMap核心类的各种事件监听器(双击,截图,覆盖物,单击等).

 

4,百度地图的加强(地图图层,覆盖物,搜索,离线地图)

4.1 地图图层

分类:底图(显示基本的地图信息),实时交通信息图,卫星图(真实的地理面貌)

4.1.1 地图图层实现步骤(底图,交通图,卫星图)

①校验key(如果不关心返回广播可以不接收广播),初始化,获取baiduMap,绑定生命周期

②设置3个键位:onKeyDown(int keyCode,KeyEvent event)//也可以用按钮设置

//切换图层:

baiduMap.setMapType(BaiduMap.xxxx) //设置对应的图层即可.卫星图,普通图

baiduMap.setTrafficEnadbled(true)//设置交通图

 

4.2 覆盖物-绘制图(地图上的一切叠加或覆盖到地图的内容(如路线))

OverlayOptions基类,这个基类并没有公开的方法,它代表都操作同一个地图.

1,创建自己的覆盖物

2,给覆盖物设置数据(不同覆盖物的数据设置)

3,添加覆盖物

 

4.2.1 覆盖物Demo示例

创建BaseActivity把所有地图的基本信息加载(校验key,绑定生命周期,获取baiduMap等)进去,不然每个小Demo都要再写一次.

CircleOptionsDemo//圆形覆盖物,名字随意

①绘制圆的条件:绘制圆,圆心+半径,是否填充+颜色+如果不填充 圆边框粗细,样式

②执行步骤:

创建自己的对象

 CircleOptions circleoptions = new CircleOptions();

设置数据;

Circleoptions.center(hmPos)//设置圆心,返回当前对象,可以用链式编程.

.radius(1000)//半径,单位米.

.fillColor(0x00(透明度)00(红)00(绿)00(蓝))//设置颜色16进制,透明度,红绿蓝

.stroke(new Stroke(5(宽度),颜色))//设置边框

添加到地图中:

baiduMap.addOverlay(circleoptions);//只有当这个圆能完全显示的时候才会完整显示圆.

 

TextOptionsDemo

①创建对象TextOptions.

②设置数据,按API上的方法,设置自己想要设置的效果即可.

安卓下的字体:三种对称的,非对称的,等宽的(不满意的话可以自定义)

③添加到地图中baiduMap.addOverlay(textOptions)

 

MarkerOptions(类似与一种标注,如周边的超市,银行,订钉子,显示同一类型的东西)

①创建对象

②设置数据:设置刷新时间,图标(或图标集合可以用来切换)等

Marker.icon(BitmapDescriptor)//设置显示的图片

通过BitmapDescriptorFactory 可以通过获取各种位置的资源反馈对象(SD卡,ID都可以获得)

③添加到地图中baiduMap.addOverlay(markeroptions);

//可以添加多个markeroptions标记,因为可能会需要插入多个标记

//再new一次MarkerOptions对象,重复操作即可.(坐标不一样)

icons(BitMapDescriptor的集合)//可以设置多个图片,会自动切换,也有方法可以设置间隔.

.draggable(true)//可以拖动

 

泡泡显示:需求:点击覆盖物时,弹出泡泡

  实现步骤①预加载pop,设置为隐藏

  ②点击的时候,更新位置,设置为显示

这样用户体验更好.

mapView.addView(pop的布局文件,params)

这里的params是MapViewLayoutParams.builder()//通过百度提供的参数类的方法获取参数.

.layoutMode(MapViewXXX.ElayoutMode.mapMode)//设置模式,经纬度或是地图模式

//地图模式会随着地图移动而移动,经纬度会固定位置

.position(hmpos)//设置位置,不能为null

.width(MapViewXXX.WRAP_CONTENT).height(XXXXX)//设置宽高

.build();

//设置点击事件

baiduMap.setOnMarkerClickListener();可以通过重写方法的参数获取坐标

BUG:如果在地图上有一个marker设置了多个图片,就有可能把泡泡抢走

泡泡的位置也有方法可以设置偏移量(Y轴向上是负数,向下是正数).

其它覆盖物:略,使用到时候直接查看百度的帮助文档即可(中文的,容易理解)

 

4.2.2 搜索覆盖物

一,搜索服务的核心类分两类

①位置搜索,周边搜索,范围搜索

②公交检索,驾乘检索,步行检索

它们响应的结果:OverlayManager(搜索覆盖物的核心类)

POI(Poing of Interest兴趣点)

根据范围和检索词发起范围检索

周边检索

城市poi检索

Poi详细信息检索

结果的展示:PoiOverlay

 

示例:矩形范围内搜索,关键类:

PoiSearch poiSearch = PoiSearch.newInstance();//获取发起POI搜索请求的对象

poiSearch.setOnGetPoiSearchResultListener(new XXX)

poiSerarch.searchInBound(new xxx)//发起请求的方法

 这个XXX是用来设置参数,new出来查看API即可,每页容量,分页编号等

需要什么参数就new什么参数,再查看帮助文档找到需要的方法即可.

 

//因为百度地图的使用主要是API接口的调用,所以就不做详细笔记了,大部分功能查看百度提供的开发者文档就能使用了,有需要特别标注的会做下笔记.

特别标注:

第一次点击矩形范围搜索没有出现数据,第二次才出来:

检验KEY和发起搜索请求的代码两者是异步的,可能会出现检验KEY未完成,就发起请求的情况.

范围内搜索,并不是只搜索范围内的被搜索物,而是以这个范围内的被搜索物为中心进行搜索.

需要返回结果就需要自己去写一个类继承PoiOverlay,重写onPoiClick()方法

在这个方法里创建PoiReuslt对象,poiResult.getAllPoi()//获取返回来的所有POI,通过方法上的参数可以获得用户具体点击的PoiInfo

 

PoiNearBy周边搜索,步骤都类似,不过它检索的是一个圆形.

周边搜索只搜索圆心以内的数据

 

城市内检索,步骤类似poiSearch.searchInCity(xxx);

//需要设置城市

//设置分页信息

不希望两页信息相互叠加,每次清空之前的数据baiduMap.clear()//清除上一次的数据

 

详情检索:poiSearch.searchPoiDetail(PoiDetailSearchOption option)

设置uid option.poiuid(poiInfo.uid)

 

驾车路线的结果处理

①创建覆盖物,它有自己的覆盖物DrivingRouteOverlay

②设置数据setData(result.getRouteLines().get(0)//如果有多条数据就选第0条);

③添加到数据overlay.addToMap();

overlay.zommToSpan();//全部显示在屏幕中

 

驾车路线更改图标和添加途径点

Options.passBy(nodes);//nodes就是途经界面的集合

创建类继承DrivingRouteOverlay,重写两个方法就可以修改图标

 

公交换乘的其它内容:

地址解析服务GeoCoder.XXX(可以根据地址名或地理坐标点获取地址信息)

公交信息的详细检索通过poiInfo.uid(可以根据Type来判断是否是公交兴趣点,然后传给另外一个方法poiSearchInCity查询公交线路详细信息)

联想词检索:把联想词发给服务器,服务器会返回对应的联想词汇

 

离线地图:下载百度提供的地图包,不同版本放在不同的SD卡目录下,最后需要一系列方法进行load.

 

5.定位(GPS定位,基站定位(cellid,loc),WIFI定位(mac地址,通过GPS或基站定位的信息上传到百度服务器中,以后就可以直接通过该路由器的mac地址获取定位信息,国内百度做的比较好)):

获取的经纬度是在火星坐标的基础上再次进行加密的(在别的地图应用上就可能不准确了)

定位信息在离线帮助文档找不到,在线的才能看到

拷贝在线文档中的示例代码,该改的改,该复制的复制

 

定位模式:①高精度的 网络定位和GPS定位都使用

②低功耗的,不使用GPS

③仅使用设备定位模式,不需要连接网络,只使用GPS定位,不支持室内环境

 

baiduMap中setMyLocationData(MyLocationData data)//设置定位数据,参考帮助文档

//注意开始定位之后要及时停掉(失去焦点就停掉)

定位的时候把焦点移动到定位的位置

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!