可编辑 S-57 海图数据集分组类。该类用于对海图进行编辑和检查。提供创建、删除物标数据集,向物标数据集追加记录,设置海图的基本信息,为海图创建链节点拓扑关系等编辑操作,以及对海图进行 S-58 数据检查。

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

语法

C#
public class S57EditDatasetGroup : ChartDatasetGroup

备注

可编辑 S-57 海图数据集分组类(S57EditDatasetGroup)提供对海图进行编辑和 S-58 检查的相关方法。需要注意,它并不直接存储海图数据,相应的海图数据存放在该 S57EditDatasetGroup 对应的数据集分组中,可通过 DatasetGroup 属性获取。

要对海图进行编辑,必须先获得对应的 S57EditDatasetGroup 对象。通常以下两种情形可获得一个可编辑 S-57 海图数据集分组:

  1. 对已有海图数据进行修改,需要从现有海图数据获得可编辑 S-57 海图数据集分组。其过程是,通过海图数据所在的数据集分组创建海图数据集分组(ChartDatasetGroup),然后判断其类型,如果是只读 S-57 海图数据集分组(S57DatasetGroup),需要通过 ChartDatasetGroupManager 类的 ConvertToS57EditDatasetGroup 方法将其转换为一个可编辑 S-57 海图数据集分组;如果类型是可编辑 S-57 海图数据集分组,则可以直接将海图数据集分组转换为可编辑 S-57 海图数据集分组。
  2. 生产一幅新的海图,需要创建一个新的可编辑 S-57 海图数据集分组。方法是通过 ChartDatasetGroupManager 类的 CreateS57EditDatasetGroup 方法创建一个可编辑 S-57 海图数据集分组。

下图展示了海图编辑的一般流程,其中红色线框内部分描述了 SuperMap 海图编辑的主要过程。

海图的编辑基于可编辑 S-57 海图数据集分组,编辑完成后(编辑的最后一步应该是构建(或重新构建)海图的拓扑关系),进行数据检查(Validate 方法),检查无误后再将可编辑 S-57 海图数据集分组转为只读 S-57 海图数据集分组,最后可以通过海图导出功能输出为 000 文件。严格按照以上流程进行海图数据的编辑,能够有效地保障海图数据的正确性和有效的数据交换和传输。

有关海图编辑和检查的详细内容和系统介绍,敬请阅读《海图技术文档》

示例

以下代码示范了如何通过可编辑 S-57 海图数据集分组对海图进行编辑。

本例假设已经获得了一个可编辑 S-57 海图数据集分组,然后编辑海图的基本信息,并进行特征物标数据集的增、删和追加操作。使用如下代码时,请确保已经准备好一个可编辑 S-57 海图数据集分组,用于追加的记录集,以及输出数据源。如何获得 S-57 海图数据集分组,请参见 ChartDatasetGroupManager 类的示例。

CopyC#
/// <summary>
/// 通过可编辑 S-57 海图数据集分组编辑海图。
/// </summary>
/// <param name="s57EditDatasetGroup">指定的可编辑 S-57 海图数据集分组。</param>
/// <param name="recordset">指定的待追加到指定特征物标数据集的记录集。</param>
public void EditChartExample(S57EditDatasetGroup s57EditDatasetGroup, Recordset recordset, Datasource outputDatasource)
{
    //对海图进行编辑
    //修改海图的部分信息
    S57CellInformation cellInformation = s57EditDatasetGroup.CellInformation;
    cellInformation.ATTFLexicalLevel = S57LexicalLevel.Level1;
    cellInformation.NATFLexicalLevel = S57LexicalLevel.Level2;
    cellInformation.UpdateVersion = "1";

    //创建新的特征物标数据集
    DatasetVector newDataset = s57EditDatasetGroup.CreateFeatureDataset(83, DatasetType.Region);
    if (newDataset != null)
    {
        //对指定的特征物标数据集追加记录
        s57EditDatasetGroup.AppendFeatureDataset(83, recordset, new String[] { "CATMPA", "DATSTA", "RESTRN", "STATUS" }, 
                    new String[] { "CATMPA", "DATSTA", "RESTRN", "STATUS" }, false);

        //删除指定的特征物标数据集
        s57EditDatasetGroup.RemoveFeatureDataset(83, DatasetType.Region);
    }

    //在编辑过程的最后,重新构建海图的链节点拓扑关系
    Boolean isSuccessful = s57EditDatasetGroup.BuildS57TopologyRelation(false);
    if (!isSuccessful)
    {
        Console.WriteLine("拓扑关系构建失败!");
    }

    //注意,完成编辑后,应进行数据检查,检查无误后再转为只读 S-57 海图数据集分组
    ChartValidateParameter parameter = new ChartValidateParameter();
    parameter.AreCheckMandatoryS57Fields = true;
    parameter.AreCheckFeatureObjects = true;
    parameter.AreCheckSpatialAttributes = true;
    parameter.AreCheckFeatureRelationships = true;
    parameter.AreCheckSoundings = true;
    parameter.IsCheckChainNodeTopology = true;

    ChartValidateResult[] results = s57EditDatasetGroup.Validate(parameter, false);
    if (results.Length != 0)
    {
        Console.WriteLine("数据检查到错误!请按照检查结果进行修改。\n");
        for (Int32 i = 0; i < results.Length; i++)
        {
            Console.WriteLine("错误" + (i + 1) + ":" + results[i].CheckID + " " + results[i].ErrorMessage + "\n");
        }
    }
    else
    {
        //如果未检查出错误,则可以将海图数据集分组由可编辑类型转为只读类型
        S57DatasetGroup s57DatasetGroup = SuperMap.Chart.ChartDatasetGroupManager
            .ConvertToS57DatasetGroup(s57EditDatasetGroup, outputDatasource);
    }
}

继承层次

System..::.Object
  SuperMap.Chart..::.ChartDatasetGroup
    SuperMap.Chart..::.S57EditDatasetGroup

请参见