程序集: SuperMap.Chart (in SuperMap.Chart)
版本: dll
语法
C# |
---|
public class S57FeatureObjectIDInfo |
备注
S-57 特征物标标识信息包括两项内容:物标简称和特征物标标识符。在某些功能,如获取水深组、编辑海图关联关系时,需要指定“特征物标标识信息”以定位到相关的物标对象。系统首先需要通过“物标简称”找到物标所在的数据集,再根据特征物标标识符定位物标对象。
- 特征物标标识符(FOID)
- FOID 的分配与管理
- 为不同的数据源分配不重叠的 FIDN 区间。Datasource 类的 CreateSequence 方法允许用户指定这样一个区间,并生成范围为指定区间的一个序列,它以指定的步长(一般设为 1)进行自增长。数据源根据该序列自动为新增的物标对象分配 FIDN。
- 将 FIDS 划分为若干不重叠的区间,这一步需要数据生产者来做。事实上,在将 FIDN 划分为区间的前提下,每个数据源可以使用所有 6 万多个 FIDS,但将 FIDS 进行区间划分更利于合理使用 FIDS 资源。
- 为每个数据源分配唯一的 FIDN 区间与 FIDS 区间的组合。SuperMap 无法帮助用户做这件事,这需要生产机构的成员对此达成共识并协调分配这些区间组合。
特征物标标识符(FOID),是一种 S-57 特征物标标识,是物标的全球唯一标识。在 S-57 标准中,使用“长名”作为特征物标标识符。物标的特征物标标识符,可以通过 ChartObjectInfo 对象的 LongName 属性或物标数据集的“LNAM”属性字段获得。
特征物标标识符是一个包含 17 个字符的字符串,由特征物标标识符字段 FOID 的三个子字段串接而成,如下表所示。其中,特征标识号和特征标识区分必须用 0 充满。例如,生成机构简称为 CN,特征标识号为 123,特征标识区分为 3,则特征物标标识符应为“CN000000012300003”。
子字段名称 | 代码 | 长度 | 内容或值范围 |
---|---|---|---|
生产机构 | AGEN | 2 个字符 | 机构代码 |
特征标识号 | FIDN | 10 个字符 | 范围:1 到 232-2 |
特征标识区分 | FIDS | 5 个字符 | 范围:1 到 216-2 |
对于 ENC,同一物标的多种实例可以使用相同的特征物标标识符。例如,在不同比例尺(或不同用途)的电子海图中,同一物标可能被抽象为不同的几何类型,如沉船可以表达为线或面,但它们具有相同的特征物标标识符;或者一个物标被分割到不同的海图单元(可理解为图幅)时,也使用同一个特征物标标识符。但对于不同的物标,特征物标标识符不允许重复使用,即使是在一个特征物标被删除后。
当物标对象被创建后,相应的 FOID 也被创建并分配给物标对象。在同一生产机构内部,FOID 的唯一性取决于 FIDN 和 FIDS 的唯一组合。因此,必须对 FIDN 和 FIDS 进行合理的划分使用,以保证 FOID 的唯一性。这里给出一种推荐的解决方案:
该方案以数据源为单位。首先请了解,SuperMap 以数据源(Datasouce)作为数据的存储容器,每个数据源内可以存储多幅海图,一幅海图在创建或编辑时,用户可以指定一个 FIDS(参见 ChartDatasetGroupManager 类的 CreateS57EditDatasetGroup、ConvertToS57EditDatasetGroup 方法)。
需要特别注意 FIDN 区间的合理划分。由于目前一幅海图只分配 1 个 FIDS,因此,当该幅海图把分配给数据源的所有 FIDN 使用后,将不能继续添加物标对象。这时,可以为该数据源重新分配一个更大的 FIDN 区间,然后重新为所有物标对象生成 FOID(参见 BuildFOIDs 方法)。这不会影响到数据源内的其他海图,除非也为它们重新构建 FOID。注意,为数据源重新分配 FIDN 区间前,需要使用 Datasource 类的 DeleteSequence 方法删除现有区间,因为重新创建的区间必须仍然使用原来的区间名称。同样,也可以缩减区间范围以节省资源。总之,在发布数据前,可以根据具体情况对 FIDN 区间进行调节。
继承层次
SuperMap.Chart..::.S57FeatureObjectIDInfo