路径规划
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());
}
}