海图数据集分组管理类。该类用于创建可编辑的 S-57 海图数据集分组,以及可编辑 S-57 数据集分组与不可编辑的普通 S-57 海图数据集分组之间的相互转换。

命名空间:  SuperMap.Chart
程序集:  SuperMap.Chart (in SuperMap.Chart)
版本: dll

语法

C#
public static class ChartDatasetGroupManager

备注

在将只读 S-57 海图数据集分组(S57DatasetGroup)与可编辑 S-57 海图数据集分组(S57EditDatasetGroup)相互转换,以及创建一个新的可编辑 S-57 海图数据集分组时,都会相应地创建一个新的数据集分组(DatasetGroup),也可以理解为新的海图数据。也就是说,只读 S-57 海图数据集分组对象和可编辑 S-57 海图数据集分组对象都在数据源中有一个对应的数据集分组。

转换或创建时新生成的数据集分组的名称与海图的 S-57 文件(000 文件)名和编辑比例(即比例尺的分母)有关。S-57 标准规定了 S-57 文件的命名规则。S-57 文件名和编辑比例,可以分别通过 CellName 属性和 CompilationScale 属性获得。

  1. 将 000 文件导入为 SuperMap 数据集分组,以及只读 S-57 海图数据集分组对应的数据集分组的名称为 000 文件的文件名(不含后缀) + “_” + 编辑比例,例如:GB4X0000_52000。
  2. 可编辑 S-57 海图数据集分组对应的数据集分组的名称为 000 文件的文件名(不含后缀),例如:GB4X0000,即不包含下划线(“_”)和编辑比例。

因此,转换或创建时,对应创建的数据集分组如果与数据源中已有的数据集分组重名,会导致转换或创建失败。可以先删除原来的数据集分组,或将结果存储到其他数据源中。

示例

示例一:以下代码示范了如何进行只读 S-57 海图数据集分组与可编辑 S-57 海图数据集分组之间的相互转换。

本例首先从存有海图数据的数据集分组获得海图数据集分组,再将其转换为可编辑 S-57 海图数据集分组以编辑海图,编辑完成后,再将可编辑 S-57 海图数据集分组转换为只读 S-57 海图数据集分组。使用如下代码时,请确保存在相应的数据源和海图数据,并且在输出数据源中已经建立一个名为“FIDN”的 FIDN 序列。有关 FIDN 序列的介绍,请参见 S57FeatureObjectIDInfo 类。

CopyC#
/// <summary>
/// 获得海图数据集分组,并对只读 S-57 海图数据集分组与可编辑 S-57 海图数据集分组进行相互转换。
/// </summary>
public void ChartDatasetGroupConversionExample()
{
    Workspace workspace = new Workspace();
    //获取海图数据所在数据源
    DatasourceConnectionInfo info1 = new DatasourceConnectionInfo(@"D:\Data\Chart.udb", "Chart", "");
    Datasource datasource = workspace.Datasources.Open(info1);

    //获取目标数据源,用于存放可编辑海图数据的数据源
    DatasourceConnectionInfo info2 = new DatasourceConnectionInfo(@"D:\Data\ChartForEdit.udb", "ChartForEdit", "");
    Datasource outputDatasource = workspace.Datasources.Open(info2);

    //获取海图数据的数据集分组
    DatasetGroup datasetGroup = datasource.RootGroup.ChildGroups["GB5X01NW_25000"];

    //从上一步得到的数据集分组获得海图数据集分组对象
    ChartDatasetGroup chartDatasetGroup = ChartDatasetGroup.CreateInstance(datasetGroup);

    //判断海图数据集分组对象的类型,如果是只读类型,则将其转换为可编辑 S-57 海图数据集分组,并存放在目标数据源中
    S57EditDatasetGroup s57EditDatasetGroup;
    if (chartDatasetGroup.Type == ChartDatasetGroupType.S57DatasetGroup)
    {
        s57EditDatasetGroup = ChartDatasetGroupManager.
                   ConvertToS57EditDatasetGroup((S57DatasetGroup)chartDatasetGroup, outputDatasource, "FIDN", 1);

        //获得可编辑 S-57 海图数据集分组后,可以对海图进行编辑,
        //请参阅 S57EditDatasetGroup 类的示例

        //完成编辑后,将可编辑 S-57 海图数据集分组转换为只读 S-57 海图数据集分组,并存放在目标数据源中
        S57DatasetGroup s57DatasetGroup = ChartDatasetGroupManager.ConvertToS57DatasetGroup(s57EditDatasetGroup, outputDatasource);
        //上一步转换操作所生成的数据集分组,可用于导出为 S-57 文件(000 文件)
    }
}

示例二:以下代码示范了如何创建一个新的可编辑 S-57 海图数据集分组。

本例通过单幅海图信息参数对象(S57CellInformation)创建一个新的可编辑 S-57 海图数据集分组。创建成功后,可以通过该可编辑 S-57 海图数据集分组对象进行特征物标数据集的增加、追加和修改操作,可参见 S57EditDatasetGroup 类的示例。使用如下代码时,请确保存在相应的数据源和海图数据,并且在输出数据源中已经建立一个名为“FIDN”的 FIDN 序列。有关 FIDN 序列的介绍,请参见 S57FeatureObjectIDInfo 类。

CopyC#
/// <summary>
/// 创建一个新的可编辑 S-57 海图数据集分组。
/// </summary>
public void CreateS57EditDatasetGroup()
{
    Workspace workspace = new Workspace();
    //获取目标数据源,用于存放可编辑海图数据的数据源
    DatasourceConnectionInfo info = new DatasourceConnectionInfo(@"D:\Data\ChartForEdit.udb", "ChartForEdit", "");
    Datasource outputDatasource = workspace.Datasources.Open(info);

    //构建一个 S57CellInformation 对象,并设置海图的基本信息
    S57CellInformation cellInformation = new S57CellInformation();
    cellInformation.AgencyCode = 70;
    cellInformation.CellName = "CN52T0TZ";
    cellInformation.CompilationScale = 40000;
    cellInformation.CoordinateFactor = 10000000;
    cellInformation.ATTFLexicalLevel = S57LexicalLevel.Level0;
    cellInformation.NATFLexicalLevel = S57LexicalLevel.Level2;
    cellInformation.IntendedUsage = S57IntendedUsage.Harbour;
    cellInformation.SoundingDatum = 13;
    cellInformation.VerticalDatum = 3;
    cellInformation.IssueDate = new DateTime(2013, 6, 27);
    cellInformation.EditionVersion = "0";
    cellInformation.UpdateVersion = "0";
    cellInformation.UpdateDate = new DateTime(2013, 6, 27);

    //调用 CreateS57EditDatasetGroup 方法创建一幅新的可编辑 S-57 海图数据集分组
    S57EditDatasetGroup s57EditDatasetGroup = ChartDatasetGroupManager.
               CreateS57EditDatasetGroup(cellInformation, outputDatasource, "FIDN", 2);
}

继承层次

System..::.Object
  SuperMap.Chart..::.ChartDatasetGroupManager

请参见