使用须知
在使用百度地图SDK(Android版)之前,请仔细阅读使用条款,一旦您使用了百度地图SDK(Android版),即表明您已阅读并接受使用条款中的全部内容。百度地图SDK(Android版)可帮助您在应用中以丰富的形式展示地图,实现兴趣点搜索、线路规划等操作。 您只可使用在百度地图SDK(Android版)开发文档中所列明开放的功能来对相关服务数据的结果进行展示,不得直接存取、使用内部数据、图片、程序、模块或是任何其他百度地图的服务或功能。在接受使用条款约束的情况下,您可以在向最终用户提供其他信息的同时,使用 API 获取相关服务数据。
百度用和开发密钥
如何注册百度用户?
公众用户请在百度个人中心注册用户。企业用户请联系我们。
如何申请百度密钥?
公众用户在获取密钥中自行申请,可以每个应用申请一个Key,可以用在不同移动平台上的相同应用中。申请的Key个数目前没有限制。企业用户请联系我们。
注意:为了给用户提供更安全的服务,Android SDK自v2.1.3版本开始采用了全新的Key验证体系。因此,当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请,申请及配置流程请参考开发指南对应章节。(选择使用v2.1.2及之前版本SDK的开发者,申请密钥(Key)的方式不变)。
忘记申请过的开发密钥怎么办?
公众用户在获取密钥侧边栏中,点击“我的KEY”查看已申请过的Key和对应的应用名称(针对老版的Key)。
针对申请了新Key的用户,您需要到新的申请页面查看您之前所申请的Key,地址为:http://lbsyun.baidu.com/apiconsole/key。
问题集锦
地图和覆盖物相关
百度地图SDK支持三维效果的地图吗?
自2.0.0版本起,Android地图SDK支持矢量版地图,当地图放大到一定级别后,底图的显示将支持3D效果(该效果可通过相应的接口关闭)。
目前支持多少种类型的地图?
目前支持基础矢量地图和卫星地图,此外还支持实时路况地图。
地图无法正常显示
地图无法正常显示,一般从以下几面去追查问题:
检查网络情况是否可用;
检查开发密钥安全码配置、填写位置等是否正确;
调用相应的监听方法,查看是否有错误信息;
点击地图上的一点,如何获取相应的地理坐标?
mBaiduMap.setOnMapClickListener(new OnMapClickListener() {
public void onMapClick(LatLng point) {
//在此处理点击事件
}
public boolean onMapPoiClick(MapPoi poi) {
//在此处理底图标注点击事件
return false;
}
});
地图控件放在TabHost中,如何解决跳转时相互影响问题?
在TabHost中的activity使用MapView,有从其他tab页切回MapView异常的问题解决方案是在使用MapView的activity的onResume/onPause方法中手动调用设置view是否可见,具体如下:
@Override
protected void OnPause(){
mMapView.setVisibility(View.INVISIBLE);
mMapView.onPause();
super.onPause();
}
进入页面时
@Override
protected void onResume(){
mMapView.setVisibility(View.VISIBLE);
mMapView.onResume();
super.onResume();
}
目前有哪些城市具有实时交通图?
目前已有31个城市开通,分别为南京,广州,重庆,东莞,长春,台州,福州,金华,北京,常州,杭州,温州,大连,南昌,宁波,沈阳,中山,珠海,佛山,泉州,石家庄,成都,青岛,深圳,武汉,乌鲁木齐,长沙,上海,天津,无锡,厦门。之后其他城市还会陆续开通
检索功能相关
如何获得驾车/步行/公交路线距离?
//获取线路规划的第一条方案的线路距离
drivingRouteResult. getRouteLines().get(0).getDistance();
POI查询结果每页显示几个,如何翻页?
//每页默认显示10个
// mPoiSearch为PoiSearch对象
mPoiSearch.searchInCity((new PoiCitySearchOption())
.city(“北京”)
.keyword(“美食”)
// pageNum为你想要跳转到的页码
.pageNum(pageNum));
如何设置POI检索每页显示容量?
// 检索时指定页容量为20
// mPoiSearch为PoiSearch对象
mPoiSearch.searchInCity((new PoiCitySearchOption())
.city(“北京”)
.keyword(“美食”)
.pageCapacity(20));
路线规划不支持模糊搜索?
目前不支持模糊搜索,需要输入准确的站名。
搜索结果标注如何自定义点击处理?
private class MyPoiOverlay extends PoiOverlay {
public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public boolean onPoiClick(int index) {
super.onPoiClick(index);
// 自定义处理poi点击
PoiInfo poi = getPoiResult().getAllPoi().get(index);
if (poi.hasCaterDetails) {
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())
.poiUid(poi.uid));
}
return true;
}
}
POI是否支持按分类检索?
支持分类检索,只要在检索的关键词内填写相应的类别名称即可。
LBS云检索相关
什么是LBS云检索
百度地图LBS云是百度地图针对LBS开发者全新推出的平台级服务,不仅适用PC应用开发,同时适用移动设备应用的开发。使用LBS云,可以实现移动开发者存储海量位置数据的服务器零成本及维护压力,且支持高效检索用户数据,且实现地图展现。
空间分析工具相关
坐标相关问题
百度地图SDK采用的是百度自行加密的BD09ll坐标系,因此如果使用原始GPS坐标在地图上进行标绘等操作时,会存在较大的误差。在空间分析工具模块中,我们提供了相应的坐标转换方法,具体使用请参考开发指南、类参考等文档信息。
如何计算两点之间距离?
/**
* 测距工具
*/
public class DistanceUtil {
/**
* 返回两个点之间的距离
* @param p1LL
* 起点的百度经纬度坐标
* @param p2LL
* 终点的百度经纬度坐标
* @return 两点距离,单位为: 米,转换错误时返回-1.
*/
public static double getDistance(LatLng p1LL, LatLng p2LL) {
}
}
定位相关
获取位置信息
百度地图SDK自v2.0.0版本起,将定位功能进行了分类,因此,开发者如果需要使用定位功能的话,请下载定位SDK来获取相应的位置信息
在地图上使用定位信息
百度地图SDK提供相应的位置信息接收接口,帮助开发者快速展示位置信息,使用方法如下:
第一步:开启定位
// 地图初始化
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();
第二步:定位数据展示
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null)
return;
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
其他
Key的申请和应用名称有关系吗?
应用名称是在申请Key的时候由开发者自行填写的,后期不可更改。因此key和应用名称是一一对应的关系。但在使用上,开发者所申请的key和安全码(sha1;PCN)绑定,只要保证应用的sha1和PCN对应关系正确即可
为何我的程序在不混淆之前可以运行,混淆之后不能运行了?
矢量版SDK(即2.0.0及之后的版本):
如果是用proguard ,以下配置供参考:
-libraryjars libs/baidumapapi_v2_1_2.jar 替换成自己所用版本的jar包
-keep class com.baidu.** { *; }
-keep class vi.com.gdi.bgl.android.**{*;}
其他混淆工具也请进行与此类似的配置,指定对mapapi中的类和方法不进行混淆
如何解决adt 22 版本不兼容低版本project问题?
第一步,在eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态。
第二步,Project -> clean -> clean all 。
使用VersionInfo.getVersionDesc()方法获取组件化开发包的描述信息
1.背景:
SDK在可定制化后, 各种组合打成的开发包其包名都是一样的, 所以在可定制化版本中,SDK新增了一个方法来或取 SDK开发包的版本描述信息,SDK开发包版本描述信息是一个简短的字串,它用来说明当前使用的SDK的版本的版本号,功能描述等信息。
2.方法:
VersionInfo.getVersionDesc()
3. 返回值类型:
String
4. 返回值示例:
baidu_mapsdk_andr_2.3.0_com=map_search_util_so=c8c720ccb0cd02def054cc57af50b829
5. 说明:
baidu_mapsdk_andr:固定字符.
2.3.0:版本号
com=map_search_util:开发包功能说明,此开发包包含地图功能、检索功能和工具类
so=c8c720ccb0cd02def054cc57af50b829:该jar包所需的so文件对应的md5值,用于检验jar包与so对应关系是否正确