程序集: 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 属性获得。
- 将 000 文件导入为 SuperMap 数据集分组,以及只读 S-57 海图数据集分组对应的数据集分组的名称为 000 文件的文件名(不含后缀) + “_” + 编辑比例,例如:GB4X0000_52000。
- 可编辑 S-57 海图数据集分组对应的数据集分组的名称为 000 文件的文件名(不含后缀),例如:GB4X0000,即不包含下划线(“_”)和编辑比例。
因此,转换或创建时,对应创建的数据集分组如果与数据源中已有的数据集分组重名,会导致转换或创建失败。可以先删除原来的数据集分组,或将结果存储到其他数据源中。
示例
示例一:以下代码示范了如何进行只读 S-57 海图数据集分组与可编辑 S-57 海图数据集分组之间的相互转换。
本例首先从存有海图数据的数据集分组获得海图数据集分组,再将其转换为可编辑 S-57 海图数据集分组以编辑海图,编辑完成后,再将可编辑 S-57 海图数据集分组转换为只读 S-57 海图数据集分组。使用如下代码时,请确保存在相应的数据源和海图数据,并且在输出数据源中已经建立一个名为“FIDN”的 FIDN 序列。有关 FIDN 序列的介绍,请参见 S57FeatureObjectIDInfo 类。
/// <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 类。
/// <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); }
继承层次
SuperMap.Chart..::.ChartDatasetGroupManager