百度地图_api

  这一天主要讲的是百度地图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)//设置定位数据,参考帮助文档

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

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

时间: 2024-08-06 15:55:36

百度地图_api的相关文章

百度地图API实现批量地址解析

1.前言 写这篇文章的原因是最近做一个GIS项目在网上爬取了一些数据,无奈只有地址的文字信息没有坐标信息,如何把信息显现在地图上呢?很纠结啊,查看了一下百度地图API惊奇的发现百度提供了地址解析的API,然后查看了他的Demo后豁然开朗,所以动手将自己的文字信息数据进行解析坐标信息.下面开始讲解. 2.方案 (1)自己数据库中的数据 (2)百度地图API Demo <!DOCTYPE html> <html> <head> <meta http-equiv=&qu

js中实现高德地图坐标经纬度转百度地图坐标

1 function tobdMap(x, y) { 2 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 3 var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi); 4 var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); 5 var bd_lon = z * Math.cos(theta) + 0.00

Vue2.0与 [百度地图] 结合使用———vue+webpack+axios+百度地图实现组件之间的通信

Vue2.0与 [百度地图] 结合使用: 1.vue init webpack-simple vue-baidu-map 2.下载axios cnpm install axios; 3.在main.js中引入axios,并使用 import axios from 'axios' /* 把axios对象挂到Vue实例上面,其他组件在使用axios的时候直接 this.$http就可以了 */ Vue.prototype.$http = axios; 4.引入百度地图的js秘钥--->最好在inde

百度地图标注图标太小

1.1.1  现象 百度地图中,定位点的标注示意图标太小: 实际期望的图标是这样的: 1.1.2  原因 检查了很久,以为是打开地图时的设置问题,后来慢慢查找地图上的元素定位,终于发现原来这个图标大小是被CSS控制的,在地图元素的内部可以找到如下代码: 这个img元素就是用来显示定位图标的,可以修改这个元素的CSS属性来改变大小. 1.1.3  解决 如果要使用默认大小,则需要配置如下CSS: img {     max-width: inherit; } 原来图标变小,是因为其它CSS配置导致

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

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

HTML5结合百度地图API创建地图应用

具体的百度地图API的使用方法查看百度地图API里的DEMO <style> #div1{ width:400px; height:400px; border:1px #000 solid;} </style> <script src="http://api.map.baidu.com/api?v=1.3"></script> <script> window.onload = function(){ var oInput =

百度地图SDK开发过程中遇到的问题解析

问题1. 在运行显示百度地图是出现如下错误,导致程序停止: 01-30 06:49:49.935: E/AndroidRuntime(9132): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK_v3_2_0_15 from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.getsmsinfo-1.apk,libraryP

Android如何申请百度地图key

在开发过程中,有时候会使用到地图定位之类的功能,在使用百度地图之前,我们先要申请一个百度地图的key方才能使用,接下来,一步步教给大家如何去申请一个百度地图key 登录你的百度帐号,之后搜索---"百度地图api",如下图所示: 选择第一个,点击进去之后,往下拉,如图所示: 点击申请密钥,如图所示: 接下来如图所示: 接下去找Android SDK安全码,如图所示: 之后回到页面,将复制的东西拷贝到安全码那,之后写一个英文分号;   ,之后加上项目包名,就好,如下图: 点击提交之后,

Android百度地图开发(一)之初体验

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一.申请AK(API Key) 要想使用百度地图sdk,就必须申请一个百度地图的api key.申请流程挺简单的. 首先注册成为百度的开发者,然后打开http://lbsyun.baidu.com/ap