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