发布网友 发布时间:2022-12-25 10:23
共1个回答
热心网友 时间:2023-10-12 03:54
通过矢量符号描述语言,可以知道符号具体形状;通过符号化指令,可以对指定的位置对点、线、面物标进行绘制;那落实到S-57数据中的一条条记录而言,具体调用哪些符号化指令,这就需要用到符号指令查询表(Look-Up Tables)。S-57物标目录中的每一类物标,都可以通过查询表获取其符号化指令。
查询文件的编排规则为每一行数据的前四个字符,表示字段的名称;第5到10个字符,表示字段的长度;第10个字符之后的内容,表示字段的内容。
上面包含两条记录的相关说明,每个符号指令由如下字段构成(以首条记录为例):
仿照上述查询表记录结构,新建类 S52LookUp 。
将查询表文件 S52LookupTable 添加进项目 S57Parser ,新建单例模式的类 S52LookUps 存储整个查询表,让其继承至 List<S52LookUp> :
查询表中规定了物标的显示优先级、显示指令,是否被雷达图像覆盖等。海图绘制时,先遍历各物标,通过物标类别、几何类型,用户显示设置(对于面物标和点物标有两个显示方式)为查找条件,找到查询表匹配的记录。若匹配记录为0,则使用缺省指令;若匹配记录为1,则直接使用该指令;若匹配记录大于1,则需要利用属性值进一步筛选。
利用属性筛选的规则:
新增用户设置,记录面物标是显示符号化边界还是简单边界,点物标是显示简单符号还是纸质海图符号。
修改类 S57Feature ,添加字段 public S52LookUp LookUp 及比例尺范围。
工具类中 S52Tools 中,新增静态方法 S52LookUp FindLookUpEntry(S57Feature f) ,为特征记录设置符号指令: