生成路由数据集。

命名空间:  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();
}

请参见