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

PPT
  • 阅读 116 次
  • 下载 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.setT

rafficEnabled(true););(5)百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););(6)底图标注(指的是底图上面自带的那些POI元素);(7)几何图形图

层(点、折线、弧线、圆、多边形);(8)标注图层(Marker),文字绘制图层(Text);(9)指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);(10)定位图层(BaiduMap.setMyLocationEnabled(true););(11)弹出窗图层(Info

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

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

地图mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);3.实时交通图当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。在地图上打开实时路况的核心代码如下:mMapView=(MapView)findViewById(R.id.

bmapView);mBaiduMap=mMapView.getMap();//开启交通图mBaiduMap.setTrafficEnabled(true);4.百度城市热力图百度地图SDK继为广大开发者开放热力图本地绘制能力之后,再次进一步开放百度

自有数据的城市热力图层,帮助开发者构建形式更加多样的移动端应用。百度城市热力图的性质及使用与实时交通图类似,只需要简单的接口调用,即可在地图上展现样式丰富的百度城市热力图。在地图上开启百度城市热力图的核心代码如下:m

MapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();//开启热力图mBaiduMap.setBaiduHeatMapEnabled(true);5.标

注覆盖物为了能更方便的使用SPI模块,我们要对SPI模块进行构件化。只要良好地封装好每一个构件,在使用时就可以直接调用。出此之外,尤其是对同一芯片的移植非常有助于减少重复性写程序。开发者可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位

置上添加标注信息。具体实现方法如下:在地图上开启百度城市热力图的核心代码如下://定义Maker坐标点LatLngpoint=newLatLng(39.963175,116.400244);//构建Marker图标BitmapDescriptorbitmap=BitmapDescr

iptorFactory.fromResource(R.drawable.icon_marka);//构建MarkerOption,用于在地图上添加MarkerOverlayOptionsoption=newMarkerOptions().position(po

int).icon(bitmap);//在地图上添加Marker,并显示mBaiduMap.addOverlay(option);针对已经添加在地图上的标注,可采用如下方式进行手势拖拽:第一步,设置可拖拽:Ove

rlayOptionsoptions=newMarkerOptions().position(llA)//设置marker的位置.icon(bdA)//设置marker图标.zIndex(9)//设置mar

ker所在层级.draggable(true);//设置手势拖拽//将marker添加到地图上marker=(Marker)(mBaiduMap.addOverlay(options));第二步,设置监听方法://

调用BaiduMap对象的setOnMarkerDragListener方法设置marker拖拽的监听mBaiduMap.setOnMarkerDragListener(newOnMarkerDragListener(){publicvoidonMarkerDrag(Ma

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

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

57428);LatLngpt2=newLatLng(39.91923,116.327428);LatLngpt3=newLatLng(39.89923,116.347428);LatLngpt4=newLatLng(39.89923,116.367

428);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对象OverlayOptionspolygonOption=newPolygonOptions().points(pts).stroke(n

ewStroke(5,0xAA00FF00)).fillColor(0xAAFFFF00);//在地图上添加多边形Option,用于显示mBaiduMap.addOverlay(polygonOption)7.文字覆盖物文字,在地图中也是一种覆盖物,开发者可利用相关的接口,快速实现在地图上书写

文字的需求。实现方式如下://定义文字所显示的坐标点LatLngllText=newLatLng(39.86923,116.397428);//构建文字Option对象,用于在地图上添加文字OverlayOptionstextOption=newTextO

ptions().bgColor(0xAAFFFF00).fontSize(24).fontColor(0xFFFF00FF).text("百度地图SDK").rotate(-30).position(

llText);//在地图上添加该文字对象并显示mBaiduMap.addOverlay(textOption);8.弹出窗覆盖物弹出窗覆盖物的实现方式如下,开发者可利用此接口,构建具有更强交互性的地图页面。//创建InfoWind

ow展示的viewButtonbutton=newButton(getApplicationContext());button.setBackgroundResource(R.drawable.popup);//

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

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

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

中添加使用地形图覆盖物的方式如下://定义Ground的显示地理范围LatLngsouthwest=newLatLng(39.92235,116.380338);LatLngnortheast=newLatLn

g(39.947246,116.414977);LatLngBoundsbounds=newLatLngBounds.Builder().include(northeast).include(southwest).build();//定义Ground显示

的图片BitmapDescriptorbdGround=BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);//定义Ground覆盖物选项

OverlayOptionsooGround=newGroundOverlayOptions().positionFromBounds(bounds).image(bdGround).transparency(0.8f);//在地图中添加Ground覆盖物mB

aiduMap.addOverlay(ooGround);10.热力图功能热力图是用不同颜色的区块叠加在地图上描述人群分布、密度和变化趋势的一个产品,百度地图SDK将绘制热力图的能力为广大开发者开放,帮助开发者利用自有数据,构建属于

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

t[]DEFAULT_GRADIENT_START_POINTS={0.2f,1f};//构造颜色渐变对象Gradientgradient=newGradient(DEFAULT_GRADIENT_COLOR

S,DEFAULT_GRADIENT_START_POINTS);第二步,准备数据://以下数据为随机生成地理位置点,开发者根据自己的实际业务,传入自有位置数据即可List<LatLng>randomList=newArrayList<LatLng>();Rando

mr=newRandom();for(inti=0;i<500;i++){//116.220000,39.780000116.570000,40.150000intrlat=r.nextInt(370000);intrlng=r.nextIn

t(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信息(G

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

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

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

ude(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目录

添加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、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-permissionandroid:name="android.permission.IN

TERNET"/><uses-permissionandroid:name="android.permission.ACCES_MOCK_LOCATION"/><uses-permissionandroid:name="android.

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

rmissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.BROADCAST_STICKY"/><use

s-permissionandroid:name="android.permission.WRITE_SETTINGS"/><uses-permissionandroid:name="android.permission.PROCESS_OUTGOING_

CALLS"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>注意在AndroidManifest.xml中application标签下添加如下代码,“com

.baidu.lbsapi.API_KEY”中放入开发者申请的的APIKey。<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="bEDE2Ut8zsrZGa4p9caq4LNU"/><se

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

ngineInitSuccess=false;privateNaviEngineInitListenermNaviEngineInitListener=newNaviEngineInitListener(){pu

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

oidengineInitFail(){}};privateStringgetSdcardDir(){if(Environment.getExternalStorageState().equalsIgnoreCase(E

nvironment.MEDIA_MOUNTED)){returnEnvironment.getExternalStorageDirectory().toString();}returnnull;}publicvoidonCr

eate(BundlesaveInstance){super.onCreate(saveInstance);//初始化导航引擎BaiduNaviManager.getInstance().initEngine(this,ge

tSdcardDir(),mNaviEngineInitListener,"我的key",null);}第四步:配置导航页activity再新建一个activity,在Manifest中加入导航页的声明<activityandroid:name=".BNavigato

rActivity"android:configChanges="orientation|screenSize|keyboard|keyboardHidden"/>初始化导航页activity<sourcelang="java">//导航监

听器privateIBNavigatorListenermBNavigatorListener=newIBNavigatorListener(){@OverridepublicvoidonYawingRequestSu

ccess(){//TODO偏航请求成功}@OverridepublicvoidonYawingRequestStart(){//TODO开始偏航请求}@OverridepublicvoidonPageJump(intjumpTiming,Objectarg){//TOD

O页面跳转回调if(IBNavigatorListener.PAGE_JUMP_WHEN_GUIDE_END==jumpTiming){finish();}elseif(IBNavigatorListener.PAGE_JUMP_WHEN_

ROUTE_PLAN_FAIL=jumpTiming){finish();}}@OverridepublicvoidnotifyGPSStatusData(intarg0){//TODOAuto-gener

atedmethodstub}@OverridepublicvoidnotifyLoacteData(LocDataarg0){//TODOAuto-generatedmethodstub}@Overridepublicvoidnotify

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

//TODOAuto-generatedmethodstub}@OverridepublicvoidnotifyStartNav(){//TODOAuto-generatedmethodstubBaiduNaviManager.getInstance().dismissWaitProgres

sDialog();}@OverridepublicvoidnotifyViewModeChanged(intarg0){//TODOAuto-generatedmethodstub}};publicvoidonCr

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

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

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

avigatorListener);BNavigator.getInstance().startNav();•//初始化TTS.开发者也可以使用独立TTS模块,不用使用导航SDK提供的TTSBNTTS

Player.initPlayer();//设置TTS播放回调BNavigatorTTSPlayer.setTTSPlayerListener(newIBNTTSPlayerListener(){@OverridepublicintplayTTSTex

t(Stringarg0,intarg1){//开发者可以使用其他TTS的APIreturnBNTTSPlayer.playTTSText(arg0,arg1);}BNRoutePlaner.getInstance().setObserve

r(newRoutePlanObserver(this,newIJumpToDownloadListener(){@OverridepublicvoidonJumpToDownloadOfflineData(){//TODOAuto-gener

atedmethodstub}}));}重写如下方法,管理API:@OverridepublicvoidonResume(){BNavigator.getInstance().resume();super.onResume();BNMapController.get

Instance().onResume();};@OverridepublicvoidonPause(){BNavigator.getInstance().pause();super.onPause();BNMapController.getInst

ance().onPause();}@OverridepublicvoidonConfigurationChanged(ConfigurationnewConfig){BNavigator.getInstance().onConfigurationChanged(n

ewConfig);super.onConfigurationChanged(newConfig);}publicvoidonBackPressed(){BNavigator.getInstance().o

nBackPressed();}@OverridepublicvoidonDestroy(){BNavigator.destory();BNRoutePlaner.getInstance().setObserver(null);super.onDestro

y();}第五步:在导航初始化成功后,在第三个activityRouteGuideDemo中输入起始点,发起导航BaiduNaviManager.getInstance().launchNavigator(this,40.0508

7,116.30142,"百度大厦",39.90882,116.39750,"北京天安门",NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,//算路方式true,//真实导航BaiduNaviManager.STRATEGY_FORCE_ONLINE_

PRIORITY,//在离线策略newOnStartNavigationListener(){//跳转监听@OverridepublicvoidonJumpToNavigator(BundleconfigParams){Intentintent=newI

ntent(RouteGuideDemo.this,BNavigatorActivity.class);intent.putExtras(configParams);startActivity(intent);}@Overridepublic

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

07854,40.055878,"百度大厦",BNaviPoint.CoordinateType.BD09_MC);BNaviPointendPoint=newBNaviPoint(116.403875,39.915168,"北京天安门",BNaviPoint.Coordinat

eType.BD09_MC);BaiduNaviManager.getInstance().launchNavigator(this,startPoint,//起点(可指定坐标系)endPoint,//终点(可指定坐标系)NE_RoutePlan_Mode.

ROUTE_PLAN_MOD_MIN_TIME,//算路方式true,//真实导航BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY,newOnStartNavigationListener(){…}//跳转

监听);}或者增加一个或者多个途经点(最多三个),根据导航点列表来发起一键导航,privatevoidlaunchNavigatorViaPoints(){List<BNaviPoint>points=newArrayList<BNaviPoint>();points.add(mSta

rtPoint);points.addAll(mViaPoints);points.add(mEndPoint);BaiduNaviManager.getInstance().launchNavigator(this,points,//路

线点列表NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,//算路方式true,//真实导航BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY,newOnStartNavigationLis

tener(){…}//跳转监听);}10.4实训项目:实现基本地图功能和公交线路查询10.4.1任务说明1.基本地图功能创建一张百度地图并管理地图的生命周期。2.地图操作功能介绍地图基本控制方法。3.UI控制功能介绍

开关手势功能和显示隐藏UI控件。4.自定义绘制功能介绍自定义绘制点、线、多边形、圆等几何图形和文字。5.公交线路查询功能介绍查询公交线路功能10.4.2代码实现•1.主要程序结构。2.DemoApplicationpublicclassDemoApplication

extendsApplication{@OverridepublicvoidonCreate(){super.onCreate();//在使用SDK各组间之前初始化context信息,传入ApplicationContextSDKInitializer.

initialize(this);}}3.BMapApiDemoMainpublicclassBMapApiDemoMainextendsActivity{privatestaticfinalStringLTAG=BMapApiDemoMain.

class.getSimpleName();//构造广播监听类,监听SDKkey验证以及网络异常广播publicclassSDKReceiverextendsBroadcastReceiver{publicvoidonReceive(Contextcontext,

Intentintent){Strings=intent.getAction();Log.d(LTAG,"action:"+s);TextViewtext=(TextView)findViewById(R.id.text_Info);text.setTextCol

or(Color.RED);if(s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)){text.setText("key验证出错!请在AndroidManifest.x

ml文件中检查key设置");}elseif(s.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)){text.setText("网络出错");}}}privateSDKReceivermReceiver;@Over

ridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main)

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

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

setAdapter(newDemoListAdapter());mListView.setOnItemClickListener(newOnItemClickListener(){publicvoidonItemClick(AdapterView<?>arg0

,Viewv,intindex,longarg3){onListItemClick(index);}});//注册SDK广播监听者IntentFilteriFilter=newIntentFilter();iFilter.addAction(SDKInitializer.SDK

_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);mReceiver=newSD

KReceiver();registerReceiver(mReceiver,iFilter);}voidonListItemClick(intindex){Intentintent=null;intent=newIntent(BMapApiDemoMai

n.this,demos[index].demoClass);this.startActivity(intent);}privatestaticfinalDemoInfo[]demos={newDemoInfo(R.string.de

mo_title_basemap,R.string.demo_desc_basemap,BaseMapDemo.classnewDemoInfo(R.string.demo_title_map_fragment,R.string.demo_desc_map_fr

agment,MapFragmentDemo.class),newDemoInfo(R.string.demo_title_multimap,R.string.demo_desc_multimap,Mu

ltiMapViewDemo.class),newDemoInfo(R.string.demo_title_layers,R.string.demo_desc_layers,LayersDemo.class),newDemoInfo(R.string.demo_title_contr

ol,R.string.demo_desc_control,MapControlDemo.class),@OverrideprotectedvoidonResume(){super.onResume();}@OverrideprotectedvoidonDestroy(

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

tAdapter(){super();}@OverridepublicViewgetView(intindex,ViewconvertView,ViewGroupparent){convertView=View.inflate(BMapA

piDemoMain.this,R.layout.demo_info_item,null);TextViewtitle=(TextView)convertView.findViewById(R.id.title);TextViewdesc=(TextView)convertV

iew.findViewById(R.id.desc);title.setText(demos[index].title);desc.setText(demos[index].desc);if(index>=14&&index<=17){title.set

TextColor(Color.YELLOW);}returnconvertView;}@OverridepublicintgetCount(){returndemos.length;}@Overridepubl

icObjectgetItem(intindex){returndemos[index];}@OverridepubliclonggetItemId(intid){returnid;}}privatestaticclassDemoInfo{privatefinalinttitle;priva

tefinalintdesc;privatefinalClass<?extendsandroid.app.Activity>demoClass;publicDemoInfo(inttitle,intdesc,Class<?extendsandroid.app.Activity>demoClass)

{this.title=title;this.desc=desc;this.demoClass=demoClass;}}}4.BusLineSearchDemo/*此demo用来展示如何进行公交线路详情检索,并使用RouteOv

erlay在地图上绘制同时展示如何浏览路线节点并弹出泡泡*/publicclassBusLineSearchDemoextendsFragmentActivityimplementsOnGetPoiSearchResultListener

,OnGetBusLineSearchResultListener,BaiduMap.OnMapClickListener{privateButtonmBtnPre=null;//上一个节点privateButtonmBtnNext=nu

ll;//下一个节点privateintnodeIndex=-2;//节点索引供浏览节点时使用privateBusLineResultroute=null;//保存驾车/步行路线数据的变量,供浏览节点时使用privateList

<String>busLineIDList=null;privateintbusLineIndex=0;//搜索相关privatePoiSearchmSearch=null;//搜索模块,也可去掉地图模块独立使用privateBusLineSearchmBu

sLineSearch=null;privateBaiduMapmBaiduMap=null;protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceS

tate);setContentView(R.layout.activity_busline);CharSequencetitleLable="公交线路查询功能";setTitle(titleLable);mBtnPre=(Button)findViewById(R.id.pre);mBt

nNext=(Button)findViewById(R.id.next);mBtnPre.setVisibility(View.INVISIBLE);mBtnNext.setVisibility(View.INVISIBLE);mBaiduMap=((SupportMap

Fragment)getSupportFragmentManager().findFragmentById(R.id.bmapView)).getBaiduMap();mBaiduMap.setOnMapClickListener(this);mSear

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

wInstance();mBusLineSearch.setOnGetBusLineSearchResultListener(this);busLineIDList=newArrayList<String>();}/*发

起检索@paramv*/publicvoidsearchButtonProcess(Viewv){busLineIDList.clear();busLineIndex=0;mBtnPre.setVisibility(View.INVISIBLE);mBtnNext.s

etVisibility(View.INVISIBLE);EditTexteditCity=(EditText)findViewById(R.id.city);EditTexteditSearchKey=(EditText)fin

dViewById(R.id.searchkey);//发起poi检索,从得到所有poi中找到公交线路类型的poi,再使用该poi的uid进行公交详情搜索mSearch.searchInCity((new

PoiCitySearchOption()).city(editCity.getText().toString()).keyword(editSearchKey.getText().toString()));}publicvoidSearchN

extBusline(Viewv){if(busLineIndex>=busLineIDList.size()){busLineIndex=0;}if(busLineIndex>=0&&busLineIndex<busLineID

List.size()&&busLineIDList.size()>0){mBusLineSearch.searchBusLine((newBusLineSearchOption().city(((EditText)findViewById(R.id.city)).getText().to

String()).uid(busLineIDList.get(busLineIndex))));busLineIndex++;}}/*节点浏览示例@paramv*/publicvoidnodeClick(Viewv){if(nodeIndex<-1||route==null||nodeInd

ex>=route.getStations().size())return;TextViewpopupText=newTextView(this);popupText.setBackgroundResource(R.drawab

le.popup);popupText.setTextColor(0xff000000);//上一个节点if(mBtnPre.equals(v)&&nodeIndex>0){//索引减nodeIndex--

;}//下一个节点if(mBtnNext.equals(v)&&nodeIndex<(route.getStations().size()-1)){//索引加nodeIndex++;}//移动到指定索引的坐标mBaiduMap.setMapStatus(MapStatusUpdateFac

tory.newLatLng(oute.getStations().get(nodeIndex).getLocation()));//弹出泡泡popupText.setText(route.getStations().get(no

deIndex).getTitle());mBaiduMap.showInfoWindow(newInfoWindow(popupText,route.getStations().get(nodeIndex).getLocation(),null));}@Overrideprotec

tedvoidonPause(){super.onPause();}@OverrideprotectedvoidonResume(){super.onResume();}@OverrideprotectedvoidonDestr

oy(){mSearch.destroy();mBusLineSearch.destroy();super.onDestroy();}@OverridepublicvoidonGetBusLineResul

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

st.LENGTH_LONG).show();return;}mBaiduMap.clear();route=result;nodeIndex=-1;BusLineOverlayoverlay=newBusLine

Overlay(mBaiduMap);mBaiduMap.setOnMarkerClickListener(overlay);overlay.setData(result);overlay.addToMap();overlay.zoomToSpan();mBtnPre.setVisibi

lity(View.VISIBLE);mBtnNext.setVisibility(View.VISIBLE);Toast.makeText(BusLineSearchDemo.this,result.getBusLi

neName(),Toast.LENGTH_SHORT).show();}@OverridepublicvoidonGetPoiResult(PoiResultresult){if(result==null||result.error!=SearchResu

lt.ERRORNO.NO_ERROR){Toast.makeText(BusLineSearchDemo.this,"抱歉,未找到结果",Toast.LENGTH_LONG).show();return;}//遍历所有poi,找到类型为公交线路的poibusLineID

List.clear();for(PoiInfopoi:result.getAllPoi()){if(poi.type==PoiInfo.POITYPE.BUS_LINE||poi.type==PoiInfo.POITYP

E.SUBWAY_LINE){busLineIDList.add(poi.uid);}}SearchNextBusline(null);route=null;}@OverridepublicvoidonGetPoiDetailResult(Poi

DetailResultresult){}@OverridepublicvoidonMapClick(LatLngpoint){mBaiduMap.hideInfoWindow();}@OverridepublicbooleanonMapPoiCli

ck(MapPoipoi){returnfalse;}}5.UISettingDemo//演示地图UI控制功能publicclassUISettingDemoextendsActivity{//MapView是地图主控件privateMapViewmMapVie

w;privateBaiduMapmBaiduMap;privateUiSettingsmUiSettings;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);

setContentView(R.layout.activity_uisetting);mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapVi

ew.getMap();mUiSettings=mBaiduMap.getUiSettings();MapStatusms=newMapStatus.Builder().overlook(-30).build();MapStatusUpdateu=MapStatusUpd

ateFactory.newMapStatus(ms);mBaiduMap.animateMapStatus(u,1000);}*是否启用缩放手势*@paramvpublicvoidsetZoomEnable(Vi

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

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

ngs.setRotateGesturesEnabled(((CheckBox)v).isChecked());}*是否启用俯视手势*@paramvpublicvoidsetOverlookEnable(Viewv){mUi

Settings.setOverlookingGesturesEnabled(((CheckBox)v).isChecked());}*是否启用指南针图*@paramv*/publicvoidsetCompassEnable(Viewv){m

UiSettings.setCompassEnabled(((CheckBox)v).isChecked());}@OverrideprotectedvoidonPause(){//MapView的生命周期与A

ctivity同步,当activity挂起时需调用MapView.onPause()mMapView.onPause();super.onPause();}@OverrideprotectedvoidonResume(){//Ma

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

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

assOverlayDemoextendsActivity{/***MapView是地图主控件*/privateMapViewmMapView;privateBaiduMapmBaiduMap;privateMarkerm

MarkerA;privateMarke;rmMarkerB;privateMarkermMarkerC;privateMarkermMarkerD;privateInfoWindowmInfoWind

ow//初始化全局bitmap信息,不用时及时recycleBitmapDescriptorbdA=BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);BitmapDescriptorbdB=

BitmapDescriptorFactory.fromResource(R.drawable.icon_markb);BitmapDescriptorbdC=BitmapDescriptorFactory.fromResource(R.drawable.icon_m

arkc);BitmapDescriptorbdD=BitmapDescriptorFactory.fromResource(R.drawable.icon_markd);BitmapDescriptorbd

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

publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.ac

tivity_overlay);mMapView=(MapView)findViewById(R.id.bmapView);mBaiduMap=mMapView.getMap();MapStatusUpdatemsu=MapStatusUpdateFactory.zoomTo(14

.0f);mBaiduMap.setMapStatus(msu);initOverlay();mBaiduMap.setOnMarkerClickListener(newOnMarkerClickListener(){publicbooleanonMarkerClick

(finalMarkermarker){Buttonbutton=newButton(getApplicationContext());button.setBackgroundResource(R.drawable.popup);finalLatLngll=marker.getP

osition();Pointp=mBaiduMap.getProjection().toScreenLocation(ll);p.y-=47;LatLngllInfo=mBaiduMap.getProjection().fromScreenL

ocation(p);OnInfoWindowClickListenerlistener=null;if(marker==mMarkerA||marker==mMarkerD){button.setText("更改位置");listener=newOnInfoWindowClick

Listener(){publicvoidonInfoWindowClick(){LatLngllNew=newLatLng(ll.latitude+0.005,ll.longitude+0.005);marker.setPositio

n(llNew);mBaiduMap.hideInfoWindow();}};}elseif(marker==mMarkerB){button.setText("更改图标");listener=newO

nInfoWindowClickListener(){publicvoidonInfoWindowClick(){marker.setIcon(bd);mBaiduMap.hideInfoWindow();}};}elseif(marker==mMarker

C){button.setText("删除");listener=newOnInfoWindowClickListener(){publicvoidonInfoWindowClick(){marker.rem

ove();mBaiduMap.hideInfoWindow();}};}mInfoWindow=newInfoWindow(button,llInfo,listener);mBaiduMap.showInfoWindow(mInfoWindow)

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

g(39.942821,116.369199);LatLngllC=newLatLng(39.939723,116.425541);LatLngllD=newLatLng(39.906965,116.401394);OverlayOption

sooA=newMarkerOptions().position(llA).icon(bdA).zIndex(9).draggable(true);mMarkerA=(Marker)(mBaiduMap.add

Overlay(ooA));OverlayOptionsooB=newMarkerOptions().position(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)(mB

aiduMap.addOverlay(ooC));OverlayOptionsooD=newMarkerOptions().position(llD).icon(bdD).perspective(false).zIndex(7);mMarkerD=(Mark

er)(mBaiduMap.addOverlay(ooD));/addgroundoverlayLatLngsouthwest=newLatLng(39.92235,116.380338);LatLngnorthe

ast=newLatLng(39.947246,116.414977);LatLngBoundsbounds=newLatLngBounds.Builder().include(northeast).in

clude(southwest).build();OverlayOptionsooGround=newGroundOverlayOptions().positionFromBounds(bounds).image(bdGround).transparency(0.8f)

;mBaiduMap.addOverlay(ooGround);MapStatusUpdateu=MapStatusUpdateFactory.newLatLng(bounds.getCenter());mBai

duMap.setMapStatus(u);mBaiduMap.setOnMarkerDragListener(newOnMarkerDragListener(){publicvoidonMarkerDrag(Markermarker){}publicvoidonMarkerDragEnd(

Markermarker){Toast.makeText(OverlayDemo.this,"拖拽结束,新位置:"+marker.getPosition().latitude+","+marker.getPosition().longitude,Toast.LENGTH_LONG).sh

ow();}publicvoidonMarkerDragStart(Markermarker){}});}*清除所有Overlay*@paramview*/publicvoidclearOverlay(Viewview){mBaiduMap.clear

();}/***重新添加Overlay*@paramview*/publicvoidresetOverlay(Viewview){clearOverlay(null);initOverlay();}@OverrideprotectedvoidonPause(){//MapView的生命周期与Ac

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

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

销毁时需调用MapView.destroy()mMapView.onDestroy();super.onDestroy();//回收bitmap资源bdA.recycle();bdB.recycle();bdC.recycle();bdD.recycle();b

d.recycle();bdGround.recycle();}}

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