您当前的位置Android SDK>常见问题

常见问题

1 使用须知

在使用百度地图SDK(Android版)之前,请仔细阅读使用条款,一旦您使用了百度地图SDK(Android版),即表明您已阅读并接受使用条款中的全部内容。百度地图SDK(Android版)可帮助您在应用中以丰富的形式展示地图,实现兴趣点搜索、线路规划等操作。 您只可使用在百度地图SDK(Android版)开发文档中所列明开放的功能来对相关服务数据的结果进行展示,不得直接存取、使用内部数据、图片、程序、模块或是任何其他百度地图的服务或功能。在接受使用条款约束的情况下,您可以在向最终用户提供其他信息的同时,使用 API 获取相关服务数据。

2 百度用和开发密钥

2.1 如何注册百度用户?

公众用户请在百度个人中心注册用户。企业用户请联系我们

2.2 如何申请百度密钥?

公众用户在获取密钥中自行申请,可以每个应用申请一个Key,可以用在不同移动平台上的相同应用中。申请的Key个数目前没有限制。企业用户请联系我们

注意:为了给用户提供更安全的服务,Android SDK自v2.1.3版本开始采用了全新的Key验证体系。因此,当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请,申请及配置流程请参考开发指南对应章节。(选择使用v2.1.2及之前版本SDK的开发者,申请密钥(Key)的方式不变)。

2.3 忘记申请过的开发密钥怎么办?

公众用户在获取密钥侧边栏中,点击“我的KEY”查看已申请过的Key和对应的应用名称(针对老版的Key)。

针对申请了新Key的用户,您需要到新的申请页面查看您之前所申请的Key,地址为:http://lbsyun.baidu.com/apiconsole/key

3 问题集锦

3.1地图和覆盖物相关

3.1.1 百度地图SDK支持三维效果的地图吗?

自2.0.0版本起,Android地图SDK支持矢量版地图,当地图放大到一定级别后,底图的显示将支持3D效果(该效果可通过相应的接口关闭)。

3.1.2 目前支持多少种类型的地图?

目前支持基础矢量地图和卫星地图,此外还支持实时路况地图。

3.1.3 地图无法正常显示

地图无法正常显示,一般从以下几面去追查问题:

  1. 检查网络情况是否可用;
  2. 检查开发密钥安全码配置、填写位置等是否正确;
  3. 调用相应的监听方法,查看是否有错误信息;

3.1.4 点击地图上的一点,如何获取相应的地理坐标?

					mBaiduMap.setOnMapClickListener(new OnMapClickListener() {
						public void onMapClick(LatLng point) {
							//在此处理点击事件
						}
						public boolean onMapPoiClick(MapPoi poi) {
							//在此处理底图标注点击事件
							return false;
						}
					});
				

3.1.5 地图控件放在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();
					}
				

1.6目前有哪些城市具有实时交通图?

目前已有31个城市开通,分别为南京,广州,重庆,东莞,长春,台州,福州,金华,北京,常州,杭州,温州,大连,南昌,宁波,沈阳,中山,珠海,佛山,泉州,石家庄,成都,青岛,深圳,武汉,乌鲁木齐,长沙,上海,天津,无锡,厦门。之后其他城市还会陆续开通

3.2 检索功能相关

3.2.1 如何获得驾车/步行/公交路线距离?

					//获取线路规划的第一条方案的线路距离
					drivingRouteResult. getRouteLines().get(0).getDistance();
				

3.2.2 POI查询结果每页显示几个,如何翻页?

					//每页默认显示10个
					// mPoiSearch为PoiSearch对象
					mPoiSearch.searchInCity((new PoiCitySearchOption())
						.city(“北京”)
						.keyword(“美食”)
						// pageNum为你想要跳转到的页码
						.pageNum(pageNum));
				

3.2.3 如何设置POI检索每页显示容量?

					// 检索时指定页容量为20	
					// mPoiSearch为PoiSearch对象
					mPoiSearch.searchInCity((new PoiCitySearchOption())
						.city(“北京”)
						.keyword(“美食”)
						.pageCapacity(20));
				

3.2.4 路线规划不支持模糊搜索?

目前不支持模糊搜索,需要输入准确的站名。

3.2.5 搜索结果标注如何自定义点击处理?

					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;
							}
					}
				

3.2.6 POI是否支持按分类检索?

支持分类检索,只要在检索的关键词内填写相应的类别名称即可。

3.3 LBS云检索相关

3.3.1 什么是LBS云检索

百度地图LBS云是百度地图针对LBS开发者全新推出的平台级服务,不仅适用PC应用开发,同时适用移动设备应用的开发。使用LBS云,可以实现移动开发者存储海量位置数据的服务器零成本及维护压力,且支持高效检索用户数据,且实现地图展现。

3.4 空间分析工具相关

3.4.1 坐标相关问题

百度地图SDK采用的是百度自行加密的BD09ll坐标系,因此如果使用原始GPS坐标在地图上进行标绘等操作时,会存在较大的误差。在空间分析工具模块中,我们提供了相应的坐标转换方法,具体使用请参考开发指南、类参考等文档信息。

3.4.2 如何计算两点之间距离?

					/**
					* 测距工具
					*/
					public class DistanceUtil {
						 /**
						 * 返回两个点之间的距离
						 * @param p1LL
						 *            起点的百度经纬度坐标
						 * @param p2LL
						 *            终点的百度经纬度坐标
						 * @return 两点距离,单位为: 米,转换错误时返回-1.
						 */
					public static double getDistance(LatLng p1LL, LatLng p2LL) {
						}
					}
				

3.5 定位相关

3.5.1 获取位置信息

百度地图SDK自v2.0.0版本起,将定位功能进行了分类,因此,开发者如果需要使用定位功能的话,请下载定位SDK来获取相应的位置信息

3.5.2 在地图上使用定位信息

百度地图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) {
						}
					}
				

3.6 离线地图相关

3.6.1 在哪里可以下载到离线地图资源?

可通过SDK接口或者手动两种方式获取百度离线地图资源,手动下载离线地图的网址为:

http://wuxian.baidu.com/map/map.html?from=3052

3.7 其他

3.7.1 Key的申请和应用名称有关系吗?

应用名称是在申请Key的时候由开发者自行填写的,后期不可更改。因此key和应用名称是一一对应的关系。但在使用上,开发者所申请的key和安全码(sha1;PCN)绑定,只要保证应用的sha1和PCN对应关系正确即可

3.7.2 为何我的程序在不混淆之前可以运行,混淆之后不能运行了?

矢量版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中的类和方法不进行混淆

3.7.3 如何解决adt 22 版本不兼容低版本project问题?

第一步,在eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态。

第二步,Project -> clean -> clean all 。

3.7.4 使用VersionInfo.getVersionDesc()方法获取组件化开发包的描述信息

背景:

SDK在可定制化后, 各种组合打成的开发包其包名都是一样的, 所以在可定制化版本中,SDK新增了一个方法来或取 SDK开发包的版本描述信息,SDK开发包版本描述信息是一个简短的字串,它用来说明当前使用的SDK的版本的版本号,功能描述等信息。

方法:

VersionInfo.getVersionDesc()

返回值类型:

String

返回值示例:

baidu_mapsdk_andr_2.3.0_com=map_search_util_so=c8c720ccb0cd02def054cc57af50b829

说明:

baidu_mapsdk_andr:固定字符.

2.3.0:版本号

com=map_search_util:开发包功能说明,此开发包包含地图功能、检索功能和工具类

so=c8c720ccb0cd02def054cc57af50b829:该jar包所需的so文件对应的md5值,用于检验jar包与so对应关系是否正确