您当前的位置: Android SDK > 开发指南 > 计算工具
计算工具

简介

百度地图SDK目前提供的工具有:调启百度地图、空间计算、坐标转换、空间关系判断、收藏夹等功能。帮助开发者实现丰富的LBS功能。

调启百度地图

百度地图SDK提供简单的接口调用,通过调起百度地图客户端,实现复杂的业务逻辑。

支持的调启类型有:POI周边检索、POI详情检索、POI全景、步行线路规划、驾车线路规划、公交线路规划、驾车导航、导航(步行、骑行 需百度地图App 8.6.6以上版本才可以支持)。

当手机中安装了百度地图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();
        }

骑行导航调启百度地图为例, 介绍具体使用方法。(骑行需百度地图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全景
 BaiduMapPoiSearch.openBaiduMapPanoShow("65e1ee886c885190f60e77ff", this); // 天安门

空间计算

根据用户指定的两个坐标点,计算这两个点的实际地理距离。核心代码如下:

//计算p1、p2两点之间的直线距离,单位:米  
DistanceUtil. getDistance(p1, p2);

根据用户指定的左下角和右上角坐标,计算这两个坐标构成矩形的地理面积。核心代码如下:

//计算northeast, southwest两点构成矩形的地理面积,即东北、西南坐标。单位:平方米
AreaUtil.calculateArea(northeast, southwest);

坐标转换

百度地图SDK采用的是百度自有的地理坐标系(bdll09),因此开发者在做位置标注的时候,需要将其他类型的坐标转换为百度坐标。相应的接口和转换方式如下:

// 将google地图、soso地图、aliyun地图、mapabc地图和amap地图// 所用坐标转换成百度坐标  
CoordinateConverter converter  = new CoordinateConverter();  
converter.from(CoordType.COMMON);  
// sourceLatLng待转换坐标  
converter.coord(sourceLatLng);  
LatLng desLatLng = converter.convert();  
 
// 将GPS设备采集的原始GPS坐标转换成百度坐标  
CoordinateConverter converter  = new CoordinateConverter();  
converter.from(CoordType.GPS);  
// sourceLatLng待转换坐标  
converter.coord(sourceLatLng);  
LatLng desLatLng = converter.convert();

注意:百度地图SDK目前支持的是百度坐标(bdll09),不支持国测坐标 (gcj02)请求数据。

请勿使用非官方转换方法,包括百度坐标bdll09转国测坐标gcj02,国测坐标gcj02转百度坐标bdll09。

空间关系判断

提供相应的接口能力,判断点与圆或多边形的位置关系。实现的核心代码如下:

//判断点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();