计算机学院第10章百度地图开发课件

PPT
  • 阅读 110 次
  • 下载 0 次
  • 页数 103 页
  • 大小 302.452 KB
  • 2022-12-01 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
计算机学院第10章百度地图开发课件
可在后台配置第一页与第二页中间广告代码
计算机学院第10章百度地图开发课件
可在后台配置第二页与第三页中间广告代码
计算机学院第10章百度地图开发课件
可在后台配置第三页与第四页中间广告代码
计算机学院第10章百度地图开发课件
计算机学院第10章百度地图开发课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 103
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】计算机学院第10章百度地图开发课件.pptx,共(103)页,302.452 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-77541.html

以下为本文档部分文字说明:

计算机学院第10章百度地图开发课件概述百度地图AndroidSDK是一套基于Android2.1及以上版本设备的应用程序接口,可以通过该接口实现丰富的LBS(LocationBasedService,基于位置服务)功能。本章主要知识点有:(1)如何申请密钥、创建应用;(2)Android地

图SDK之基础地图、离线地图和检索功能;(3)Android地图SDK之计算工具、定位和事件监听;(4)Android定位SDK;(5)Android导航SDK百度地图SDK功能概述•地图:提供地图(2D、3D)的展示和缩放、平移、旋转、改变视角等地图操作;•POI检索:可根据关键

字,对POI数据进行周边、区域和城市内三种检索;•线路规划:支持公交信息查询、公交换乘查询、驾车线路规划和步行路径检索;•覆盖物:提供多种地图覆盖物(自定义标注、几何图形、文字绘制、地形图图层、热力图图层等),满足开发者的各种需求

;概述•定位:采用多种定位模式,使用定位SDK获取位置信息,使用地图SDK我的位置图层进行位置展示;•离线地图:支持使用离线地图,节省用户流量,同时为用户带来更好的地图体验;概述•导航:支持调启百度地图导航和Web导航来满足用户对导航功能的需求;•

LBS云检索:支持用户检索存储在LBS云内的自有POI数据,并展示;准备工作—申请密钥在使用百度地图SDK提供的各种LBS能力之前,需要获取百度地图移动版的开发密钥,该密钥与你的百度账户相关联。因此,必须先有百度帐户,才能获得开发密钥。并且,该密钥与你创建的

过程名称有关,具体流程请参考如下介绍。Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key10.1.1基础地图百度地图SDK为广大开发者提供的基础地图和上面的各种覆盖物元素,具有一定的层级压盖关系

,具体如下(从下至上的顺序):(1)基础底图(包括底图、底图道路、卫星图等);(2)地形图图层(GroundOverlay);(3)热力图图层(HeatMap);(4)实时路况图图层(BaiduMap.setTrafficEnabled(true););(5)百度城市热力图(Bai

duMap.setBaiduHeatMapEnabled(true););(6)底图标注(指的是底图上面自带的那些POI元素);(7)几何图形图层(点、折线、弧线、圆、多边形);(8)标注图层(Marker),文字绘制图层(Text);(9)

指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);(10)定位图层(BaiduMap.setMyLocationEnabled(true););(11)弹出窗图层(InfoWindow);(12)自定义View(MapV

iew.addView(View););2.地图类型百度地图AndroidSDK提供了两种类型的地图资源(普通矢量地图和卫星图),开发者可以利用BaiduMap中的mapType()方法来设置地图类型。核心

代码如下:mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();//普通地图mBaiduMap.setMapType(Ba

iduMap.MAP_TYPE_NORMAL);//卫星地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);3.实时交通图当前,全国范围内已支持多个城市实

时路况查询,且会陆续开通其他城市。在地图上打开实时路况的核心代码如下:mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();//开启交通图mBaiduMap.se

tTrafficEnabled(true);4.百度城市热力图百度地图SDK继为广大开发者开放热力图本地绘制能力之后,再次进一步开放百度自有数据的城市热力图层,帮助开发者构建形式更加多样的移动端应用。百度城市热力图的性质

及使用与实时交通图类似,只需要简单的接口调用,即可在地图上展现样式丰富的百度城市热力图。在地图上开启百度城市热力图的核心代码如下:mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.get

Map();//开启热力图mBaiduMap.setBaiduHeatMapEnabled(true);5.标注覆盖物为了能更方便的使用SPI模块,我们要对SPI模块进行构件化。只要良好地封装好每一个构件,在使用时就可以直接调用。出此之外,尤其是对同一芯片的移植非常有助于减少重复性写程

序。开发者可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。具体实现方法如下:在地图上开启百度城市热力图的核心代码如下://定义Maker坐标点LatLngpoint=newLatLng(39.963175,116.4

00244);//构建Marker图标BitmapDescriptorbitmap=BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);//构建Marke

rOption,用于在地图上添加MarkerOverlayOptionsoption=newMarkerOptions().position(point).icon(bitmap);//在地图上添加Marker,并显示mBaiduMap.addOverlay(option);针对已经添加

在地图上的标注,可采用如下方式进行手势拖拽:第一步,设置可拖拽:OverlayOptionsoptions=newMarkerOptions().position(llA)//设置marker的位置.icon(bd

A)//设置marker图标.zIndex(9)//设置marker所在层级.draggable(true);//设置手势拖拽//将marker添加到地图上marker=(Marker)(mBaiduMap.addOverlay(options))

;第二步,设置监听方法://调用BaiduMap对象的setOnMarkerDragListener方法设置marker拖拽的监听mBaiduMap.setOnMarkerDragListener(newOnMarkerDragListener(){publicvoidonMarkerD

rag(Markermarker){//拖拽中}publicvoidonMarkerDragEnd(Markermarker){//拖拽结束}publicvoidonMarkerDragStart(Markermarker){//开始拖拽}});6.几何图形覆盖物地图SDK提供多种结

合图形覆盖物,利用这些图形,可帮助构建更加丰富多彩的地图应用。目前提供的几何图形有:点(Dot)、折线(Polyline)、弧线(Arc)、圆(Circle)、多边形(Polygon)。//定义多边形的五个顶点

LatLngpt1=newLatLng(39.93923,116.357428);LatLngpt2=newLatLng(39.91923,116.327428);LatLngpt3=newLatLng(3

9.89923,116.347428);LatLngpt4=newLatLng(39.89923,116.367428);LatLngpt5=newLatLng(39.91923,116.387428);List<LatLng>pts

=newArrayList<LatLng>();pts.add(pt1);pts.add(pt2);pts.add(pt3);pts.add(pt4);pts.add(pt5);//构建用户绘制多边形的Option对象OverlayOpti

onspolygonOption=newPolygonOptions().points(pts).stroke(newStroke(5,0xAA00FF00)).fillColor(0xAAFFFF00);//在地图上添加多边形Option,用于显示mBaiduMap.addOverlay(p

olygonOption)7.文字覆盖物文字,在地图中也是一种覆盖物,开发者可利用相关的接口,快速实现在地图上书写文字的需求。实现方式如下://定义文字所显示的坐标点LatLngllText=newLatLng(39.86923,116.397428);//构建文字Option对象,用于在地

图上添加文字OverlayOptionstextOption=newTextOptions().bgColor(0xAAFFFF00).fontSize(24).fontColor(0xFFFF00FF).text(

"百度地图SDK").rotate(-30).position(llText);//在地图上添加该文字对象并显示mBaiduMap.addOverlay(textOption);8.弹出窗覆盖物弹出窗覆盖物的实现方式如下,开发者可利用此接口,

构建具有更强交互性的地图页面。//创建InfoWindow展示的viewButtonbutton=newButton(getApplicationContext());button.setBackgroundResour

ce(R.drawable.popup);//定义用于显示该InfoWindow的坐标点LatLngpt=newLatLng(39.86923,116.397428);//创建InfoWindow,传入view,地理坐标,y轴偏移量InfoWind

owmInfoWindow=newInfoWindow(button,pt,-47);//显示InfoWindowmBaiduMap.showInfoWindow(mInfoWindow);9.地形图图层地形图图

层(GroundOverlay),又可叫做图片图层,即开发者可在地图的指定位置上添加图片。该图片可随地图的平移、缩放、旋转等操作做相应的变换。该图层是一种特殊的Overlay,它位于底图和底图标注层之间

(即该图层不会遮挡地图标注信息)。在地图中添加使用地形图覆盖物的方式如下://定义Ground的显示地理范围LatLngsouthwest=newLatLng(39.92235,116.380338);LatLngnortheast=newLatLng(39.947246,1

16.414977);LatLngBoundsbounds=newLatLngBounds.Builder().include(northeast).include(southwest).build();//定义

Ground显示的图片BitmapDescriptorbdGround=BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);//定义

Ground覆盖物选项OverlayOptionsooGround=newGroundOverlayOptions().positionFromBounds(bounds).image(bdGround).transpa

rency(0.8f);//在地图中添加Ground覆盖物mBaiduMap.addOverlay(ooGround);10.热力图功能热力图是用不同颜色的区块叠加在地图上描述人群分布、密度和变化趋势的一个产品,百度地图SDK将绘制热力图的能力为广大开发者开放,帮助开发者利用自

有数据,构建属于自己的热力图,提供丰富的展示效果。利用热力图功能构建自有数据热力图的方式如下:第一步,设置颜色变化://设置渐变颜色值int[]DEFAULT_GRADIENT_COLORS={Color.rgb(102,2

25,0),Color.rgb(255,0,0)};//设置渐变颜色起始值float[]DEFAULT_GRADIENT_START_POINTS={0.2f,1f};//构造颜色渐变对象Gradientgradie

nt=newGradient(DEFAULT_GRADIENT_COLORS,DEFAULT_GRADIENT_START_POINTS);第二步,准备数据://以下数据为随机生成地理位置点,开发者根据自己的实际业务,传

入自有位置数据即可List<LatLng>randomList=newArrayList<LatLng>();Randomr=newRandom();for(inti=0;i<500;i++){//116.

220000,39.780000116.570000,40.150000intrlat=r.nextInt(370000);intrlng=r.nextInt(370000);intlat=39780000+rlat;intlng=116220000+rlng;LatLngll

=newLatLng(lat/1E6,lng/1E6);randomList.add(ll);}第三步,添加、显示热力图://在大量热力图数据情况下,build过程相对较慢,建议放在新建线程实现HeatMapheatmap=newHeatMap.Builder().data(

randomList).gradient(gradient).build();//在地图上添加热力图mBaiduMap.addHeatMap(heatmap);第四步,删除热力图:heatmap.removeHeatMap();10.2定位百度地图Android

定位SDK是利用设备当前的GPS信息(GPS定位),基站信息(基站定位)和Wi-Fi信息(Wi-Fi定位)完成定位的。开发者在应用中成功集成百度定位SDK以后,既可以方便的通过定位SDK的接口向百度定位服务请求位置信息。定位SDK会根据设备当前的实际

情况(如是否开启GPS,是否连接网络,是否扫描到Wi-Fi信息等)生成定位依据,并根据开发者设置的实际定位策略(包括三种:高精度模式,低功耗模式,仅用设备模式)进行定位。//开启定位图层mBaiduMap.setMyLocationEnabled(true);//构造定位数据My

LocationDatalocData=newMyLocationData.Builder().accuracy(location.getRadius())//此处设置开发者获取到的方向信息,顺时针0-360.direction(100).latitud

e(location.getLatitude()).longitude(location.getLongitude()).build();10.3导航1.SDK组成百度导航SDK由三部分组成:代码Jar包,资源包,so动态库。代码Jar包由Java源代

码编译打包而成,提供在线导航、线路规划、语音播报等功能。资源包由导航所需的配置数据、基础数据,以及导航功能所需的layout、drawable、string等资源打包而成。So动态库是由native代码编译而成,主要是地图、导航、路线规划、语

音播报等功能的底层实现。2.工程配置1)带TTS的SDK在新建的Android工程里的assets目录添加BaiduNaviSDK_Resource_vX_X_X.png和channel文件,在libs目录添加BaiduNaviSDK_vX_X_X.jar、android_

api_1.1_forsdk.jar、galaxy_mini.jar、galaxy_mini_lbs.jar、lbsCoreSDK.jar,在libs/armeabi目录添加libapp_BaiduNaviApplib_vX_X.so

、libejTTS.so、libCNPackage.so、liblocnaviSDK.so。2)不带TTS的SDK在新建的Android工程里的assets目录添加BaiduNaviSDK_Resource_vX_X_X.png和channel文件,在libs目录添加Ba

iduNaviSDK_vX_X_X.jar、android_api_1.1_forsdk.jar、galaxy_mini.jar、galaxy_mini_lbs.jar、lbsCoreSDK.jar,在libs/armeabi目录添加libapp_BaiduNavi

Applib_vX_X.so、liblocnaviSDK.so。3)注意事项对于android_api_1.1_forsdk.jar,它是百度移动统计SDK的部分,如果开发者同样也使用了百度移动统计SDK,并且添加android_api_1.1_forsdk.jar到工程时候发生代码冲

突,此时应该把android_api_1.1_forsdk.jar去除掉。3.一键导航百度导航SDK提供便捷的方式让开发者快速地发起导航:第一步:创建并配置工程(具体方法参见工程配置部分的介绍);第二步:在Manifest中添加使用权限及Android版本支持;导航需要的权限如下:<!--使用导航

功能所需权限--><uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission

android:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCES_MOCK_LOCATI

ON"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="com.android.launcher.permis

sion.READ_SETTINGS/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permi

ssion.BROADCAST_STICKY"/><uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/><uses-permissionandroid:name="android.permis

sion.PROCESS_OUTGOING_CALLS"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>注意在AndroidManifest.xml中ap

plication标签下添加如下代码,“com.baidu.lbsapi.API_KEY”中放入开发者申请的的APIKey。<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:val

ue="bEDE2Ut8zsrZGa4p9caq4LNU"/><serviceandroid:name="com.baidu.navi.location.f"android:enabled="true"/>第三步:初始化导航引擎:在应用的入口activity中privatebool

eanmIsEngineInitSuccess=false;privateNaviEngineInitListenermNaviEngineInitListener=newNaviEngineInitListener(){publicvoidengineInitSucce

ss(){//导航初始化是异步的,需要一小段时间,以这个标志来识别引擎是否//初始化成功,为true时候才能发起导航mIsEngineInitSuccess=true;}publicvoidengineInitStart(){}publicvoidengineInit

Fail(){}};privateStringgetSdcardDir(){if(Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){return

Environment.getExternalStorageDirectory().toString();}returnnull;}publicvoidonCreate(BundlesaveInstance)

{super.onCreate(saveInstance);//初始化导航引擎BaiduNaviManager.getInstance().initEngine(this,getSdcardDir(),mNaviEngineInitListener,"我的key",null);}第四步

:配置导航页activity再新建一个activity,在Manifest中加入导航页的声明<activityandroid:name=".BNavigatorActivity"android:configChanges="orientation|screenSize|keyboa

rd|keyboardHidden"/>初始化导航页activity<sourcelang="java">//导航监听器privateIBNavigatorListenermBNavigatorList

ener=newIBNavigatorListener(){@OverridepublicvoidonYawingRequestSuccess(){//TODO偏航请求成功}@OverridepublicvoidonYawingRequestStart(){//TODO开始偏航请求}@Overr

idepublicvoidonPageJump(intjumpTiming,Objectarg){//TODO页面跳转回调if(IBNavigatorListener.PAGE_JUMP_WHEN_GUIDE_END==jumpTiming){finish();}elseif(IBN

avigatorListener.PAGE_JUMP_WHEN_ROUTE_PLAN_FAIL=jumpTiming){finish();}}@OverridepublicvoidnotifyGPSStatusData(inta

rg0){//TODOAuto-generatedmethodstub}@OverridepublicvoidnotifyLoacteData(LocDataarg0){//TODOAuto-generatedmethodstub}@Overridepublic

voidnotifyNmeaData(Stringarg0){//TODOAuto-generatedmethodstub}@OverridepublicvoidnotifySensorData(SensorDataarg0){//TODO

Auto-generatedmethodstub}@OverridepublicvoidnotifyStartNav(){//TODOAuto-generatedmethodstubBaiduNaviManager.getInsta

nce().dismissWaitProgressDialog();}@OverridepublicvoidnotifyViewModeChanged(intarg0){//TODOAuto-generatedmethodstub}};publicvoidonCreate

(BundlesavedInstanceState){super.onCreate(savedInstanceState);//创建NmapViewMapGLSurfaceViewnMapView=BaiduNavi

Manager.getInstance().createNMapView(this);//创建导航视图ViewnavigatorView=BNavigator.getInstance().init(BNavigatorAct

ivity.this,getIntent().getExtras(),nMapView);//填充视图setContentView(navigatorView);BNavigator.getInstance().setListener(mBNavigatorListener);BNaviga

tor.getInstance().startNav();•//初始化TTS.开发者也可以使用独立TTS模块,不用使用导航SDK提供的TTSBNTTSPlayer.initPlayer();//设置TTS播放回调BNavigatorTTSPlayer

.setTTSPlayerListener(newIBNTTSPlayerListener(){@OverridepublicintplayTTSText(Stringarg0,intarg1){//开发者可以使用其他TTS的AP

IreturnBNTTSPlayer.playTTSText(arg0,arg1);}BNRoutePlaner.getInstance().setObserver(newRoutePlanObserver

(this,newIJumpToDownloadListener(){@OverridepublicvoidonJumpToDownloadOfflineData(){//TODOAuto-generatedmethodstub}}));}重写如下方法,管理API:@Ove

rridepublicvoidonResume(){BNavigator.getInstance().resume();super.onResume();BNMapController.getInstance().onResume();};@Overridepu

blicvoidonPause(){BNavigator.getInstance().pause();super.onPause();BNMapController.getInstance().onPause();}@OverridepublicvoidonConfiguratio

nChanged(ConfigurationnewConfig){BNavigator.getInstance().onConfigurationChanged(newConfig);super.onConfigurationChanged(newConfig);}publicvoidonBac

kPressed(){BNavigator.getInstance().onBackPressed();}@OverridepublicvoidonDestroy(){BNavigator.destory();BNRoute

Planer.getInstance().setObserver(null);super.onDestroy();}第五步:在导航初始化成功后,在第三个activityRouteGuideDemo中输入起始点,发起导航BaiduNaviManager

.getInstance().launchNavigator(this,40.05087,116.30142,"百度大厦",39.90882,116.39750,"北京天安门",NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,//算路方式true,

//真实导航BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY,//在离线策略newOnStartNavigationListener(){//跳转监听@Overridepublicvoidon

JumpToNavigator(BundleconfigParams){Intentintent=newIntent(RouteGuideDemo.this,BNavigatorActivity.class);intent.putExtras(configParams);sta

rtActivity(intent);}@OverridepublicvoidonJumpToDownloader(){}});此外,还可以通过指定不同坐标类型的导航起终点来发起一键导航,privatevoidlaunchNavigator2(){BNaviPointstartPoint=new

BNaviPoint(116.307854,40.055878,"百度大厦",BNaviPoint.CoordinateType.BD09_MC);BNaviPointendPoint=newBNaviPoi

nt(116.403875,39.915168,"北京天安门",BNaviPoint.CoordinateType.BD09_MC);BaiduNaviManager.getInstance().launchNavigator(th

is,startPoint,//起点(可指定坐标系)endPoint,//终点(可指定坐标系)NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,//算路方式true,//真实导航BaiduNaviManage

r.STRATEGY_FORCE_ONLINE_PRIORITY,newOnStartNavigationListener(){…}//跳转监听);}或者增加一个或者多个途经点(最多三个),根据导航点列表来发起一键导航,privatevo

idlaunchNavigatorViaPoints(){List<BNaviPoint>points=newArrayList<BNaviPoint>();points.add(mStartPoint);points.addAll(mViaPoints);points.a

dd(mEndPoint);BaiduNaviManager.getInstance().launchNavigator(this,points,//路线点列表NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,//算路方式true,//真实导

航BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY,newOnStartNavigationListener(){…}//跳转监听);}10.4实训项目:实现基本地图功能和公交线路查询10.4.1任务说明1.基本地图功能创建一张百度地图并管理地图

的生命周期。2.地图操作功能介绍地图基本控制方法。3.UI控制功能介绍开关手势功能和显示隐藏UI控件。4.自定义绘制功能介绍自定义绘制点、线、多边形、圆等几何图形和文字。5.公交线路查询功能介绍查询公交线路功

能10.4.2代码实现•1.主要程序结构。2.DemoApplicationpublicclassDemoApplicationextendsApplication{@OverridepublicvoidonCreate(){super.on

Create();//在使用SDK各组间之前初始化context信息,传入ApplicationContextSDKInitializer.initialize(this);}}3.BMapApiDemoMainpublicclassBMapApiDemoMainextendsActivity{

privatestaticfinalStringLTAG=BMapApiDemoMain.class.getSimpleName();//构造广播监听类,监听SDKkey验证以及网络异常广播publicclassSDKRece

iverextendsBroadcastReceiver{publicvoidonReceive(Contextcontext,Intentintent){Strings=intent.getAction(

);Log.d(LTAG,"action:"+s);TextViewtext=(TextView)findViewById(R.id.text_Info);text.setTextColor(Color.RED);if(s.equals(SDKInitializer.SD

K_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)){text.setText("key验证出错!请在AndroidManifest.xml文件中检查key设置");}elseif(s.equals(SDKInit

ializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)){text.setText("网络出错");}}}privateSDKReceivermReceiver;@Overri

depublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.la

yout.main);TextViewtext=(TextView)findViewById(R.id.text_Info);text.setTextColor(Color.YELLOW);text.setText("欢迎使用百度地图Android

SDKv"+VersionInfo.getApiVersion());ListViewmListView=(ListView)findViewById(R.id.listView);//添加ListItem,设置事件响应mListView.setAdapter(newDemoLi

stAdapter());mListView.setOnItemClickListener(newOnItemClickListener(){publicvoidonItemClick(AdapterView<?>arg0,Viewv,intindex,longarg3){onLi

stItemClick(index);}});//注册SDK广播监听者IntentFilteriFilter=newIntentFilter();iFilter.addAction(SDKInitializer.SDK_BROADTCAS

T_ACTION_STRING_PERMISSION_CHECK_ERROR);iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);mRecei

ver=newSDKReceiver();registerReceiver(mReceiver,iFilter);}voidonListItemClick(intindex){Intentintent=null;intent=newIntent(BMapA

piDemoMain.this,demos[index].demoClass);this.startActivity(intent);}privatestaticfinalDemoInfo[]demos={newD

emoInfo(R.string.demo_title_basemap,R.string.demo_desc_basemap,BaseMapDemo.classnewDemoInfo(R.string.demo_title_map_fragment,R.string.demo_desc_

map_fragment,MapFragmentDemo.class),newDemoInfo(R.string.demo_title_multimap,R.string.demo_desc_multimap,MultiMapViewDemo.class),n

ewDemoInfo(R.string.demo_title_layers,R.string.demo_desc_layers,LayersDemo.class),newDemoInfo(R.string.demo_title_control,R.string.demo_desc_co

ntrol,MapControlDemo.class),@OverrideprotectedvoidonResume(){super.onResume();}@OverrideprotectedvoidonDestroy(){

super.onDestroy();//取消监听SDK广播unregisterReceiver(mReceiver);}privateclassDemoListAdapterextendsBaseAdapter{publicDemoListAdapter(){s

uper();}@OverridepublicViewgetView(intindex,ViewconvertView,ViewGroupparent){convertView=View.inflate(BMapApiDemoMain.this,

R.layout.demo_info_item,null);TextViewtitle=(TextView)convertView.findViewById(R.id.title);TextViewdes

c=(TextView)convertView.findViewById(R.id.desc);title.setText(demos[index].title);desc.setText(demos[index]

.desc);if(index>=14&&index<=17){title.setTextColor(Color.YELLOW);}returnconvertView;}@OverridepublicintgetCount(){returndemos.length;

}@OverridepublicObjectgetItem(intindex){returndemos[index];}@OverridepubliclonggetItemId(intid){returnid;}}privatestaticclassDemoInfo{privat

efinalinttitle;privatefinalintdesc;privatefinalClass<?extendsandroid.app.Activity>demoClass;publicDemoInfo(i

nttitle,intdesc,Class<?extendsandroid.app.Activity>demoClass){this.title=title;this.desc=desc;this.d

emoClass=demoClass;}}}4.BusLineSearchDemo/*此demo用来展示如何进行公交线路详情检索,并使用RouteOverlay在地图上绘制同时展示如何浏览路线节点并弹出泡泡*/publicclassBusLine

SearchDemoextendsFragmentActivityimplementsOnGetPoiSearchResultListener,OnGetBusLineSearchResultListener,BaiduMap.OnMapClickListener{priv

ateButtonmBtnPre=null;//上一个节点privateButtonmBtnNext=null;//下一个节点privateintnodeIndex=-2;//节点索引供浏览节点时使用privateBus

LineResultroute=null;//保存驾车/步行路线数据的变量,供浏览节点时使用privateList<String>busLineIDList=null;privateintbusLineIndex=

0;//搜索相关privatePoiSearchmSearch=null;//搜索模块,也可去掉地图模块独立使用privateBusLineSearchmBusLineSearch=null;privateBaiduMapmBaidu

Map=null;protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_bu

sline);CharSequencetitleLable="公交线路查询功能";setTitle(titleLable);mBtnPre=(Button)findViewById(R.id.pre);mBtnNext=(Butto

n)findViewById(R.id.next);mBtnPre.setVisibility(View.INVISIBLE);mBtnNext.setVisibility(View.INVISIBLE);mBaiduMap=((SupportMapFragment)getSupp

ortFragmentManager().findFragmentById(R.id.bmapView)).getBaiduMap();mBaiduMap.setOnMapClickListener(this);

mSearch=PoiSearch.newInstance();mSearch.setOnGetPoiSearchResultListener(this);mBusLineSearch=BusLineSearch.newInstance();mBusLineSearch.setO

nGetBusLineSearchResultListener(this);busLineIDList=newArrayList<String>();}/*发起检索@paramv*/publicvoidsearchButtonProcess(Viewv)

{busLineIDList.clear();busLineIndex=0;mBtnPre.setVisibility(View.INVISIBLE);mBtnNext.setVisibility(View.INVIS

IBLE);EditTexteditCity=(EditText)findViewById(R.id.city);EditTexteditSearchKey=(EditText)findViewById(R.id.searchkey);//发起poi检索,从得到所有poi中找到公交线路

类型的poi,再使用该poi的uid进行公交详情搜索mSearch.searchInCity((newPoiCitySearchOption()).city(editCity.getText().toString()).keyword(editSearchKey.getText().toStrin

g()));}publicvoidSearchNextBusline(Viewv){if(busLineIndex>=busLineIDList.size()){busLineIndex=0;}if(busLineIndex>=0&&busL

ineIndex<busLineIDList.size()&&busLineIDList.size()>0){mBusLineSearch.searchBusLine((newBusLineSearchOption().city(((EditText)findViewById(

R.id.city)).getText().toString()).uid(busLineIDList.get(busLineIndex))));busLineIndex++;}}/*节点浏览示例@paramv*/pu

blicvoidnodeClick(Viewv){if(nodeIndex<-1||route==null||nodeIndex>=route.getStations().size())return;T

extViewpopupText=newTextView(this);popupText.setBackgroundResource(R.drawable.popup);popupText.setTextColor(0xff000000);//上一个节点if(mBtnPre

.equals(v)&&nodeIndex>0){//索引减nodeIndex--;}//下一个节点if(mBtnNext.equals(v)&&nodeIndex<(route.getStations().size()-1)){//索引加nodeInd

ex++;}//移动到指定索引的坐标mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(oute.getStations().get(nodeIndex).getLocation()));//弹出泡泡popupTex

t.setText(route.getStations().get(nodeIndex).getTitle());mBaiduMap.showInfoWindow(newInfoWindow(popupText,route.get

Stations().get(nodeIndex).getLocation(),null));}@OverrideprotectedvoidonPause(){super.onPause();}@OverrideprotectedvoidonResume(){super.o

nResume();}@OverrideprotectedvoidonDestroy(){mSearch.destroy();mBusLineSearch.destroy();super.onDestro

y();}@OverridepublicvoidonGetBusLineResult(BusLineResultresult){if(result==null||result.error!=SearchResult.ERR

ORNO.NO_ERROR){Toast.makeText(BusLineSearchDemo.this,"抱歉,未找到结果",Toast.LENGTH_LONG).show();return;}mBaiduMap.clear();route=result;nodeInde

x=-1;BusLineOverlayoverlay=newBusLineOverlay(mBaiduMap);mBaiduMap.setOnMarkerClickListener(overlay);overlay.setData(result);

overlay.addToMap();overlay.zoomToSpan();mBtnPre.setVisibility(View.VISIBLE);mBtnNext.setVisibility(View.VISIBLE);Toast.makeText(

BusLineSearchDemo.this,result.getBusLineName(),Toast.LENGTH_SHORT).show();}@OverridepublicvoidonGetPoiResult(PoiResultresu

lt){if(result==null||result.error!=SearchResult.ERRORNO.NO_ERROR){Toast.makeText(BusLineSearchDemo.this,"抱歉,未找到

结果",Toast.LENGTH_LONG).show();return;}//遍历所有poi,找到类型为公交线路的poibusLineIDList.clear();for(PoiInfopoi:result.getAllPoi(

)){if(poi.type==PoiInfo.POITYPE.BUS_LINE||poi.type==PoiInfo.POITYPE.SUBWAY_LINE){busLineIDList.add(poi.uid);}}

SearchNextBusline(null);route=null;}@OverridepublicvoidonGetPoiDetailResult(PoiDetailResultresult){}@Ove

rridepublicvoidonMapClick(LatLngpoint){mBaiduMap.hideInfoWindow();}@OverridepublicbooleanonMapPoiClick(MapPoi

poi){returnfalse;}}5.UISettingDemo//演示地图UI控制功能publicclassUISettingDemoextendsActivity{//MapView是地图主控件p

rivateMapViewmMapView;privateBaiduMapmBaiduMap;privateUiSettingsmUiSettings;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreat

e(savedInstanceState);setContentView(R.layout.activity_uisetting);mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();mUi

Settings=mBaiduMap.getUiSettings();MapStatusms=newMapStatus.Builder().overlook(-30).build();MapStatusUpdateu=MapStatusU

pdateFactory.newMapStatus(ms);mBaiduMap.animateMapStatus(u,1000);}*是否启用缩放手势*@paramvpublicvoidsetZoomEnable(Viewv){mUiSettings.

setZoomGesturesEnabled(((CheckBox)v).isChecked());}/*是否启用平移手势*@paramv*/publicvoidsetScrollEnable(Viewv){mUiSettings

.setScrollGesturesEnabled(((CheckBox)v).isChecked());}/*是否启用旋转手势*@paramv*/publicvoidsetRotateEnable(Viewv){mUiSettings.setRotateGesturesE

nabled(((CheckBox)v).isChecked());}*是否启用俯视手势*@paramvpublicvoidsetOverlookEnable(Viewv){mUiSettings.setOver

lookingGesturesEnabled(((CheckBox)v).isChecked());}*是否启用指南针图*@paramv*/publicvoidsetCompassEnable(Viewv){mUiSettings.setCompassEnabled

(((CheckBox)v).isChecked());}@OverrideprotectedvoidonPause(){//MapView的生命周期与Activity同步,当activity挂起时需调用Ma

pView.onPause()mMapView.onPause();super.onPause();}@OverrideprotectedvoidonResume(){//MapView的生命周期与Activity同

步,当activity恢复时需调用MapView.onResume()mMapView.onResume();super.onResume();}@OverrideprotectedvoidonDestroy(){//MapVie

w的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()mMapView.onDestroy();super.onDestroy();}}6.OverlayDemo/*演示覆盖物的用法*/publ

icclassOverlayDemoextendsActivity{/***MapView是地图主控件*/privateMapViewmMapView;privateBaiduMapmBaiduMap;privateMarkermMarkerA;private

Marke;rmMarkerB;privateMarkermMarkerC;privateMarkermMarkerD;privateInfoWindowmInfoWindow//初始化全局bitmap信息,不用时及时r

ecycleBitmapDescriptorbdA=BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);BitmapDescriptorbdB=BitmapDescript

orFactory.fromResource(R.drawable.icon_markb);BitmapDescriptorbdC=BitmapDescriptorFactory.fromResourc

e(R.drawable.icon_markc);BitmapDescriptorbdD=BitmapDescriptorFactory.fromResource(R.drawable.icon_markd);BitmapDesc

riptorbd=BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);BitmapDescriptorbdGround=BitmapDescriptorFactoryf(dbldl)@Overridepublic

voidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_overlay);mMapView=(MapView)f

indViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();MapStatusUpdatemsu=MapStatusUpdateFactory.zoomTo(14.0f);mBaid

uMap.setMapStatus(msu);initOverlay();mBaiduMap.setOnMarkerClickListener(newOnMarkerClickListener(){publicbooleanonMarkerClick(finalMa

rkermarker){Buttonbutton=newButton(getApplicationContext());button.setBackgroundResource(R.drawable.popup);finalLat

Lngll=marker.getPosition();Pointp=mBaiduMap.getProjection().toScreenLocation(ll);p.y-=47;LatLngllInfo=mBaiduMap.getP

rojection().fromScreenLocation(p);OnInfoWindowClickListenerlistener=null;if(marker==mMarkerA||marker==mM

arkerD){button.setText("更改位置");listener=newOnInfoWindowClickListener(){publicvoidonInfoWindowClick(){LatLngllNew=newLatLng(ll.latitude+0.005,ll.l

ongitude+0.005);marker.setPosition(llNew);mBaiduMap.hideInfoWindow();}};}elseif(marker==mMarkerB){button.setText("更改图标");list

ener=newOnInfoWindowClickListener(){publicvoidonInfoWindowClick(){marker.setIcon(bd);mBaiduMap.hideI

nfoWindow();}};}elseif(marker==mMarkerC){button.setText("删除");listener=newOnInfoWindowClickListener(){publicvoidonInfoWindowClick(){mark

er.remove();mBaiduMap.hideInfoWindow();}};}mInfoWindow=newInfoWindow(button,llInfo,listener);mBaiduMap.showInfoWindow(mInfoWindow);returntrue;

}});}publicvoidinitOverlay(){//addmarkeroverlayLatLngllA=newLatLng(39.963175,116.400244);LatLngllB=newLatLng(39.94282

1,116.369199);LatLngllC=newLatLng(39.939723,116.425541);LatLngllD=newLatLng(39.906965,116.401394);OverlayOptionsooA=newMarkerOp

tions().position(llA).icon(bdA).zIndex(9).draggable(true);mMarkerA=(Marker)(mBaiduMap.addOverlay(ooA));OverlayOptionsooB=newMarkerOptions().posit

ion(llB).icon(bdB).zIndex(5);mMarkerB=(Marker)(mBaiduMap.addOverlay(ooB));OverlayOptionsooC=newMarkerOptions().position(llC).icon(bdC).perspective(

false).anchor(0.5f,0.5f).rotate(30).zIndex(7);mMarkerC=(Marker)(mBaiduMap.addOverlay(ooC));OverlayOptionso

oD=newMarkerOptions().position(llD).icon(bdD).perspective(false).zIndex(7);mMarkerD=(Marker)(mBaiduMap

.addOverlay(ooD));/addgroundoverlayLatLngsouthwest=newLatLng(39.92235,116.380338);LatLngnortheast=newLatLng(39.947246,116.414977);La

tLngBoundsbounds=newLatLngBounds.Builder().include(northeast).include(southwest).build();OverlayOptionsooGround=newGroundOv

erlayOptions().positionFromBounds(bounds).image(bdGround).transparency(0.8f);mBaiduMap.addOverlay(ooGround);MapStatusUpdateu=M

apStatusUpdateFactory.newLatLng(bounds.getCenter());mBaiduMap.setMapStatus(u);mBaiduMap.setOnMarkerDragListen

er(newOnMarkerDragListener(){publicvoidonMarkerDrag(Markermarker){}publicvoidonMarkerDragEnd(Markermarker){Toast.makeText(Overl

ayDemo.this,"拖拽结束,新位置:"+marker.getPosition().latitude+","+marker.getPosition().longitude,Toast.LENGTH_LONG).show();}pub

licvoidonMarkerDragStart(Markermarker){}});}*清除所有Overlay*@paramview*/publicvoidclearOverlay(Viewview){mBaid

uMap.clear();}/***重新添加Overlay*@paramview*/publicvoidresetOverlay(Viewview){clearOverlay(null);initOverlay();}@OverrideprotectedvoidonPause(){//MapVie

w的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()mMapView.onPause();super.onPause();}@OverrideprotectedvoidonResume(){//Ma

pView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()mMapView.onResume();super.onResume();}@OverrideprotectedvoidonDestroy(){//MapV

iew的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()mMapView.onDestroy();super.onDestroy();//回收bitmap资源bdA.recycle

();bdB.recycle();bdC.recycle();bdD.recycle();bd.recycle();bdGround.recycle();}}

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?