




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
android的百度地图开发,android进阶,百度地图api平台介绍,百度地图androidsdk是一套基于android2.1(v1.3.5及以前版本支持android1.5以上系统)及以上版本设备的应用程序接口。可以使用该套sdk开发适用于android系统移动设备的地图应用,通过调用地图sdk接口,您可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。百度地图androidsdk提供的所有服务是免费的,接口使用无次数限制。您需申请密钥(key)后,才可使用百度地图androidsdk。任何非营利性产品请直接使用。,百度地图api平台,百度地图api网址:,申请key,点击获取密钥进入密钥申请页并阅读相关的使用条款勾选已阅读并同意条款填写应用名称填写一下应用的相应功能及描述输入验证码确定后密钥即可申请成功,如何把api添加到我的android工程中,在工程里新建libs文件夹(若不存在的话),将开发包里的baidumapapi_v2_1_1.jar拷贝到libs根目录下,将libapp_baidumapapplib_v2_1_1.so和libvi_voslib.so拷贝到libsarmeabi目录下项目属性中javabuildpath-orderandexport中,确定androidprivatelibaries与androiddependencies这两项前面的选择框被选上后,点确定菜单project-clean重新编译项目后就可以正常使用地图中的功能进行编程了。上图包中的liblocksdk3.1.jar及对应的so文件是用于定位与搜索功能的,如果不需要可以不加入到项目当中,项目清单添加权限,在manifest中添加使用权限,项目清单添加权限,在清单文件中添加对屏幕的支持,对需要加载地图的activity进行属性设置,项目清单添加权限,在布局中添加百度地图显示控件,这个就是加载百度地图的控件框,这个布局你可以根据自己的需要进行调整,或是放置到你的activity需要的地方去。此控件需要接收到点击事件,所以需要把clickable设置成true。,mapactivity基类,管理显示在mapview类中activity处理逻辑的基础类。mapactivity这个基类不是必须的,但一般情况下,我们会把地图配置处相关处理代码放在基类中,然后在实现此基类的子类中专心实现业务的相关逻辑,而不是把大量的地图设置与业务逻辑混杂在一起。它的责任包括:activity及地图生命周期管理地图控制相关配置在一个mapview后面创建和销毁服务定位结果返回后的处理,bmapmanager,地图、定位、搜索功能都需要用bmapmanager对象来管理,bmapmanager提供四个接口:init()、start()、stop()、destroy()。在应用程序里生成bmapmanager对象并初始化,在程序退出时调用destroy(),在需要使用sdk功能的activity的oncreate()方法里调用start()方法,ondestroy()方法里调用stop()方法,或者onresume()/onpause()分别调用start()和stop()。常用方法:destroy():在程序退出前调用booleaninit(java.lang.stringstrkey,mkgenerallistenerlistener)初始化地图引擎,需要送入申请的百度地图keybooleanstart():开启百度地图apibooleanstop():终止百度地图api,调用此函数后,不会再发生回调,mkgenerallistener,一般事件通知接口,该接口返回网络状态,授权验证等结果,用户需要实现该接口以处理相应事件。voidongetpermissionstate(intierror):返回授权验证错误,ierror为错误号,值为300,验证失败voidongetnetworkstate(intierror)返回网络错误参数:ierror-错误号,mapview,一个显示地图的视图控件,当被焦点选中时,它能捕获按键事件和触摸手势去平移和缩放地图setbuiltinzoomcontrols(booleanon):设置是否启用内置的缩放控件getcontroller():返回地图的mapcontroller,这个对象可用于控制和驱动平移和缩放setdoubleclickzooming(booleanbdoubleclickzooming):设置mapview是否支持双击放大效果getoverlays():获取当时地图控件中的已有图层refresh():刷新此地图控件,mapcontroller,处理地图移动和缩放的工具类setcenter(geopointpoint):设置地图视图中心点,必须设置中心点才能显示地图setzoom(intzoomlevel):设置地图的缩放级别。3-19值越大地图上建筑越大zoomin/out():放大/缩小一个级别animateto(geopointp,messagem):以动画的方式将地图视图移到到指定点上,结果后发送一个指定的消息。,geopoint(intlatitudee6,intlongitudee6)普通经纬度要乘以106表示一个地理坐标点,存放经度和纬度,以微度的整数形式存储,locationclient,定位处理功能的核心类registerlocationlistener(bdlocationlistener)接收到定位数据后可由指定监听器中的onreceivelocation(bdlocation)的方法来接收相关的数据并做相关的处理构造:newlocationclient(getapplicationcontext()setlocoption(locationclientoption)设置定位的参数start()启动定位功能,此功能是持续的,可以定义间隔刷新时间stop()结束定位功能,但前面设置的定位参数不会消失,可以再启动requestlocation()发起异步定位请求,如果位置没有变化,不会发起网络请求,直接返回上次的位置。(2次间隔需要大于1秒),locationclientoption,设置定位功能的定位方式disablecache(boolean)真表示禁用缓存定位setopengps(boolean)是否使用gps定位,前提是手机打开了gps定位setaddrtype(string)当字串为all时返回此位置地址信息,其它不返回setcoortype(string)设置返回坐标的格式gcj02-国测局bd09百度墨卡托bd0911百度经纬坐标(手机默认)setscanspan(int)定时定位的时间间隔(ms)此值大于1000时,每隔此值指定的时间就会发起一次定位此值小于1000时或不设置此值时,调用一次requestlocation()方法则定位一次,locationdata,保存用户位置的数据实例doublelatitude纬度值doublelongitude经度值floataccuracy定位精度floatdirectiongps定位时的方向角度intsatellitesnumgps卫星的数量speedgps定位时速度,mapactivity代码,protectedvoidondestroy()mapview.destroy();if(mapmanager!=null)mapmanager.destroy();mapmanager=null;super.ondestroy();,protectedvoidonpause()mapview.onpause();if(mapmanager!=null)mapmanager.stop();super.onpause();,protectedvoidonresume()mapview.onresume();if(mapmanager!=null)mapmanager.start();super.onresume();,地图代码示例,protectedvoidoncreate(bundlesavedinstancestate)/mapactivity基类的createsuper.oncreate(savedinstancestate);mapmanager=newbmapmanager(getapplication();mapmanager.init(baidu_map_key,null);locationclient=newlocationclient(getapplicationcontext();locationclient.registerlocationlistener(this);locationclientoptionlco=newlocationclientoption();lco.setopengps(true);lco.setcoortype(bd09ll);lco.setpriority(locationclientoption.gpsfirst);/lco.setscanspan(5000);locationclient.setlocoption(lco);locdata=newlocationdata();,protectedvoidinitmap(intmapid)/初始化地图mapview=(mapview)findviewbyid(mapid);mapview.setbuiltinzoomcontrols(true);mc=mapview.getcontroller();locdata.latitude=39.915d;locdata.longitude=116.404d;mc.setcenter(newgeopoint(int)(locdata.latitude*1e6),(int)(locdata.longitude*1e6);mc.enableclick(true);mc.setzoom(14);locationoverlay=newmylocationoverlay(mapview);mapview.getoverlays().add(locationoverlay);locationoverlay.enablecompass();mapview.refresh();,地图示例效果图,mapview.settraffic(true),mapview.setsatellite(true),覆盖物,所以叠加或覆盖到地图的内容,统称为地图覆盖物。如标注、矢量图形元素(包括折线、多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当拖动或缩放地图时,覆盖物也会做相应的移动。地图api提供如下几种覆盖物:overlay:覆盖物的抽象基类,所有的覆盖物都继承此类的方法,实现用户自定义图层显示。mylocationoverlay:负责显示用户当前位置的overlay。itemizedoverlay:overlay的一个基类,包含了一个overlayitem列表,相当于一组分条的overlay,通过继承此类,将一组兴趣点显示在地图上。poioverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如北京市搜索公园,通过此图层将公园显示在地图上。popupoverlay用于快速在特定位置显示一个弹窗,通常用于导航,搜索定位点的提供routeoverlay:步行、驾车导航线路图层,将步行、驾车出行方案的路线及关键点显示在地图上。transitoverlay:公交换乘线路图层,将某一特定地区的公交出行方案的路线及换乘位置显示在地图上。,覆盖物类继承图,com.baidu.mapapi.map.overlay,graphicsoverlay,mylocationoverlay,popupoverlay,itemizedoverlay,poioverlay,routeoverlay,transitoverlay,标注我的位置,mylocationoverlaymylay=newmylocationoverlay(mapview);locationdatalocdata=newlocationdata();locdata.latitude=26.04968d;locdata.longitude=119.307784d;/手动设定经纬度mylay.setdata(locdata);mapview.getoverlays().add(mylay);mapview.refresh();mapview.getcontroller().animateto(newgeopoint(int)(locdata.latitude*1e6),(int)(locdata.longitude*1e6);,在实际的开发中,位置的经纬度是要通过locationclient接口去获取的可以看到位置图层不仅可以显示所在的点,还可以显示定位信号的误差范围(蓝色的圈表示),标注图形及文字,bitmapbp=bitmap.createbitmap(120,120,config.argb_8888);/需要绘制的图形canvasc=newcanvas(bp);paintp=newpaint();p.setcolor(android.graphics.color.blue);bitmaparrow=bitmapfactory.decoderesource(getresources(),android.r.drawable.arrow_down_float);/获取图形资源库中的箭头图形c.drawbitmap(arrow,60,60,p);p.settextsize(20);c.drawtext(中心点,60,60,p);bitmapdrawablebd=newbitmapdrawable(bp);/通过此类进行bitmap至drawable转换itemizedoverlayclay=newitemizedoverlay(bd,mapview);overlayitemcenteritem=newoverlayitem(mapview.getmapcenter(),中心点,搜索的中心点);clay.additem(centeritem);mapview.getoverlays().add(clay);mapview.refresh();,如果仅需要绘制图形,只需要在newitemizedoverlay构造的第一个参数送入相应的drawable资源文件就可以了如果需要绘制文字,则需要先将文字绘制在图形文件中,然后再把图形文件通过itemizedoverlay对象绘制到地图上即可,根据范围和关键字检索位置,mksearchsearch=newmksearch();search.init(bmm,newmysearchlistener();search.poisearchnearby(searchtext.gettext().tostring(),mapview.getmapcenter(),2000);,publicvoidongetpoiresult(mkpoiresultres,inttype,interror)if(mapview=null)return;if(error=mkevent.error_result_not_found)toast.maketext(xrmapactivity.this,抱歉,未找到结果,0).show();return;elseif(error!=0|res=null)toast.maketext(xrmapactivity.this,抱歉,搜索出错,0).show();return;overlayo=null;for(iteratorir=mapview.getoverlays().iterator();ir.hasnext();)o=(overlay)ir.next();if(oinstanceofpoioverlay)ir.remove();mapview.refresh();/去除上次搜索的结果poioverlayplay=newpoioverlay(xrmapactivity.this,mapview);play.setdata(res.getallpoi();/获取查询返回的结果mapview.getoverlays().add(play);mapview.refresh();,标注搜索范围,mapview.getoverlays().clear();mapview.refresh();/清除先前生成的内容graphicsoverlayglay=newgraphicsoverlay(mapview);geometrygeo=newgeometry();geo.setcircle(mapview.getmapcenter(),2000);/使用一个圆来表示范围symbolsym=newsymbol();symbol.colorcirclecolor=sym.newcolor();circlecolor.alpha=80;/设置透明度circlecolor.red=0;circlecolor.green=200;/绿色的圆circlecolor.blue=0;sym.setsurface(circlecolor,1,1);/第一个参数表示圆需要填充,后面表示边界graphicgra=newgraphic(geo,sym);glay.setdata(gra);mapview.getoverlays().add(glay);mapview.refresh();,上面这个图是叠加了前面三种图层产生的综合结果,其中的绿色圆圈,为右侧代码所生成,路线搜索,/先要查询出来当前地图中心点所在的城市名称search.reversegeocode(mapview.getmapcenter();,publicvoidongetaddrresult(mkaddrinfores,interror)if(error!=0|res=null)return;stringcity=res.addresscomponents.city;mkplannodestartnode=newmkplannode();startn=starttext.gettext().tostring();mkplannodeendnode=newmkplannode();endn=endtext.gettext().tostring();switch(radiogroup.getcheckedradiobuttonid()caser.id.radio0:search.walkingsearch(city,startnode,city,endnode);break;caser.id.radio1:/可以设置策略,最省时,或最省钱search.setdrivingpolicy(mksearch.ecar_time_first);search.drivingsearch(city,startnode,city,endnode);break;caser.id.radio2:search.transitsearch(city,startnode,endnode);break;/获取到city字串后就可以调用相关的接口实现相关的功能,由于相关的接口需要指定搜索所在的城市名,所以我们可以先通过接口获取相关的城市名,再调用后续的搜索接口展示不同的路线结果。,路线搜索,publicvoidongetwalkingrouteresult(mkwalkingrouteresultres,interror)/步行if(error!=0|res=null)return;mapview.getoverlays().clear();mapview.refresh();routeoverlayro=newrouteoverlay(xrmapactivity.this,mapview);ro.setdata(res.getplan(0).getroute(0);mapview.getoverlays().add(ro);mapview.refresh();/驾车代码与其完全一样,只有参数名不一样mkdrivingrouteresult,publicvoidongetwalkingrouteresult(mkwalkingrouteresultres,interror)/公交if(error!=0|res=null)return;mapview.getoverlays().clear();mapview.refresh();transitoverlayto=newtransitoverlay(xrmapactivity.this,mapview);to.setdata(res.getplan(0);mapview.getoverlays().add(to);mapview.refresh();/公交用的图层与上面的不一样,路线搜索效果图,不同的搜索类型在点击地图上的相关图标点时,提示也会有不同。比如公交线路搜索会直接提示需要坐几路车,经过多少站。,公交详细路线图,查找公交线路需要分三步进行查找当前视图中心点所在城市名称查找此城市指定线路的uid根据城市名称及线路uid查询所有的站点并标注相关信息,/查找城市名search.reversegeocode(mapview.getmapcenter();publicvoidongetaddrresult(mkaddrinfores,interror)if(error!=0|res=null)return;stringcity=res.addresscomponents.city;search.poisearchincity(city,k2);/查找线路uidlog.d(city,city);,公交详细路线图,/查找线路uidpublicvoidongetpoiresult(mkpoiresultres,inttype,interror)mkpoiinfocurinfo=null;for(inti=0;ires.getnumpois();i+)curinfo=res.getpoi(i);if(2=curinfo.epoitype)/指定公交线路类型break;log.d(uid,curinfo.uid);search.buslinesearch(city,curinfo.uid);/搜索线路信息,/搜索线路信息publicvoidongetbusdetailresult(mkbuslineresultres,interror)if(error!=0|res=null)return;mapview.getoverlays().clear();mapview.refresh();routeoverlayro=newrouteoverlay(xrmapactivity.this,mapview);ro.setdata(res.getbusroute();/将线路输出到图层mapview.getoverlays().add(ro);mapview.refresh();log.d(res,res.getbusname();/打印出线路名称(带起止站名称)searchtype=0;,可以看出,其实都是图层处理其实都是大同小异的,只是数据源不同而已。可以通过多步调用的方式,一步一步地从百度提供的api中获取我们所关心的数据内容,最后再将这些数据展示在地图图层中,就完成了我们所需要的效果。,实现定位与目的地导航,从v2.1.1版本开始,sd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中数学三角形的概念(课件)+人教版数学八年级上册
- 新解读《GB-T 30568-2014锆及锆合金锻件》
- 重庆山城骑士课件
- 新解读《GB-T 4131-2014水泥的命名原则和术语》
- 新解读《GB 2494-2014固结磨具 安全要求》
- 完形填空-说明文和议论文(复习讲义)-2026年高考英语一轮复习原卷版
- 重工绕线基础知识培训课件
- 醉翁亭记教学课件
- 酿酒机器人编程知识培训课件
- 实验的基本技能(专项训练)-2023年中考化学二轮复习
- 典型主机遥控系统AC系统维护与管理挪威Kong
- 2025湖南省高校对口招生基本要求及考试大纲(语数英专业课)
- 老年患者安全管理
- 中医药在慢性病防治中的作用研究
- 虚拟现实游戏设计-深度研究
- 股骨骨折病人护理要点
- 《鲍曼不动杆菌》课件
- 2025年上海合伙企业协议模板
- Unit 1 Making friends Section A How do we greet friends 第一课时(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册
- DB11-T 1211-2023 中央空调系统运行节能监测
- 《肺动脉高压的护理》课件
评论
0/150
提交评论