路径分析对象用于进行路径规划结果计算。代码如下:
NSString *dataPath = // 地图数据路径
// 通过地图数据路径初始化路径分析
_naviAnalyser = [[FMKNaviAnalyser alloc] initWithMapPath:dataPath];
_naviAnalyser.delegate = self;
根据设置的起点、终点进行路径分析,分析成功,返回路径经过的坐标点集。参考代码如下:
/// 路径规划
- (void)naviRouteAnalyserWithStart:(FMKGeoCoord)start end:(FMKGeoCoord)end {
// result:保存路径规划得到的点
NSMutableArray *result = [NSMutableArray array];
// 路径分析类型设置
FMKRouteSetting routeSetting;
routeSetting.naviModule = MODULE_SHORTEST;
routeSetting.routeCrossGroupPriority = FMKROUTE_CGP_DEFAULT;
// 进行路径计算分析
FMKRouteCalculateResultType type = [_naviAnalyser analyseRouteWithStartCoord:start end:end type:routeSetting routeResult:&result];
// 路径规划不成功直接返回
if (type != IROUTE_SUCCESS) {
return;
}
}
根据返回路径经过的坐标点集绘制路线。参考代码如下:
// 使用路径规划结果画线
- (void)drawLineWithNaviResults:(NSArray *)naviResults {
// 初始化线标注
FMKLineMarker *line = [[FMKLineMarker alloc] init];
for (FMKNaviResult *navi in naviResults) {
//利用分析结果添加segment
FMKSegment *segment = [[FMKSegment alloc] initWithGroupID:navi.groupID pointArray:navi.pointArray];
//在直线中添加segment
[line addSegment:segment];
}
[_mapView.map.lineLayer addMarker:line];
}
Fengmap iOS SDK 提供文字导航描述功能。在路径分析成功后, 使用FMKTextNavigation生成相应的文字描述和路段信息。FMKTextNavigation的textNavigationDescriptions属性获取文字描述集合,textNavigationSegments属性获取路段信息集合。
文字导航描述文字信息目前支持简体中文和英文两种,可以使用FMKTextNavigation的-setTextNavigationLanguage: 方法动态切换生成的文字描述语言类型,默认为简体中文。若使用导航模块实现路径规划导航等功能,也可以直接使用FMKNavigation 的- setTextNavigationLanguage: 方法动态切换语言,也支持在导航过程中动态切换语言类型。语言类型目前有FMKTextNavigationLanguageChinese和FMKTextNavigationLanguageEnglish。
参考代码如下:
// 若使用导航模块,即FMKNavigation实现路径规划;
// 在路径规划成功后,FMKNavigation内部会自动生成文字描述分析器,无需自己手动创建。
// 使用路径规划结果创建文字导航分析器
FMKTextNavigation *textNavigation = [FMKTextNavigation textaNavigationWithNaviResuls:results mapPath:_mapPath];
// 设置生成的语言
[textNavigation setTextNavigationLanguage:language];
// 生成简体中文的文字描述
[textNavigation generateTextNavigationDescriptions];
// textNavigationDescriptions:文字导航文字描述
for (NSString *description in textNavigation. textNavigationDescriptions) {
NSLog(@"%@", description);
}
// textNavigationSegments:文字导航处理结果 路径规划有结果时有效
for (FMKTextNavigationSegment *segment in _textNavigation. textNavigationSegments) {
NSString *startStr = NSStringFromFMKGeoCoord(segment.startCoord);
NSString *endStr = NSStringFromFMKGeoCoord(segment.endCoord);
NSLog(@"路段起点:%@, 路段终点:%@, 该路段距离:%.2f, 起点绝对方向:%@, 终点相对方向:%@",
startStr, endStr, segment.distance, segment.startDirection, segment.endDirection);
}