戴劲松,杨明
(宁波市测绘和遥感技术研究院,浙江 宁波 315042)
地图符号是地图的语言单位,是可视化表达地理信息内容的基本工具,它本质上是用来表示实地物体与现象的特定图解记号,由点、线和几何图形所组成,具备3个基本要素,即形状、尺寸和颜色[1]。符号化是地图绘制时现实地物抽象为符号的过程。符号化后的地物往往带有部分地物属性特征(如地物长度、形状、面积等),这些特征既方便地图使用者辨识地物,也会向地图使用者传达图形要素信息。在互联网技术尚未得到普及的年代,地图符号样式及类型没有得到较好的统一,各地图符号代表类型、意义不尽相同,但后续随着互联网技术的普及较好地解决了符号统一问题,而目前各平台程序如何高效并精确描述地图符号成为新的挑战。
目前国内外GIS平台在符号库中设计符号的途径主要可概括为4种[2]:
(1)文本编辑器设计法。它利用文本描述绘制的符号,其缺点是设计速度慢,且符号编写的过程中容易产生语法错误,不能实时观察设计的符号;
(2)系统提供的二次开发语言编程。某些地物符号由于地物本身结构复杂,或样式独特具备唯一性,不易采用文本编辑,因此需要借助开发语言完成描述;
(3)系统本身的图形编辑功能。它将符号当作普通的图形块,追加符号码等描述项后存储到符号库,随后根据需要或应用,绘图时调用符号库中的图形块显示在地图上;
(4)系统提供的符号设计功能。使用者可将系统本身提供的基本符号与自定义符号(如点符号)进行某种组合、位移、放缩,随后得到制图输出所需的复杂符号(如复杂线型和面状填充符号),这也是目前较为流行的符号设计方式。
除符号设计方法外,地图符号的组织格式也具备系列的发展研究。可根据地图符号组织的数据格式的不同(即矢量数据或栅格数据),将地图符号分为基于矢量数据的符号,基于栅格数据的符号和基于两种混合数据的符号[3]。对应3种数据类型符号,已有许多研究陆续提出了组织方法,用以提高不同应用目的下符号的存储与可视化效率[4~7],如:在符号绘制的过程中,借助图形系统与图像处理软件绘制图形块[8,9];新兴地理信息表达技术,如WebGIS技术用网络数据交换格式(如JSON)表达并解析符号[10,11];三维地理信息技术也发展出对应的符号化方法[12,13]。
众多类型的符号库中,矢量符号库用离散形式的坐标点对表示的点、线、面状符号的有序集合[14],库中符号占用内存小、冗余数据少、调用效率高,符合土地调查工作要求,根据上述各研究的发展,将其应用于土地调查是合理且具备潜力的。
常规建立矢量符号库的方法有3种,分别是程序块法、信息块法与综合法。程序块法是通过系统提供的开发语言直接编写图形符号或符号识别语句;信息块法则将符号和绘图程序独立,符号被离散为单纯线划;综合法即为两者的结合,根据不同的需求,将前两种方法不同程度上协调起来。
本文以不产生冗余符号化数据为基本目标,将符号通过程序控制以图面渲染的方式而非以矢量实体形式展现在图面上,这样既能保证数据规范制图的要求,又避免了因为地物符号化而产生的冗余数据,从而大大节省数据存储空间,提升数据检索效率和图面浏览速度。
在上述研究基础之上,本研究按照土地调查数据制图的相关标准,提取标准中所规定的符号图元与参数,使用矢量图元的方式制作要素符号,实现土地数据要素符号的标准化,形成完整的土地调查要素符号库。设计并研发通用符号库访问接口,为不同的制图软件使用符号库提供途径,实现符号共享与符号库的跨平台应用。
土地调查中的各类地物按照类型可分为点状地物、线状地物、面状地物和注记地物等,地物在数据库中表达时,若采取类似面向对象方法,在符号层定义矢量图元并予以表达,便可达到符号冗余小,结构简洁的目标[15]。据此,本研究符号化的基本是对图元的抽象定义,同时定义需满足图元的可组织性及对地物符号的全覆盖性,目标需建立在对实体地物结构,各平台符号化格式、表达机制,实际表达效果全面了解的基础上。图元定义完毕后,各类地物符号便可由地图符号库模板实现,模板记录土地调查库中地物实体和地物符号的基本属性信息,包括地物名称、地物实体类型(点、线、面、注记)及地物符号语句。符号库模板完善后,对地物符号的表达会转化为对地物已存储的符号语句及完成这个语句相关图元的表达。
根据土地调查要素符号标准,并参考各平台符号定义格式与表达机制,测试比对实际符号化结果,归纳地物符号类如下:
(1)点状地物:如民用机场、高程点等。
(2)简单线状地物:包括拟合复合线(如公路)、不拟合复合线(如境界线)和两边平行的双线地物(如不依比例的管道运输用地等)。
(3)两点定位地物:需要两个定位点来确定符号形状及位置的地物。
(4)四点定位地物:需要三个点或四个点来确定形状的地物。
(5)范围面地物:除了四点定位面状地物外的一般面状地物及其内部填充,如各类土地利用面状图斑等。
(6)程序控制复杂地物:需要使用程序控制符号绘制的复杂地物,前5类地物无法描述的复杂面状实体。
(7)文字类地物:有定位点的文字型地物,如图面文字注记等。
地物符号类总结了图面地物表达形式,同类符号具有一定的相似特征,据此抽象出矢量图元,从结构上可作为符号构成的基本,从效果上可有效精简符号形式。
本文将各类地物符号作为整体拆分,多次拆分后,各类符号拆分为单点、实线、圆、圆弧、实心三角形、实心圆、实心圆弧、基本文字八类,因此可将此八类看作是组成地物符号的最小模型单位,定义为基本图元,通过图元的组合表达各类地物符号。
确立符号表达机制后,若要将其与空间数据库关联,根据数据库中的地类数据类别在图面表达,需在符号库链接时将数据库、比例尺、实体要素、符号这几者关联,实现不同比例尺下的数据符号化效果[16]。为达到上述效果,符号库模型在建立时,需将对应的数据库的结构、属性、地物编码体系等内容写入符号库配置表中,程序在数据库中可根据此类模型,关联空间数据与地物符号,达到精确高效的符号化效果。
目前常用的GIS平台,如ArcGIS、MapGIS等,调用符号库绘制地物符号的规则不同。土地调查作业不局限在单一平台,因此矢量土地调查符号库还应实现跨平台效果。
符号化分发步骤分为3步,第1步是初始化,即读取定义符号化的模板(db文件),解析符号化语句,构建符号化指针;第2步是根据编码获取符号化指针;第3步是根据符号化指针和实体几何属性及扩展属性分发符号,获取符号打散结果,最终利用回调函数获取扩展属性及符号化效果。其中,第1步只需在符号化开启时执行1次,第2步和第3步在每次进行实体分发依次进行。依照符号化分发步骤,设计并编写通用符号库接口。
根据土地调查要素符号标准,各平台符号定义格式、表达机制与大量测试比对拆分作业,本研究将地物符号看作基本矢量图元组合、嵌套的整体,即地物符号的主实体经多次拆分被分解为单点、实线、圆、圆弧、实心三角形、实心圆、实心圆弧、基本文字八大基本图元[17]。各地物符号由符号库模板记录了实体符号间一一对应的基本属性与符号语句,其中,主实体描述存储于符号表,子实体描述存储于符号辅助表,子实体与上级实体通过编码关联。
符号库模板中,一个符号由一条或多条符号描述语句定义,一条语句是一个字符串,对应一种基本矢量图元。单一符号可以包含多个语句,以图1所示草地符号为例,符号主体可拆解为三条独立的矢量线段,对于单条矢量线段,即单个实线图元,语句通过定义实线起点、终点便定义了符号形状:
图1 符号库模板中的草地符号
如图1所示草地描述语句,横线部分语句表述为:
2;0.15;-1.25,0;1.25,0
此语句代表一条线宽为0.15,以中点为原点,坐标从(-1.25,0)的起点至(1.25,0)的终点的线要素。
第二句语句表述为:
2;0.15;-0.5,1.3;-0.5,0
此语句代表一条线宽为0.15,以中点为原点,坐标从(-0.5,1.3)的起点至(-0.5,0)的终点的线要素。
第三句语句表述为:
2;0.15;0.5,1.3;0.5,0
此语句代表一条线宽为0.15,以中点为原点,坐标从(0.5,1.3)的起点至(0.5,0)的终点的线要素。
坐标图解分析如图2所示:
图2 草地符号坐标图解分析
为实现将数据库-地物-符号三者一一对应,形成稳定的符号调用模型和机制,也为了使符号库能够适应于各种不同的数据库结构和编码体系,本项目将“符号库模型”的概念引入符号库建立中,使一个符号库能够根据此类模型自动挂接到符合的数据库中,实现地物的正确识别和符号化。
成果符号库中,除定义了各个地物的各个符号之外,还通过配置表格定义了对应数据库的图层、字段信息、地物编码、颜色体系,建立了地物与符号间的一一对应关系。
图层信息表:定义了该模板对应的空间数据库中包含的要素类及其基本属性。数据在进行符号化时通过此表可定位地物所在图层(表1)。
图层信息表 表1
字段定义表:定义了数据中一些与地物符号识别、地物符号相关的字段,如地物编码所在字段、高程信息所在字段、角度信息所在字段等,而数据在符号化时,需根据这些字段进行相应地物的符号化(表2)。
字段定义表 表2
地物编码配置表:定义了地物的代码、所在图层、颜色号等信息,此配置表作为最为重要的定义表,将模型中数据库、地物和符号进行了一一对应,使数据在挂接符号库时能正确将数据与符号对应上并正确符号化(表3)。
地物编码配置表 表3
续表3
字体定义表:Textstle表定义了字体的样式,通过这个表可以在符号化是自动根据定义的字体样式符号化文字类符号(表4)。
字体定义表 表4
颜色定义表:表定义了符号显示时的颜色号,可同时定义一种颜色的RGB和CMYK的色值(表5)。
颜色定义表 表5
跨平台有两层概念,一是跨软件层次的平台,如idata和ArcGIS为两个平台,但是它们可以共用一套符号化的定义和接口,使得符号定义一次,在各个软件平台通用;二是跨系统平台,由于符号化使用C++语言编写,编译后可以在各大系统使用,如iData(Window平台)与iDataMoblile(Android平台),其他如Linux平台一样可以使用。
符号库定义打散输出的基础图元的接口,如基本的点、线、面、圆、圆弧等,使得各个平台都能接收打散后的结果,其中接口都定义为虚函数,各个不同的软件平台需要进行实现,如ArcGIS图面渲染时可以进行GDI+的绘制,导出DWG分发时可以生成点、线、面等实体[18,19]。借助于这种接口的设置,不同平台不同的用途使用相同的符号化打散技术可以实现需求功能。
本文研发了ArcGIS平台符号化插件验证跨平台符号化实现效果。ArcGIS平台符号化插件用于在ArcGIS平台加载、解析符号库模板:插件通过解析符号描述语句,渲染数据库地物,实现实时符号化。
使用示例数据库,插件加载、解析符号库效果如图3所示:
图3 ArcGIS平台符号化效果示例
测试结果显示,ArcGIS平台符号化插件测试结果良好,可做到实时渲染任意加载的mdb数据,同时保证了地物符号化准确度与效率。
模型驱动的符号设计可以应用到国土调查中,矢量符号在多种GIS平台与项目应用中均能表现出优秀的适应性,其本身也具备提高数据组织与利用效率的特点,在信息化的土地调查作业中,矢量符号可显著提高数据表达的准确性、节省数据存储空间及优化数据检索速度。本文致力于集成高效化的矢量符号库,它不同于传统的程序块与信息块法,而是将所有地物符号抽象为基本矢量图元或图元组合,利用骨架线符号化渲染技术实时生成符号。
本文将矢量符号融入土地调查工作,既是土地调查工作对数据高效性的要求,也是矢量符号投入多元应用的试验。虽然目前两者适用性良好,矢量符号可以满足调查作业的需求,但在具体应用中,发现其对复杂符号的适应性仍显薄弱,这是由于其数据结构带来的适应性问题,在未来的研究中,仍有进步的空间。可以预见的是,随时代的发展,土地调查势必会产生更多方位更多层次上的要求,符号化技术在应对这些可能出现的要求时也需保持不断进步,做出新的突破。