当前位置: 网学 > 编程文档 > Android > 正文

Baidu map(百度地图)Android平台开发指南

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员为需要朋友们搜集整理了Baidu map(百度地图)Android平台开发指南相关资料,希望对各位网友有所帮助!


    Baidumap(百度地图百度地图)Android平台开发指南平台/开发指南百度地图目录
    [
    ???oooo?oooooo?oooooo?oo
    1简介2基础知识3地图图层3.1底图3.2实时交通信息3.3卫星图3.4实景图4覆盖物4.1覆盖物的抽象基类:Overlay4.2当前位置:MyLocationOverlay4.3分条目覆盖物:ItemizedOverlay4.4本地搜索覆盖物:PoiOverlay4.5驾车路线覆盖物:RouteOverlay4.6换乘路线覆盖物:TransitOverlay5服务类5.1搜索服务5.2POI搜索及PoiOverlay5.3驾车路线搜索及RouteOverlay5.4步行路线搜索及RouteOverlay5.5公交换乘路线搜索及TransitOverlay5.6地址信息查询6事件6.1定位监听6.2一般事件监听
    简介
    什么是百度地图API??百度地图移动版API(Android)是一套基于Android1.5及以上设备的应用程序接口,通过该接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。百度地图移动版API不仅包含构建地图的基本接口,还提供了诸如地图定位、本地搜索、路线规划等数据服务,你可以根据自己的需要进行选择。面向的读者
     API是提供给那些具有一定Android编程经验和了解面向对象概念的读者使用。此外,读者还应该对地图产品有一定的了解。您在使用中遇到任何问题,都可以通过API贴吧或交流群反馈给我们。获取APIKey用户在使用API之前需要获取百度地图移动版APIKey,该Key与你的百度账户相关联,您必须先有百度帐户,才能获得APIKEY。并且,该KEY与您引用API的程序名称有关,具体流程请参照获取密钥。兼容性支持Android1.5及以上系统。
    基础知识
    工程中?如何把API添加到我的Andoid工程中?首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,并在工程属性->JavaBuildPath->Libraries中选择“AddJARs”,选定baidumapapi.jar,确定后返回,这样您就可以在您的程序中使用API了。百度地图的“Hello,World”百度地图的在Manifest中添加使用权限1.2.3.4.5.6.7.在Manifest中添加Android版本支持0.    eensandroid:largeScreens="true"
    1.2.3.
    android:normalScreens="true"android:smallScreens="true"android:resizeable="true"android:anyDensity="true"/>
     让创建的地图Activity继承com.baidu.mapapi.MapActivity,并import相关类0.importjava.util.ArrayList;
    1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.
    importjava.util.List;
    importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.graphics.Point;importandroid.graphics.drawable.Drawable;importandroid.location.Location;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.View;importandroid.widget.Toast;
    importcom.baidu.mapapi.BMapManager;importcom.baidu.mapapi.GeoPoint;importcom.baidu.mapapi.ItemizedOverlay;importcom.baidu.mapapi.LocationListener;importcom.baidu.mapapi.MKAddrInfo;importcom.baidu.mapapi.MKDrivingRouteResult;importcom.baidu.mapapi.MKGeneralListener;importcom.baidu.mapapi.MKLocationManager;importcom.baidu.mapapi.MKPlanNode;importcom.baidu.mapapi.MKPoiResult;importcom.baidu.mapapi.MKSearch;importcom.baidu.mapapi.MKSearchListener;importcom.baidu.mapapi.MKTransitRouteResult;importcom.baidu.mapapi.MKWalkingRouteResult;importcom.baidu.mapapi.MapActivity;importcom.baidu.mapapi.MapController;importcom.baidu.mapapi.MapView;importcom.baidu.mapapi.MyLocationOverlay;importcom.baidu.mapapi.Overlay;importcom.baidu.mapapi.OverlayItem;importcom.baidu.mapapi.PoiOverlay;importcom.baidu.mapapi.RouteOverlay;importcom.baidu.mapapi.TransitOverlay;
    publicclassMyMapActivityextendsMapActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){
     41.42.43.44.45.46.47.48.49.}}}
    super.onCreate(savedInstanceState);setContentView(R.layout.main);
    @OverrideprotectedbooleanisRouteDisplayed(){returnfalse;
    在布局xml中添加地图控件0.
    1.oid"2.
        3.4.5.
    android:layout_height="fill_parent">
    6.7.
        8.9.初始化地图Activity
    android:clickable="true"/>
    在地图Activity中定义变量:BMapManagermBMapMan=null;在onCreate方法中增加以下代码,并将您申请的Key替换“我的Key”:
    0.
    mBMapMan=newBMapManager(getApplication());
    1.2.3.4.5.6.
    mBMapMan.init("我的Key",null);super.initMapActivity(mBMapMan);
    MapViewmMapView=(MapView)findViewById(R.id.bmapsView);mMapView.setBuiltInZoomControls(true);//
    设置启用内置的缩放控件
     7.
    MapControllermMapController=mMapView.getController();//得到mMapView的控制权,可以用它控制和驱动平移和缩放
    8.9.
    GeoPointpoint=newGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));//用给定的经纬度构造一个GeoPoint,单位是微
    度(度*1E6)
    10.11.mMapController.setCenter(point);//设置地图中心点mMapController.setZoom(12);//设置地图zoom级别
    Override以下方法,管理API:
    12.
    @Override
    13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.
    protectedvoidonDestroy(){if(mBMapMan!=null){mBMapMan.destroy();mBMapMan=null;}super.onDestroy();}@OverrideprotectedvoidonPause(){if(mBMapMan!=null){mBMapMan.stop();}super.onPause();}@OverrideprotectedvoidonResume(){if(mBMapMan!=null){mBMapMan.start();}super.onResume();}
     完成上述步骤后,运行程序,结果如下:
    地图图层
    地图图层概念地图可以包含一个或多个图层,每个图层在每个级别都是由若干张图块组成的,它们覆盖了地球的整个表面。例如您所看到包括街道、兴趣点、、公园等内容的地图展现就是一个图层,另外交通流量的展现也是通过图层来实现的。
    底图
    基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、、公园等内容。
    实时交通信息
    在以下11个城市中,支持实时交通信息:北京,上海,广州,深圳,南京,南昌,成都,重庆,武汉,大连,常州。在地图中显示实时交通信息示例如下:
    1.
    mMapView.setTraffic(true);
     运行程序,结果如下:
    卫星图
    在此版本API中暂不支持。
    1.
    mMapView.setSatellite(true);
    实景图
    在此版本API中暂不支持。
    1.
    mMapView.setStreetView(true);
    覆盖物
    地图覆盖物概述所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线和多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。地图API提供了如下几种覆盖物:Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。MyLocationOverlay:一个负责显示用户当前位置的Overlay。ItemizedOverlay:Overlay的一个基类,包含了一个OverlayItem列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。PoiOverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“公园”,通过此图层将公园显示在地图上。RouteOverlay:步行、驾车导航线路图层,将步行、驾车出行方案的路线及关键点显示在地图上。TransitOverlay:公交换乘线路图层,将某一特定地区
    的公交出行方案的路线及换乘位置显示在地图上。
    覆盖物的抽象基类:覆盖物的抽象基类:Overlay
    一般来说,在MapView中添加一个Overlay需要经过以下步骤:
     自定义类继承Overlay,并Override其draw()方法,如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。1.publicclassMyOverlayextendsOverlay{
    2.
    GeoPointgeoPoint=newGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));
    3.4.5.6.7.8.l);9.10.11.}
    Paintpaint=newPaint();
    @Overridepublicvoiddraw(Canvascanvas,MapViewmapView,booleanshadow){//在天安门的位置绘制一个StringPointpoint=mMapView.getProjection().toPixels(geoPoint,nul
    canvas.drawText("★这里是天安门",point.x,point.y,paint);}
    添加到MapView的覆盖物中:
    12.
    mMapView.getOverlays().add(newMyOverlay());
    运行结果如下:
    当前位置:当前位置:MyLocationOverlay
    将MyLocationOverlay添加到覆盖物中,能够实现在地图上显示当前位置的图标以及指南针:初始化Location模块1.//初始化Location模块
    2.3.4.
    mLocationManager=mBMapMan.getLocationManager();//通过enableProvider和disableProvider方法,选择定位的Provider//mLocationManager.enableProvider(MKLocationManager.MK_NETWORK_PROVIDER);
    5.R);6.7.
    //mLocationManager.disableProvider(MKLocationManager.MK_GPS_PROVIDE//添加定位图层MyLocationOverlaymylocTest=newMyLocationOverlay(this,mMapView);
     8.9.10.
    mylocTest.enableMyLocation();//启用定位mylocTest.enableCompass();//启用指南针
    mMapView.getOverlays().add(mylocTest);
    运行结果如下:
    分条目覆盖物:分条目覆盖物:ItemizedOverlay
    某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类:自定义类继承ItemizedOverlay,Override其draw()方法,并如果需要点击、按键、触摸等交互操作,还需OverrideonTap()等方法。1.classOverItemTextendsItemizedOverlay{
    2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.1E6));21.1E6));
    privateListGeoList=newArrayList();privateContextmContext;privatedoublemLat1=39.90923;//39.9022;//point1纬度privatedoublemLon1=116.397428;//116.3822;//point1经度
    privatedoublemLat2=39.9022;privatedoublemLon2=116.3922;
    privatedoublemLat3=39.917723;privatedoublemLon3=116.3722;
    publicOverItemT(Drawablemarker,Contextcontext){super(boundCenterBottom(marker));
    this.mContext=context;//用给定的经纬度构造GeoPoint,单位是微度(度*1E6)GeoPointp1=newGeoPoint((int)(mLat1*1E6),(int)(mLon1*
    GeoPointp2=newGeoPoint((int)(mLat2*1E6),(int)(mLon2*
     22.1E6));23.24.25.26.27.
    GeoPointp3=newGeoPoint((int)(mLat3*1E6),(int)(mLon3*
    GeoList.add(newOverlayItem(p1,"P
    1","point1"));GeoList.add(newOverlayItem(p2,"P2","point2"));GeoList.add(newOverlayItem(p3,"P3","point3"));populate();//createItem(int)方法构造item。一旦有了数据,在调用其它
    方法前,首先调用这个方法
    28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.}}@Override//处理当点击事件protectedbooleanonTap(inti){Toast.makeText(this.mContext,GeoList.get(i).getSnippet(),Toast.LENGTH_SHORT).show();returntrue;}@Overridepublicintsize(){returnGeoList.size();}@OverrideprotectedOverlayItemcreateItem(inti){returnGeoList.get(i);}
    添加到MapView的覆盖物中:
    48.
    Drawablemarker=getResources().getDrawable(R.drawable.iconmark);/得到需要标在地图上的资源
    /
    49.
    mMapView.getOverlays().add(newOverItemT(marker,this));//添加ItemizedOverlay实例到mMapView
     点击其中一个图标,运行结果如下:
    本地搜索覆盖物:本地搜索覆盖物:PoiOverlay
    详见详见在POI搜索及PoiOverlay。
    驾车路线覆盖物:驾车路线覆盖物:RouteOverlay
    详见详见在驾车路线搜索及RouteOverlay和步行路线搜索及RouteOverlay。
    换乘路线覆盖物:TransitOverlay换乘路线覆盖物:
    详见详见在公交换乘路线搜索及TransitOverlay。
    服务类搜索服务
    百度地图移动版API集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索,通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener,实现异步搜索服务。首先自定义MySearchListener实现MKSearchListener接口,通过不同的回调方法,获得搜索结果:
    1.
    publicclassMySearchListenerimplementsMKSearchListener{
    2.3.4.5.6.7.
    @OverridepublicvoidonGetAddrResult(MKAddrInforesult,intiError){}
    @OverridepublicvoidonGetDrivingRouteResult(MKDrivingRouteResultresult,intiError){
    8.9.10.11.r){12.13.14.15.
    }
    @OverridepublicvoidonGetPoiResult(MKPoiResultresult,inttype,intiErro
    }
    @OverridepublicvoidonGetTransitRouteResult(MKTransitRouteResultresult,intiError){
    16.
    }
     17.18.19.@OverridepublicvoidonGetWalkingRouteResult(MKWalkingRouteResultresult,intiError){20.21.}}
    然后初始化MKSearch类:
    1.
    mMKSearch=newMKSearch();
    2.
    mMKSearch.init(mBMapMan,newMySearchListener());
    POI搜索及PoiOverlay
    POI搜索有三种方式,根据范围和检索词发起范围检索poiSearchInbounds,城市poi检索poiSearchInCity,周边检索poiSearchNearBy,以下以周边检索为例介绍如何进行检索并显示覆盖物PoiOverlay:检索天安门周边5000米之内的KFC餐厅:1.mMKSearch.poiSearchNearBy("KFC",newGeoPoint((int)(39.915*1E6),
    (int)(116.404*1E6)),5000);实现MySearchListener的onGetPoiResult,并展示检索结果:0.@Override
    1.{2.3.4.5.ew);6.7.8.
    publicvoidonGetPoiResult(MKPoiResu
    ltresult,inttype,intiError)
    if(result==null){return;}PoiOverlaypoioverlay=newPoiOverlay(MyMapActivity.this,mMapVi
    poioverlay.setData(result.getAllPoi());mMapView.getOverlays().add(poioverlay);}
     运行结果如下:
    驾车路线搜索及RouteOverlay
    检索从天安门到百度大厦的驾车路线:1.MKPlanNodestart=newMKPlanNode();
    2.3.4.5.6.7.
    start.pt=newGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));MKPlanNodeend=newMKPlanNode();end.pt=newGeoPoint(40057031,116307852);//设置驾车路线搜索策略,时间优先、费用最少或距离最短mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);mMKSearch.drivingSearch(null,start,null,end);实现MySearchListener的onGetDrivingRouteResult,并展示检索结果:
    0.
    @Override
    1.
    publicvoidonGetDrivingRouteResult(MKDrivingRouteResultresult,intiError){
     2.3.4.5.
    if(result==null){return;}RouteOverlayrouteOverlay=newRouteOverlay(MyMapActivity.this,mMapView);//此处仅展示一个方案作为示例routeOverlay.setData(result.getPlan(0).getRoute(0));mMapView.getOverlays().add(routeOverlay);}
    6.7.8.9.
    运行结果如下:
    步行路线搜索及RouteOverlay
    方式与驾车路线搜索类似,只需将mMKSearch.drivingSearch(null,start,null,end)修改为mMKSearch.walkingSearch(null,start,null,end),实现的方法改为onGetWalkingRouteResult即可,不再赘述。
    公交换乘路线搜索及TransitOverlay
    检索从天安门到百度大厦的公交换乘路线:
     1.
    MKPlanNodestart=newMKPlanNode();
    2.3.4.5.6.7.
    start.pt=newGeoPoint((int)(39.915*1E6),(int)(116.404*1E6));MKPlanNodeend=newMKPlanNode();end.pt=newGeoPoint(40057031,116307852);//设置乘车路线搜索策略,时间优先、最少换乘、最少步行距离或不含地铁mMKSearch.setTransitPolicy(MKSearch.EBUS_TRANSFER_FIRST);mMKSearch.transitSearch("北京",start,end);//必须设置城市名实现MySearchListener的onGetTransitRouteResult(MKTransitRouteResult,int),并展示检索结
    果:0.@Override
    1.
    publicvoidonGetTransitRouteResult(MKTransitRouteResultresult,intiError){
    2.3.4.5.
    if(result==null){return;}TransitOverlaytransitOverlay=newTransitOverlay(MyMapActivity.this,mMapView);//此处仅展示一个方案作为示例transitOverlay.setData(result.getPlan(0));mMapView.getOverlays().add(transitOverlay);}
    6.7.8.9.
    地址信息查询
    根据地理坐标查询地址信息:
    1.
    mMKSearch.reverseGeocode(newGeoPoint(40057031,116307852));
    实现MySearchListener的onGetAddrResult,得到查询结果。
    事件定位监听
    实现方式与系统的定位监听类似,通过MKLocationManager注册或者移除定位监听器:
     1.
    mLocationManager=mBMapMan.getLocationManager();
    2.3.4.5.6.7.8.9.10.11.
    LocationListenerlistener=newLocationListener(){@OverridepublicvoidonLocationChanged(Locationlocatio
    n){//TODO在此处处理位置变化}};//注册监听mLocationManager.requestLocationUpdates(listener);//不需要时移除监听mLocationManager.removeUpdates(listener);
    一般事件监听
    在初始化地图Activity时,注册一般事件监听,并实现MKGeneralListener的接口处理相应事件,将mBMapMan.init("我的Key",null)替换为下面的代码:
    1.
    mBMapMan.init("我的key",newMKGeneralListener(){
    2.3.4.5.6.7.8.9.10.});
    @OverridepublicvoidonGetPermissionState(intiError){//TODO返回授权验证错误,通过错误代码判断原因,MKEvent中常量值。}@OverridepublicvoidonGetNetworkState(intiError){//TODO返回网络错误,通过错误代码判断原因,MKEvent中常量值。}
    
    
  • 上一篇资讯: Beginning_Android_2中午版4
  • 下一篇资讯: Android高手进阶教程
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号