摘要: 空间数据是GIS系统的核心,而数据的可视化显示是GIS系统区别于其他信息系统的重要特征,更是GIS中最常用的操作,因此本文首先就空间数据可视化的流程、方法进行了深入研究,然后深入分析了GeoTools中空间数据可视化的流程,最后基于以上研究,对基于开源GIS产...
空间数据是GIS系统的核心,而数据的可视化显示是GIS系统区别于其他信息系统的重要特征,更是GIS中最常用的操作,因此本文首先就空间数据可视化的流程、方法进行了深入研究,然后深入分析了GeoTools中空间数据可视化的流程,最后基于以上研究,对基于开源GIS产品的应用开发方式按照不同层次分类和比较分析,得出基于GeoTools开发应用的优势所在,并设计了基于GeoTools开发GIS应用的实用框架。
基于 GeoTools的空间数据可视化研究
空间数据是GIS操作的核心,矢量数据的可视化过程可分为数据访问和数据显示两个过程。数据访问过程又分为: 源数据访问、内存数据模型封装、过滤;数据显示过程又分为: 符号化图形模型、坐标转换、图形绘制与显示。
空间数据访问
采用面向对象思想,GIS中的对象实体按不同操作层次划分,包括要素(Feature)、图层(MapLayer)、地图(Map),对象间层次关系,要素是地图操作对象中具有实际意义的最小单元,对应于用点、线、多边形简单几何图形表示的具有特定含义的客观世界中的物理实体,要素可以是由一种几何形状表示的简单要素,也可以是由多种几何形状聚合表示的复杂要素;图层是具有相同或相似物理意义的要素的聚合(如:用点表示的桥梁要素的聚合可以组成一个图层);地图由多个图层叠加组成,表示由多种物理意义的要素聚集的信息表达。
应用GeoTools进行空间数据访问,GeoTools以插件库的形式提供对多种主流地理数据格式的访问支持,包括shapefile、arcsde、wfs等矢量数据,postgis、oraele、db2等数据库,mif、geotiff、arcgrid等栅格数据。先介绍几个和数据访lb]相关的包:org.geotools.data包负责地理数据的读写(如:ShapefileReader用于读取shpfile数据),org.geotools.geometry包负责提供对JTS的调用接口,以将地理数据封装成JTS中定义的几何对象(Geometry),org.geotools.feature包负责封装空间几何要素对象(Feature),对应于地图中一个实体,包含:空间数据(Geometry)、属性数据(Attribute)、参考坐标系(ReferencedSystem)、最小外包矩形(EnveloPe)等属性,是GIS操作的核心数据模型。
在地图访问中,Map对象包含一个MapContext对象,用于保存当前地图包含的多个图层对象,每个图层对象维持一个访问该图层对应的源文件或数据库表的连接FeatureSource,当访问空间数据时,FeatureSource调用FeatureReader进行要素对象的读操作,后者利用AttributeReader从具体数据格式中读取一条记录,调用FeatureBuilder封装成特定图层类型Schema的Feature对象,使用filter对象对其进行过滤,最后将满足过滤条件的要素对象集返回。以读取shapefile矢量数据文件为例说明空间数据读操作的序列图。
空间数据显示
地图的显示是多个图层进行叠加显示的结果,显示时按照图层所处的不同层次由低层到高层分别进行符号化显示。显示模块基于数据访问模块的基础上,对结果要素对象集进行符号化处理、渲染,地理/设备坐标转换,绘图类绘制,设备显示,地图显示流程。GeoTools提供对空间要素的显示操作支持,相关类包括:org.geotools.map定义了对地图图层及其属性的描述,便于图层管理;org.geotools.styling包含对图层样式定义文件(.sld)的访问,获得图层渲染样式对象集(FeatureTypestyler),由具体样式对象(StyleZD)构成;org.geotools.renderer包含对要素对象集(FeatureCollection)使用渲染样式进行符号化处理,得到符号化图形对象(Styledshape),并使用JavaGraphieZD绘制,调用设备进行显示。SLDParser类访问样式定义文件(.sld),生成要素渲染对象(FeatureTypestyler);
AffineTransform类根据当前地理显示区域与屏幕范围产生映射矩阵,用于地理/屏幕坐标转换;Rendere:类从底图层开始,访问每个图层的要素对象结果集,使用要素渲染对象进行符号化处理,并调用设备程序显示。