百度地图
来源:互联网 发布:美团大数据分析 编辑:程序博客网 时间: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(...)
- 略
更多内容:
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));
- 设置结果监听
@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
.
.
.
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 百度地图
- 它不妥善处理这种情况下
- UE4反射机制UCLASS() USTRUCT() GENERATED_BODY() UPROPERTY() UFUNCTION()
- weblogic11 forgot weblogic user's password
- Core Graphics 绘图及Demo
- view绘制流程之layout和draw
- 百度地图
- CentOS 6.5下搭建LAMP环境详细步骤
- C_标准函数库中的字符串处理函数
- 告别我的2016
- 锂电池充电原理解析
- qt:QFileInfo的简单用法
- Windows7 Ubuntu16.04 双硬盘双系统 搭建Caffe
- Git 初次使用(3)
- MySql数据库设计的8种优化方法