简介
百度地图SDK目前提供的工具有:调启百度地图、空间计算、坐标转换、空间关系判断、收藏夹等功能。帮助开发者实现丰富的LBS功能。
调启百度地图
调启百度地图功能,需使用百度BD09坐标,如使用其他坐标(
WGS84、GCJ02)进行展示,需先将其他坐标转换为BD09,详细说明请参考坐标转换页面,请勿使用非官方的转换方法
百度地图SDK提供简单的接口调用,通过调起百度地图客户端,实现复杂的业务逻辑。
支持的调启类型有:POI周边检索、POI详情检索、POI全景、步行线路规划、驾车线路规划、公交线路规划、驾车导航、导航(步行、骑行 需百度地图App 8.6.6以上版本才可以支持)。
自Android v4.3起,增加调启百度地图步行AR导航。
当手机中安装了百度地图App(版本号为8.6.6及以上版本),可直接调起百度地图客户端;当没有安装或版本号不符合要求,则默认调起百度地图WebApp展示,开发者可以通过BaiduMapRoutePlan中的setSupportWebRoute设置是否支持调起WebApp。
调启百度地图公交线路规划
以公交线路规划调启百度地图为例,介绍具体使用方法。
// 天安门坐标
double mLat1 = 39.915291;
double mLon1 = 116.403857;
// 百度大厦坐标
double mLat2 = 40.056858;
double mLon2 = 116.308194;
LatLng pt_start = new LatLng(mLat1, mLon1);
LatLng pt_end = new LatLng(mLat2, mLon2);
// 构建 route搜索参数以及策略,起终点也可以用name构造
RouteParaOption para = new RouteParaOption()
.startPoint(pt_start)
.endPoint(pt_end)
.busStrategyType(EBusStrategyType.bus_recommend_way);
try {
BaiduMapRoutePlan.openBaiduMapTransitRoute(para, this);
} catch (Exception e) {
e.printStackTrace();
}
//结束调启功能时调用finish方法以释放相关资源
BaiduMapRoutePlan.finish(this);
调启百度地图步行导航
以步行导航调启百度地图为例,介绍具体使用方法。(步行需百度地图App 8.6.6以上版本才可以支持)
// 构建 导航参数
// 天安门坐标
double mLat1 = 39.915291;
double mLon1 = 116.403857;
// 百度大厦坐标
double mLat2 = 40.056858;
double mLon2 = 116.308194;
LatLng pt1 = new LatLng(mLat1, mLon1);
LatLng pt2 = new LatLng(mLat2, mLon2);
NaviParaOption para = new NaviParaOption()
.startPoint(pt1).endPoint(pt2)
.startName("天安门").endName("百度大厦");
try {
// 调起百度地图步行导航
BaiduMapNavigation.openBaiduMapWalkNavi(para, this);
} catch (BaiduMapAppNotSupportNaviException e) {
e.printStackTrace();
showDialog();
}
调启百度地图步行AR导航
自Android v4.3起,增加调启步行AR导航。当手机中安装了百度地图App(版本号为9.7.5及以上版本),可直接调起百度地图App步行AR导航功能;低于此版本,则直接调启普通步行导航,但是用户可以手动切换为步行AR导航功能。
实现调启步行AR导航的代码如下:
LatLng pt1 = new LatLng(39.915291, 116.403857);
LatLng pt2 = new LatLng(40.056858, 116.308194);
// 构建导航参数
NaviParaOption para = new NaviParaOption() .startPoint(pt1).endPoint(pt2);
// 调起步行AR导航
BaiduMapNavigation.openBaiduMapWalkNaviAR(para, this);
调启百度地图骑行导航
以骑行导航调启百度地图为例, 介绍具体使用方法。(骑行需百度地图App 8.6.6以上版本才可以支持)
// 天安门坐标
double mLat1 = 39.915291;
double mLon1 = 116.403857;
// 百度大厦坐标
double mLat2 = 40.056858;
double mLon2 = 116.308194;
LatLng pt1 = new LatLng(mLat1, mLon1);
LatLng pt2 = new LatLng(mLat2, mLon2);
// 构建 导航参数
NaviParaOption para = new NaviParaOption()
.startPoint(pt1).endPoint(pt2)
.startName("天安门").endName("百度大厦");
try {
// 调起百度地图骑行导航
BaiduMapNavigation.openBaiduMapBikeNavi(para, this);
} catch (BaiduMapAppNotSupportNaviException e) {
e.printStackTrace();
showDialog();
}
调启百度地图POI全景
以POI全景调启百度地图为例,介绍调起方法如下:
// 调起百度地图POI全景
BaiduMapPoiSearch.openBaiduMapPanoShow("65e1ee886c885190f60e77ff", this); // 天安门
空间计算
根据用户指定的两个坐标点,计算这两个点的实际地理距离。核心代码如下:
//计算p1、p2两点之间的直线距离,单位:米
DistanceUtil. getDistance(p1, p2);
根据用户指定的左下角和右上角坐标,计算这两个坐标构成矩形的地理面积。核心代码如下:
//计算northeast, southwest两点构成矩形的地理面积,即东北、西南坐标。单位:平方米
AreaUtil.calculateArea(northeast, southwest);
空间关系判断
提供相应的接口能力,判断点与圆或多边形的位置关系。实现的核心代码如下:
//判断点pt是否在,以pCenter为中心点,radius为半径的圆内。
SpatialRelationUtil.isCircleContainsPoint(pCenter, radius, pt);
除以上位置关系判断方法外,SDK还提供获取折线上与折线外指定位置最近点的方法。核心代码如下:
//pt1是点pt在折线(由points构成)上最近点。
//points为构成polyline的点列表
LatLng pt1 = SpatialRelationUtil.getNearestPointFromLine(points, pt);
收藏夹功能
自v3.4.0版本起,SDK向开发者开放了本地收藏夹功能,帮助开发者更好的收藏、管理本地空间点信息数据。
注意:
1、收藏夹数据在本地存放,存储于手机data/data/xxx.xxx.xxx(应用程序的包名)/files目录下。
2、当应用卸载,相应数据将删除;覆盖安装时不会影响数据。
3、FavoriteManager管理方法,单例模式。
具体使用方法如下:
//在使用之前必须调用初始化方法
FavoriteManager.getInstance().init();
//构造一个点信息,pt和poiName是必填项
FavoritePoiInfo info = new FavoritePoiInfo().poiName("test").pt(new LatLng(mLat, mLon));
//添加到收藏夹,info既是输入也是输出,输出时携带id和时间戳
FavoriteManager.getInstance().add(info);
Log.d("baidumapsdk","info idis:" + info.getID() + ",timestamp is :"+String.valueOf(info.getTimeStamp()));
//删除
FavoriteManager.getInstance().deleteFavPoi(info.getID());
//更新,修改info的属性
FavoriteManager.getInstance().updateFavPoi(info.getID(), info);
//通过id获取某个点的信息
FavoriteManager.getInstance().getFavPoi(info.getID());
//获取全部点
FavoriteManager.getInstance().getAllFavPois();
//清空所有数据
FavoriteManager.getInstance().clearAllFavPoi ();
//不用时销毁对象释放内存
FavoriteManager.getInstance().destroy();