生成路由数据集。
命名空间:
SuperMap.Analyst.SpatialAnalyst程序集: SuperMap.Analyst.SpatialAnalyst (in SuperMap.Analyst.SpatialAnalyst)
版本: dll
语法
C# |
---|
public static DatasetVector GenerateRoutes( DatasetVector referenceLine, GenerateRoutesParameter parameter ) |
参数
- referenceLine
- Type: SuperMap.Data..::.DatasetVector
指定的用于生成路由的线数据集。要求数据集类型为线数据集,输入其他类型的数据集将导致生成路由失败并返回 null。
- parameter
- Type: SuperMap.Analyst.SpatialAnalyst..::.GenerateRoutesParameter
指定的生成路由参数设置。
返回值
创建好的路由数据集。备注
实现动态分段的首要步骤是获得路由数据。每一条路由具有刻度值和唯一标识值,生成事件表时,事件发生的路由和刻度值(线事件包含起始和终止刻度值),需要参考路由数据集中的路由 ID 和 M 值。
路由数据可以是已有的(通过数字化工作获得,或是从外部及其他格式导入),也可以由线数据通过一定方式生成。该方法即用于根据一个线数据集来构建相应的路由数据集。
SuperMap 提供了四种生成路由数据集的方式,分别是:线参考点刻度方式、线单字段方式、线双字段方式和线长度方式。关于这四种生成路由方式的介绍,请参见 GenerateType 枚举类型。
注意:生成路由前,最好对用于生成路由的线数据进行去除重复节点处理。如果线对象具有重复节点,即相同坐标的节点,对应生成的路由可能产生“两个或多个相同的点具有相同的刻度值”的情况,可能破坏路由刻度值的单调性(递增、递减或保持不变),从而导致后续的动态分段分析结果不正确。
示例
以下代码示范了如何通过“线参考点刻度”方式生成路由数据集。
使用本示例代码,请确保在您的项目中存在一个名为 mapControl 的地图控件(MapControl),并声明一个名为 m_workspace 的工作空间(Workspace)变量,打开位于安装目录\SampleData\LinearReferencing 目录下的工作空间 LinearReferencing.smwu,并将地图控件与工作空间关联。
CopyC#
private void GenerateRoutesExample() { //获取用于生成路由的线数据和参考点数据 Datasource datasource = m_workspace.Datasources["LinearReferencing"]; DatasetVector datasetLine = datasource.Datasets["Roads"] as DatasetVector; DatasetVector datasetPoint = datasource.Datasets["PointEvent"] as DatasetVector; //构造一个 GenerateRoutesParameter 对象并设置相关参数 GenerateRoutesParameter parameter = new GenerateRoutesParameter(); parameter.Type = GenerateType.ByPoint;//使用“线参考点刻度”方式来生成路由数据集 parameter.DatasetPoint = datasetPoint; parameter.LineRouteIDField = "ROUTEID"; parameter.PointRouteIDField = "ROUTEID"; parameter.MeasureField = "MEASURE"; parameter.ErrorInfoField = "ERROR"; parameter.OutputDatasource = datasource; parameter.OutputDatasetName = "Routes"; parameter.Tolerance = 0.179316666; if (datasource.Datasets.Contains("Routes")) { //判断该数据集是否存在动态分段关系,如存在则删除关系 DatasetVector dynamicDataset = datasource.Datasets["Routes"] as DatasetVector; DynamicSegmentInfo[] infos = DynamicSegmentManager.GetDynamicSegmentInfos(dynamicDataset); if (infos.Length != 0) { DynamicSegmentManager.RemoveDynamicSegmentInfos(dynamicDataset); } datasource.Datasets.Delete("Routes"); } //调用 GenerateRoutes 方法来生成路由数据集 DatasetVector resultRoutesDataset = LinearReferencing.GenerateRoutes(datasetLine, parameter); //加载到当前地图上 mapControl.Map.Layers.Add(resultRoutesDataset, true); mapControl.Map.Refresh(); }