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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected 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(...)
- 略
更多内容:
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详情信息的检索
- 发起检索
//uid是POI检索中获取的POI ID信息
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(uid));
- 设置结果监听
@Override
public 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
.
.
.