Fengmap Android SDK

路径规划 Fengmap Android SDK支持根据起点和终点坐标规划路线功能。

初始化路径分析对象

初始化路径分析对象,示例代码如下:

//初始化路径分析器
//地图退出后会释放分析器,path要和当前显示地图保持一致
try {
    mNaviAnalyser = FMNaviAnalyser.getFMNaviAnalyserByPath(path);
} catch (FileNotFoundException pE) {
    pE.printStackTrace();
} catch (FMObjectException pE) {
    pE.printStackTrace();
}

//添加模拟起始点
int stGroupId = 1;
FMMapCoord stCoord = new FMMapCoord(12961573.57171745, 4861851.492463955);
int endGroupId = 1;
FMMapCoord endCoord = new FMMapCoord(12961699.79823795, 4861826.46384646);
路径分析

根据设置的起始点和起始楼层进行路径分析,分析成功,返回路径经过的坐标点集。

//创建线图层
mLineLayer = mFMMap.getFMLayerProxy().getFMLineLayer();
mFMMap.addLayer(mLineLayer);                //添加线图层

//根据起始点坐标和楼层id等信息进行路径规划
int type = mNaviAnalyser.analyzeNavi(stGroupId, stCoord, endGroupId, endCoord,
        FMNaviAnalyser.FMNaviModule.MODULE_SHORTEST);
if (type == FMNaviAnalyser.FMRouteCalcuResult.ROUTE_SUCCESS) {
ArrayList results = mNaviAnalyser.getNaviResults();
// 如果要做导航功能使用FMNavigation进行路径规划,调用drawLine绘制导航线
    // 构造路径规划线所需数据
    ArrayList segments = new ArrayList<>();
    for (FMNaviResult r : results) {
        int groupId = r.getGroupId();
        FMSegment s = new FMSegment(groupId, r.getPointList());
        segments.add(s);
    }
    //添加LineMarker
    FMLineMarker lineMarker = new FMLineMarker(segments);
    mLineLayer.addMarker(lineMarker);
}else{
    FMLog.le("路径规划失败", FMNaviAnalyser.FMRouteCalcuResult.getErrorMsg(type));
}
获取路径描述信息

根据设置的起始点和起始楼层进行路径分析,分析成功后,返回路径经过的坐标点集。同时可根据结果集获取路径描述等信息。

//路径分析:传入起点和终点坐标和起点Id进行楼层分析
int type = mNaviAnalyser.analyzeNavi(stGroupId, stCoord, endGroupId, endCoord,
        FMNaviAnalyser.FMNaviModule.MODULE_SHORTEST);
if (type == FMNaviAnalyser.FMRouteCalcuResult.ROUTE_SUCCESS) {
    ArrayList datas = mNaviAnalyser.getNaviDescriptionData(); //得到路径分析后的结果集
    if(datas.isEmpty()){
        return;
    }
    for (FMNaviDescriptionData data:datas){
        Log.d("distance","" +data.getDistance());
    }
}