百度地图实例开发

作者: 征程_Journey | 来源:发表于2017-05-20 21:39 被阅读329次

    申请密钥AndroidSDK:应用程序包名+数字签名

    As查看数字签名:cmd-----cd .android---------keytool -list -v-keystoredebug.keystore------密钥口令是Android

    其中keytool为jdk自带工具;keystorefile为Android 签名证书文件

    Eclipse查看数字签名:windows -> preferance ->android -> build

    配置环境及发布

    Android Studio工程配置方法

    在工程app/libs目录下放入baidumapapi_vX_X_X.jar包

    在src/main/目录下新建jniLibs目录

    91:A3:6B:83:0C:6F:CC:78:89:B8:89:80:40:A3:0A:2A:C5:E6:34:BE

    1.1    Hello BaiduMap

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.xys.baidumapapplication.MainActivity">

    android:id="@+id/bmapView"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:clickable="true"/>

    权限配置:

    package="com.xys.baidumapapplication">

    android:allowBackup="true"

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"

    android:supportsRtl="true"

    android:theme="@style/AppTheme">

    android:name="com.baidu.lbsapi.API_KEY"

    android:value="wNQzIKaz9u7QQ6p734TfshyNFpaDl4gM"/>

    添加用于实现定位的服务

    -->

    android:name="com.baidu.location.f"

    android:enabled="true"

    android:process=":remote">

    App Indexing.  See https://g.co/AppIndexing/AndroidStudiofor more information. -->

    android:name="com.google.android.gms.version"

    android:value="@integer/google_play_services_version"/>

    示例代码:

    public classMainActivityextendsActivity {

    /*

    *显示基础地图,并提供key是否正确的验证

    * */

    MapViewmMapView=null;

    privateBroadcastReceivermReceiver;

    privateBaiduMapmBaiduMap;

    @Override

    protected voidonCreate(BundlesavedInstanceState) {

    super.onCreate(savedInstanceState);

    //在使用SDK各组件之前初始化context信息,传入ApplicationContext

    //注意该方法要再setContentView方法之前实现

    SDKInitializer.initialize(getApplicationContext());

    setContentView(R.layout.activity_main);

    //获取地图控件引用

    mMapView= (MapView)findViewById(R.id.bmapView);

    //注册SDK广播监听者

    IntentFilteriFilter =newIntentFilter();

    iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);//key正常

    iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);//key验证出错

    iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);//网络出错

    mReceiver=newSDKReceiver();

    registerReceiver(mReceiver,iFilter);

    //可以通过以下几种方式实现地图特殊显示

    mBaiduMap=mMapView.getMap();

    //卫星地图

    //mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

    //普通地图

    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

    //空白地图,基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。

    //mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);

    //2.开启交通图

    //mBaiduMap.setTrafficEnabled(true);

    //3.开启百度城市热力图

    //mBaiduMap.setBaiduHeatMapEnabled(true);

    //4、定义Maker坐标点,LatLng经纬度封装类

    /**

    *构造方法参数

    * 1、纬度

    * 2、经度

    */LatLng point =newLatLng(31.384289,121.497907);

    //构建Marker图标

    BitmapDescriptorbitmap = BitmapDescriptorFactory

    .fromResource(R.mipmap.icon_marka);

    //构建MarkerOption,用于在地图上添加Marker

    OverlayOptionsoption =newMarkerOptions()

    .position(point)

    .icon(bitmap)

    .draggable(true);//设置手势拖拽

    //在地图上添加Marker,并显示,参数代表图层对象

    mBaiduMap.addOverlay(option);

    //设置让地图的中心点移动到某位置

    MapStatus.Buildermb =newMapStatus.Builder();

    mb.target(point);

    mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mb.build()));

    }

    @Override

    protected voidonDestroy() {

    super.onDestroy();

    //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

    mMapView.onDestroy();

    }

    @Override

    protected voidonResume() {

    super.onResume();

    //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

    mMapView.onResume();

    }

    @Override

    protected voidonPause() {

    super.onPause();

    //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

    mMapView.onPause();

    }

    /**

    *构造广播监听类,监听SDK key验证以及网络异常广播

    */public classSDKReceiverextendsBroadcastReceiver{

    public voidonReceive(Context context,Intent intent) {

    String s = intent.getAction();

    Log.d("","action:"+ s);

    if(s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {

    Toast.makeText(MainActivity.this,"key验证出错!请在AndroidManifest.xml文件中检查key设置",Toast.LENGTH_SHORT).show();

    }else if(s

    .equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {

    Toast.makeText(MainActivity.this,"key验证成功!功能可以正常使用",Toast.LENGTH_SHORT).show();

    }else if(s

    .equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {

    Toast.makeText(MainActivity.this,"网络出错",Toast.LENGTH_SHORT).show();

    }

    }

    }

    }

    1.2    基础地图

    1、地图图层

    什么是地图图层?

    地图可以包含一个或多个图层,每个图层在每个级别都是由若干个图块组成的,它们覆盖了地图的整个表面。

    例如您所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层。

    目前百度地图SDK所提供的地图等级为3-19级,所包含的信息有建筑物、道路、河流、学校、公园等内容。

    地图覆盖物

    所有叠加或覆盖到地图的内容,我们统称为地图覆盖物

    标注、矢量图形元素(包括:折线、多边形和圆等)、定位图标等。

    覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

    覆盖物按从下到上层次覆盖关系

    1、基础底图(包括底图、底图道路、卫星图等)

    2、地形图图层(GroundOverlay)

    3、热力图图层(HeatMap)

    4、实时路况图图层(BaiduMap.setTrafficEnabled(true);

    5、百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true);

    6、底图标注(指的是底图上面自带的那些POI元素)

    7、几何图形图层(点、折线、弧线、圆、多边形)

    8、标注图层(Marker),文字绘制图层(Text)

    9、指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针)

    10、定位图层(BaiduMap.setMyLocationEnabled(true);

    11、弹出窗图层(InfoWindow)

    12、自定义View(MapView.addView(View);)

    2、地图类型

    普通矢量地图

    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

    卫星地图

    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

    实时交通图

    当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。

    开启交通图:mBaiduMap.setTrafficEnabled(true);

    3、覆盖物

    开发者可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。

    本地覆盖物

    本地覆盖物的抽象基类:OverlayOptions

    标注覆盖物(Marker

    使用步骤

    定义Marker坐标点

    LatLngpoint = new LatLng(39.963175, 116.400244);

    构建Marker图标

    BitmapDescriptorbitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);

    不用时及时 recycle回收资源 :bitmap.recycle();

    构建MarkerOption,用于在地图上添加Marker

    OverlayOptionsoption = new MarkerOptions()

    .position(point)// Marker的位置

    .icon(bitmap);  // Marker的图标

    .zIndex(9)  // 设置marker所在层级

    .draggable(true);  // 设置手势拖拽

    在地图上添加Marker,并显示

    mBaiduMap.addOverlay(option);

    设置Marker的点击事件

    mBaiduMap.setOnMarkerClickListener(OnMarkerClickListener)

    手势拖拽的标注

    设置可拖拽

    OverlayOptionsoptions = new MarkerOptions()

    .position(pointA)  //设置marker的位置

    .icon(bdA)  //设置marker图标

    .zIndex(9)  //设置marker所在层级(默认:12)

    .draggable(true);  //设置手势拖拽

    将Marker添加到地图上

    marker= (Marker) (mBaiduMap.addOverlay(options));

    设置marker拖拽的监听

    BaiduMap.setOnMarkerDragListener(OnMarkerDragListener)

    动画效果的Marker

    注:自v3.3.0版本起,SDK提供了给Marker增加动画的能力

    实例化ArrayList,增加动画相关的图片资源

    通过MarkerOptions的icons设置动画的一组图片资源,再通过period设置多少帧刷新一次图片资源

    几何图形覆盖物

    点(Dot): DotOptions

    折线(Polyline):PolylineOptions

    弧线(Arc):ArcOptions

    圆(Circle):CircleOptions

    多边形(Polygon):PolygonOptions

    文字覆盖物:TextOptions

    弹出窗覆盖物:InfoWindow

    地形图图层:GroundOverlay

    搜索覆盖物

    显示和管理多个Overlay的基类:OverlayManager

    POI本地搜索覆盖物:PoiOverlay

    公交信息覆盖物:BusLineOverlay

    换乘线路覆盖物:TransitRouteOverlay

    驾车路线覆盖物:DrivingRouteOverlay

    步行路线覆盖物:WalkingRouteOverlay

    1.3    POI检索---兴趣点搜索

    POI检索

    POI(Point ofInterest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。

    百度地图SDK提供三种类型的POI检索

    周边检索

    区域检索

    城市内检索

    importcom.xys.utlis.PoiOverlay;

    importJava.util.List;

    /**

    * Created by xuyangsheng on 2015/4/3.

    */public classPointSearchActivityextendsActivity {

    /*

    *实现兴趣点检索的功能

    *如:搜索上海内所有KFC

    *或者自身周边10000米范围内的KFC

    *并且将搜索结果显示到MapView上

    * */

    privateMapViewmMapView;

    privateBaiduMapmBaiduMap;

    privatePoiSearchmPoiSearch;

    @Override

    protected voidonCreate(BundlesavedInstanceState) {

    super.onCreate(savedInstanceState);

    //在使用SDK各组件之前初始化context信息,传入ApplicationContext

    //注意该方法要再setContentView方法之前实现

    SDKInitializer.initialize(getApplicationContext());

    setContentView(R.layout.activity_search);

    mMapView= (MapView)this.findViewById(R.id.mapView);

    Log.i("===","=====onCreate mapView"+mMapView);

    mBaiduMap=mMapView.getMap();

    //第一步,创建POI检索实例

    mPoiSearch= PoiSearch.newInstance();

    //第二步,设置POI检索监听者

    mPoiSearch.setOnGetPoiSearchResultListener(newOnGetPoiSearchResultListener(){

    /***

    *当调用searchInCity,searchNearby,seachInBound方法

    *得到搜索结果之后调用的方法

    *@parampoiResult参数代表搜索的结果

    */@Override

    public voidonGetPoiResult(PoiResultpoiResult) {

    //满足if条件时,代表地图成功搜索出结果

    if(poiResult.error==SearchResult.ERRORNO.NO_ERROR){

    //将搜索结果输出

    Log.i("===","======上海市共有的KFC的个数为:"+poiResult.getTotalPoiNum());

    Listlist = poiResult.getAllPoi();

    for(PoiInfo pi : list) {    Log.i("====","===该poi点的地址信息为:"+ pi.address+"  "+ pi.name);}//将搜索结果显示到地图上//清除地图上显示的内容mBaiduMap.clear();//创建PoiOverlay,即显示搜索结果的图层/*

    *注:如果后期需要设置poi点的点击事件,那么就需要通过new

    *子类的方式获取PoiOverlay对象*如果后期不需要设置poi点的点击事件,那么也可以直接* new PoiOverlay对象* */PoiOverlayoverlay =newMyPointOverlay(mBaiduMap);//设置overlay可以处理标注点击事件mBaiduMap.setOnMarkerClickListener(overlay);//设置PoiOverlay数据overlay.setData(poiResult);//添加PoiOverlay到地图中overlay.addToMap();//让地图自动缩放,满足让所有的结果点都显示到屏幕上overlay.zoomToSpan();}

    }//当通过searchPoiDetail方法查询指定poi点的详细信息,得到结果后运行此方法@Overridepublic voidonGetPoiDetailResult(PoiDetailResult poiDetailResult) {                Log.i("===","======  poi的名称和营业时间:"+poiDetailResult.getName()+"  "+poiDetailResult.getShopHours());}

    });MapStatus.Builder mb =newMapStatus.Builder();mb.target(newLatLng(31.384289,121.497907));mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mb.build()));}/**

    *处理按钮点击事件*/public voidclick(View v){switch(v.getId()) {caseR.id.button://第三步,发起检索请求mPoiSearch.searchInCity(newPoiCitySearchOption()

    .city("上海")//设置在哪个城市范围内进行搜索.keyword("KFC")//设置搜索关键字.pageCapacity(8)//设置每页容量,默认为每页10条.pageNum(10)//分页编号);

    break;

    caseR.id.button2:mPoiSearch.searchNearby(newPoiNearbySearchOption()

    .keyword("兰州拉面")//搜索关键字.location(newLatLng(31.384289,121.497907))//设置搜索的中心点.radius(10000)//设置搜索半径);

    break;}

    }/**

    *创建一个用于显示搜索结果的图层的子类*/private classMyPointOverlayextendsPoiOverlay{publicMyPointOverlay(BaiduMap baiduMap){super(baiduMap);}//当poi点被点击时运行的方法@Overridepublic booleanonPoiClick(intindex) {super.onPoiClick(index);PoiInfo poiInfo = getPoiResult().getAllPoi().get(index);//可以通过方法搜索指定poi点的详细信息mPoiSearch.searchPoiDetail(newPoiDetailSearchOption().poiUid(poiInfo.uid));

    return true;}

    }@Overrideprotected voidonDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overrideprotected voidonResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected voidonPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();}

    }

    1.4    路径规划

    /**

    * Created by xuyangsheng on 2015/4/3.

    *用于实现地图的路径规划功能

    */public classRoutePlanActivityextendsActivity {

    privateMapViewmMapView;

    BaiduMapmBaiduMap;

    //用于进行路径规划的检索类

    privateRoutePlanSearchmSearch;

    privateWalkingRouteResultwalkingRouteResult;

    @Override

    protected voidonCreate(BundlesavedInstanceState) {

    super.onCreate(savedInstanceState);

    //在使用SDK各组件之前初始化context信息,传入ApplicationContext

    //注意该方法要再setContentView方法之前实现

    SDKInitializer.initialize(getApplicationContext());

    setContentView(R.layout.activity_route);

    mMapView= (MapView)findViewById(R.id.bmapViewa);

    mBaiduMap=mMapView.getMap();

    LatLng point =newLatLng(31.384289,121.497907);

    //构建Marker图标

    BitmapDescriptorbitmap = BitmapDescriptorFactory

    .fromResource(R.mipmap.icon_marka);

    //构建MarkerOption,用于在地图上添加Marker

    OverlayOptionsoption =newMarkerOptions()

    .position(point)

    .icon(bitmap)

    .draggable(true);//设置手势拖拽

    //在地图上添加Marker,并显示,参数代表图层对象

    mBaiduMap.addOverlay(option);

    //将地图中心移动到宝山区

    finalMapStatus.Buildermb =newMapStatus.Builder();

    mb.target(point);

    mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mb.build()));

    //1.创建公交线路规划检索实例

    mSearch=RoutePlanSearch.newInstance();

    //2.设置公交线路规划检索监听者

    mSearch.setOnGetRoutePlanResultListener(newOnGetRoutePlanResultListener(){

    //当得到步行路线时运行此方法

    @Override

    public voidonGetWalkingRouteResult(WalkingRouteResultwalkingRouteResult) {

    Log.i("===","====  getwalking "+walkingRouteResult.error);

    if(walkingRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {

    Log.i("===","===本次步行的总距离和预计总时长为:"+walkingRouteResult.getRouteLines().get(0).getDistance()+"  "+walkingRouteResult.getRouteLines().get(0).getDuration());

    RoutePlanActivity.this.walkingRouteResult= walkingRouteResult;

    /*

    *获取第一种步行路线

    * */

    WalkingRouteLineline = walkingRouteResult.getRouteLines().get(0);

    //获取该种步行方式的所有行进路段

    Liststeps = line.getAllStep();

    for(WalkingRouteLine.WalkingStepstep : steps) {

    //获取路段整体指示信息

    Log.i("====","=====  "+step.getInstructions());

    }

    mBaiduMap.clear();

    WalkingRouteOverlayoverlay =newMyWalking(mBaiduMap);

    mBaiduMap.setOnMarkerClickListener(overlay);

    overlay.setData(walkingRouteResult.getRouteLines().get(0));

    overlay.addToMap();

    overlay.zoomToSpan();

    }

    }

    //当获得公交路线时运行的方法

    @Override

    public voidonGetTransitRouteResult(TransitRouteResulttransitRouteResult) {

    if(transitRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {

    Log.i("===","===本次步行的总距离和预计总时长为:"+transitRouteResult.getRouteLines().get(0).getDistance()+"  "+transitRouteResult.getRouteLines().get(0).getDuration());

    TransitRouteLineline = transitRouteResult.getRouteLines().get(0);

    Liststeps = line.getAllStep();

    for(TransitRouteLine.TransitStepstep : steps) {

    //获取路段整体指示信息

    Log.i("====","=====  "+step.getInstructions());

    }

    mBaiduMap.clear();

    TransitRouteOverlayoverlay =newMyTransit(mBaiduMap);

    mBaiduMap.setOnMarkerClickListener(overlay);

    overlay.setData(transitRouteResult.getRouteLines().get(0));

    overlay.addToMap();

    overlay.zoomToSpan();

    }

    }

    //当获得驾车路线时运行的方法

    @Override

    public voidonGetDrivingRouteResult(DrivingRouteResultdrivingRouteResult) {

    if(drivingRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {

    Log.i("===","===本次步行的总距离和预计总时长为:"+drivingRouteResult.getRouteLines().get(0).getDistance()+"  "+drivingRouteResult.getRouteLines().get(0).getDuration());

    /*

    *获取第一种步行路线

    * */

    DrivingRouteLineline = drivingRouteResult.getRouteLines().get(0);

    //获取该种步行方式的所有行进路段

    Liststeps = line.getAllStep();

    for(DrivingRouteLine.DrivingStepstep : steps) {

    //获取路段整体指示信息

    Log.i("====","=====  "+step.getInstructions());

    }

    mBaiduMap.clear();

    DrivingRouteOverlayoverlay =newMyDriving(mBaiduMap);

    mBaiduMap.setOnMarkerClickListener(overlay);

    overlay.setData(drivingRouteResult.getRouteLines().get(0));

    overlay.addToMap();

    overlay.zoomToSpan();

    }

    }

    //当获得骑行路线时运行的方法

    @Override

    public voidonGetBikingRouteResult(BikingRouteResultbikingRouteResult) {

    if(bikingRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {

    Log.i("===","===本次步行的总距离和预计总时长为:"+ bikingRouteResult.getRouteLines().get(0).getDistance()+"  "+bikingRouteResult.getRouteLines().get(0).getDuration());

    /*

    *获取第一种步行路线

    * */

    BikingRouteLineline = bikingRouteResult.getRouteLines().get(0);

    //获取该种步行方式的所有行进路段

    Liststeps = line.getAllStep();

    for(BikingRouteLine.BikingStepstep : steps) {

    //获取路段整体指示信息

    Log.i("====","=====  "+step.getInstructions());

    }

    mBaiduMap.clear();

    BikingRouteOverlayoverlay =newMyBiking(mBaiduMap);

    mBaiduMap.setOnMarkerClickListener(overlay);

    overlay.setData(bikingRouteResult.getRouteLines().get(0));

    overlay.addToMap();

    overlay.zoomToSpan();

    }

    }

    });

    }

    public voidclick(View v) {

    //通过经纬度获取起点PlanNode对象

    PlanNode start =PlanNode.withLocation(newLatLng(31.384289,121.497907));

    //通过城市名称和地址名称获取PlanNode对象

    PlanNode end =PlanNode.withCityNameAndPlaceName("上海","虹口足球场地铁站");

    switch(v.getId()) {

    caseR.id.button3://公交

    mSearch.transitSearch(newTransitRoutePlanOption()

    .city("上海")//设置城市信息

    .from(start)//设置起点信息

    .to(end)//设置终点信息

    .policy(TransitRoutePlanOption.TransitPolicy.EBUS_TIME_FIRST)//设置换成策略,如时间最短,步行最少等

    );

    break;

    caseR.id.button4://驾车

    mSearch.drivingSearch(newDrivingRoutePlanOption()

    .from(start)

    .to(end)

    .policy(DrivingRoutePlanOption.DrivingPolicy.ECAR_AVOID_JAM)//设置驾车策略,如时间最少,避免拥堵等

    .trafficPolicy(DrivingRoutePlanOption.DrivingTrafficPolicy.ROUTE_PATH_AND_TRAFFIC)//设置是否支持路况数据

    );

    break;

    caseR.id.button5://步行

    mSearch.walkingSearch(newWalkingRoutePlanOption()

    .from(start)//设置起点

    .to(end));//设置终点

    break;

    caseR.id.button6://骑行

    mSearch.bikingSearch(newBikingRoutePlanOption()

    .from(start)

    .to(end)

    );

    break;

    }

    }

    //自定义步行图层的子类

    classMyWalkingextendsWalkingRouteOverlay{

    publicMyWalking(BaiduMapbaiduMap) {

    super(baiduMap);

    }

    //通过返回值控制起点图标的显示

    @Override

    publicBitmapDescriptorgetStartMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);

    }

    //通过返回值控制终点图标的显示

    @Override

    publicBitmapDescriptorgetTerminalMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);

    }

    //当路径中的节点被点击时运行的方法

    @Override

    public booleanonRouteNodeClick(inti) {

    WalkingRouteLine.WalkingStepselect =walkingRouteResult.getRouteLines().get(0).getAllStep().get(i);

    Toast.makeText(RoutePlanActivity.this,"--"+select.getInstructions(),Toast.LENGTH_SHORT).show();

    return true;

    }

    }

    classMyTransitextendsTransitRouteOverlay{

    /**

    *构造函数

    *

    *@parambaiduMap该TransitRouteOverlay引用的BaiduMap对象

    */publicMyTransit(BaiduMapbaiduMap) {

    super(baiduMap);

    }

    //通过返回值控制起点图标的显示

    @Override

    publicBitmapDescriptorgetStartMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);

    }

    //通过返回值控制终点图标的显示

    @Override

    publicBitmapDescriptorgetTerminalMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);

    }

    }

    classMyDrivingextendsDrivingRouteOverlay{

    /**

    *构造函数

    *

    *@parambaiduMap该TransitRouteOverlay引用的BaiduMap对象

    */publicMyDriving(BaiduMapbaiduMap) {

    super(baiduMap);

    }

    //通过返回值控制起点图标的显示

    @Override

    publicBitmapDescriptorgetStartMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);

    }

    //通过返回值控制终点图标的显示

    @Override

    publicBitmapDescriptorgetTerminalMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);

    }

    }

    classMyBikingextendsBikingRouteOverlay{

    /**

    *构造函数

    *

    *@parambaiduMap该TransitRouteOverlay引用的BaiduMap对象

    */publicMyBiking(BaiduMapbaiduMap) {

    super(baiduMap);

    }

    //通过返回值控制起点图标的显示

    @Override

    publicBitmapDescriptorgetStartMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);

    }

    //通过返回值控制终点图标的显示

    @Override

    publicBitmapDescriptorgetTerminalMarker() {

    returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);

    }

    }

    @Override

    protected voidonDestroy() {

    super.onDestroy();

    //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

    mMapView.onDestroy();

    }

    @Override

    protected voidonResume() {

    super.onResume();

    //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

    mMapView.onResume();

    }

    @Override

    protected voidonPause() {

    super.onPause();

    //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

    mMapView.onPause();

    }

    }

    1.5    百度地图定位

    /**

    * Created by xuyangsheng on 2015/4/4.

    *实现地图的定位功能

    */public classLocationActivityextendsActivity {

    privateMapViewmMapView;

    privateBaiduMapmBaiduMap;

    private booleanisFirstLoc=true;

    privateBitmapDescriptormCurrentMarker;

    privateLocationClientmLocationClient;

    @Override

    protected voidonCreate(BundlesavedInstanceState) {

    super.onCreate(savedInstanceState);

    SDKInitializer.initialize(getApplicationContext());

    setContentView(R.layout.activity_location);

    mMapView= (MapView)this.findViewById(R.id.l_bampView);

    mBaiduMap=mMapView.getMap();

    //开启定位图层

    mBaiduMap.setMyLocationEnabled(true);

    mCurrentMarker=BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka);

    mBaiduMap.setMyLocationConfigeration(newMyLocationConfiguration(

    MyLocationConfiguration.LocationMode.COMPASS,true,mCurrentMarker

    ));

    //1、初始化LocationClient类

    mLocationClient=newLocationClient(getApplicationContext());//声明LocationClient

    //2、注册定位的监听事件

    mLocationClient.registerLocationListener(newBDLocationListener(){

    /**

    *当获取得到定位结果时,就会运行此方法

    *参数代表当前定位到的位置信息

    */@Override

    public voidonReceiveLocation(BDLocationbdLocation) {

    Log.i("===","=====当前定位到的经纬度为:"+bdLocation.getLongitude()+" "+bdLocation.getLatitude());

    Log.i("===","=====当前位置的地址信息为:"+bdLocation.getAddrStr()+" "+bdLocation.getAddress());

    MyLocationData  locData =newMyLocationData.Builder()

    .accuracy(bdLocation.getRadius())

    //此设置开发者获取到的方向信息,顺时针0-360

    .direction(100).latitude(bdLocation.getLatitude())

    .longitude(bdLocation.getLongitude()).build();

    mBaiduMap.setMyLocationData(locData);

    if(isFirstLoc){

    isFirstLoc=false;

    LatLng ll =newLatLng(bdLocation.getLatitude(),

    bdLocation.getLongitude());

    MapStatus.Builderbuilder =newMapStatus.Builder();

    builder.target(ll).zoom(18.0f);

    mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

    }

    }

    });

    //3、配置定位SDK参数

    initLocation();

    //开始定位

    mLocationClient.start();

    }

    private voidinitLocation(){

    LocationClientOption option =newLocationClientOption();

    //可选,默认高精度,设置定位模式,高精度、低功耗、仅设备

    option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);

    option.setCoorType("bd0911");//可选,默认gcj02,设置返回的定位结果坐标系

    intspan =1000;

    option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

    option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

    option.setOpenGps(true);//可选,默认false,设置是否使用gps

    option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果

    option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

    option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

    option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死

    option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集

    option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要

    mLocationClient.setLocOption(option);

    }

    @Override

    protected voidonDestroy() {

    mLocationClient.stop();//停止定位

    mBaiduMap.setMyLocationEnabled(false);//关闭定位图层

    mMapView.onDestroy();

    super.onDestroy();

    }

    }

    相关文章

      网友评论

        本文标题: 百度地图实例开发

        本文链接:https://www.haomeiwen.com/subject/hxopxxtx.html