百度地图

来源:互联网 发布:美团大数据分析 编辑:程序博客网 时间:2024/05/14 09:51

2017/1/4 星期三 16:18:53
API介绍:
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction
[toc]

一、配置

1.导包

SDK下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
在build.gradle中添加以下代码以依赖so文件。

sourceSets {    main {        jniLibs.srcDirs = ['libs']    }}

或者把so文件放在 java/jniLibs 文件夹内

2.申请密钥

密钥申请地址:http://lbsyun.baidu.com/apiconsole/key
SHA1的获取方法(cmd中输入):
1. cd .android
2. keytool -list -v -keystore debug.keystore
3. android
4. 获取SHA1(右键标记——左键选择——右键)


二、显示百度地图

1.在application中添加开发密钥

<application>     ...    <meta-data          android:name="com.baidu.lbsapi.API_KEY"          android:value="开发者 key" />      ...</application>

2.添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_SETTINGS" />

3.在布局中添加地图控件

<com.baidu.mapapi.map.MapView    android:id="@+id/bmapView"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:clickable="true" />

4.初始化SDK

在使用SDK各组件之前初始化context信息,传入ApplicationContext
在MyApplication中初始化
或者在进入的第一个Activity中初始化

//如果在Activity中初始化该方法要在setContentView方法之前实现  SDKInitializer.initialize(getApplicationContext());  

5.在java中有生命周期(4个)

MapView mMapView;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mMapView = (MapView) findViewById(R.id.bmapView);}@Overrideprotected void onDestroy() {    super.onDestroy();    mMapView.onDestroy();}@Overrideprotected void onResume() {    super.onResume();    mMapView.onResume();}@Overrideprotected void onPause() {    super.onPause();    mMapView.onPause();}

完成以上步骤,地图就会显示成功。


三、基础地图

获取地图:

BaiduMap mBaiduMap = mMapView.getMap();

1. 地图类型

//普通地图  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);  
//卫星地图  mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);  
//空白地图, 基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);

2. 实时交通图

mBaiduMap.setTrafficEnabled(true);

3. 城市热力图

mBaiduMap.setBaiduHeatMapEnabled(true);

4. 地图控制与手势(略)

地图Logo,指南针,比例尺等的显示;
地图平移、缩放、俯视、旋转等手势的禁用否。

5. 标注覆盖物

用图标标记某个给定了纬经度的位置,应用:标注某处为加油站

LatLng point = new LatLng(39.963175, 116.400244);  //设置纬经度BitmapDescriptor marker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); //构建标注图标//将位置和图标设置到地图上OverlayOptions options = new MarkerOptions()        .position(point)        .icon(marker);baiduMap.addOverlay(options);

针对已经添加在地图上的标注,可采用如下方式进行手势拖拽:
1. 设置可拖拽

OverlayOptions options = new MarkerOptions()    .position(point)  //设置marker的位置    .icon(marker)  //设置marker图标    .zIndex(9)  //设置marker所在层级    .draggable(true);  //设置图标能否拖拽//将marker添加到地图上Marker marker = (Marker) (mBaiduMap.addOverlay(options));//拖拽监听baiduMap.setOnMarkerDragListener(...)

  1. 更多内容:

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/basicmap

四、检索功能

1. POI(Point of Interest)检索

(1)创建POI检索实例

mPoiSearch = PoiSearch.newInstance();

(2)设置POI检索监听者

mPoiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {    @Override    public void onGetPoiResult(PoiResult poiResult) {        //获取POI检索结果    }    @Override    public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {        //获取Place详情页检索结果    }                @Override    public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {        //获取Place室内检索结果    }});

(3)发起检索请求

mPoiSearch.searchInCity((new PoiCitySearchOption())      .city(“北京”)      .keyword(“美食”)      .pageNum(10));

(4)释放POI检索实例

mPoiSearch.destroy();

自v3.6.1开始,城市poi检索返回结果,新增门址类列表数据:
PoiSearch类的searchInCity(PoiCitySearchOption) 发起检索时返回的结果,增加门址类数据:PoiResult中新增getAllAddr()获取门址类列表,当isHasAddrInfo() 返回true时,除了原poi列表外,还包含门址结果。
例如:在“北京”搜索“上地十街1号”,除返回包含“上地十街1号”的poi列表以外,还包括地址为“上地十街1号”的明确门址。

POI详情信息的检索

  1. 发起检索
//uid是POI检索中获取的POI ID信息mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(uid));
  1. 设置结果监听
@Overridepublic void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {    //获取Place详情页检索结果    if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) {        //详情检索失败        // result.error请参考SearchResult.ERRORNO     } else {        //检索成功    }}

2. 公交信息检索

利用BusLineSearch方法,开发者可查询公交线路的详情信息

(1)发起POI检索,获取相应线路的UID

//以城市内检索为例,详细方法请参考POI检索部分的相关介绍  mSearch.searchInCity((new PoiCitySearchOption())      .city(“北京”)      .keyword(“717”);

(2)在POI检索结果中判断该POI类型是否为公交信息

public void onGetPoiResult(PoiResult result) {      if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {          return;      }      //遍历所有POI,找到类型为公交线路的POI      for (PoiInfo poi : result.getAllPoi()) {          if (poi.type == PoiInfo.POITYPE.BUS_LINE ||poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {              //说明该条POI为公交信息,获取该条POI的UID              busLineId = poi.uid;              break;          }      }  }

(3)定义并设置公交信息结果监听者(与POI类似),并发起公交详情检索

//如下代码为发起检索代码,定义监听者和设置监听器的方法与POI中的类似  mBusLineSearch.searchBusLine((new BusLineSearchOption()      .city(“北京”)      .uid(busLineId)));

3. 行政区边界数据检索

根据省、市、县(区)级行政区划名称,查询行政区划的详细边界信息

mDistrictSearch = DistrictSearch.newInstance();mDistrictSearch.searchDistrict(new DistrictSearchOption().cityName(city).districtName(district));//其中city表示城市名称,必填;district表示区名称,可选。

4. 线路规划

(1)跨城公交线路规划

例如检索“北京天安门”到“上海东方明珠”

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

mSearch = RoutePlanSearch.newInstance();

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

mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener(){   @Override   public void onGetMassTransitRouteResult(MassTransitRouteResult result) {    //获取跨城综合公共交通线路规划结果   }});

c. 准备检索起点、终点信息

PlanNode stMassNode = PlanNode.withCityNameAndPlaceName("北京", "天安门");PlanNode enMassNode = PlanNode.withCityNameAndPlaceName("上海", "东方明珠");

d. 发起公交线路规划检索

mSearch.masstransitSearch(new MassTransitRoutePlanOption().from(stMassNode).to(enMassNode));

e. 释放检索实例

mSearch.destroy();

公交线路规划结果的JSON结构图如下:

MassTransitRouteResult {    TransitResultNode: {    //起点信息        int cityId;      //城市编号        String cityName; //城市名        LatLng location;        //起点坐标 (当匹配有效路径时,该坐标有值;当起点模糊,出给建议列表时,该坐标为空)        String searchWord;      //检索关键字 (当起点模糊,出给建议列表时,该关键字有值;当匹配有效路径时,该关键字为空)    }origin;    TransitResultNode destination;  //终点信息(结果及含义同上)    TaxiInfo: {                //打车信息 (起终点为大陆地区同城时,有打车信息;其他情况无打车信息,该字段为空)        float totalPrice;       //总价格        String desc;            //打车描述信息        int distance;           //距离            int duration;           //时间        float perKMPrice;       //单价        float startPrice;       //起步价    }massTaxiInfo;    int total;              //总路线数目    List<MassTransitRouteLine>  : [  //换乘方案        MassTransitRouteLine {            int distance;      //距离(单位:米)            int duration;      //耗时 (单位:秒)            String arriveTime; //本线路预计到达时间:格式举例:2016-09-29 13:48:00            double price;      //本线路价格(元)            List<PriceInfo> priceInfo;       //票价详情(起终点为大陆地区同城时,此字段有值;其他情况,此字段为空)            List<List<TransitStep>> newSteps; //一条线路中的步骤(step)        }        ...    ]mRoutelines;    SuggestAddrInfo :{                     //    建议起终点信息        List<PoiInfo> suggestStartNode;  //建议起点        List<PoiInfo> suggestEndNode;    //建议终点    }suggestAddrInfo;} 

路线步骤说明:

List<List<TransitStep>>[    //一条线路中的步骤(step)    [ //起终点为同城时,该list表示一个step中的多个方案scheme; 起终点为跨城时,该list表示一个step 中多个子步骤sub_step        TransitStep:{            int distance;               //距离            int duration;               //耗时            List<TrafficCondition> trafficConditions;  //路况状态            LatLng startLocation;       //起点            LatLng endLocation;         //终点            String instructions;        //换乘说明            StepVehicleInfoType vehileType;  //交通工具类型(火车,飞机,大巴,公交,驾车,步行)            // 交通工具为驾车或步行时,无详情;为其他4种方式,则对应以下4种工具详情)            TrainInfo trainInfo;        //火车详情            PlaneInfo planeInfo;        //飞机详情            CoachInfo coachInfo;        //大巴详情            BusInfo busInfo;            //公交详情                          }        ...    ]    …]newSteps;

(2)公交线路规划

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/retrieval
.
.
.

0 0
原创粉丝点击