1.2 GeoTools架构
GeoTools作为一个持续迭代了二十多年的开源项目,其代码高度模块化与规范化,了解 GeoTools代码目录结构有助于厘清应用程序所需的依赖包。本节介绍GeoTools代码仓库的各个部分以及它们是如何组合在一起的。为了让特定应用程序仅包含其需要的依赖,用户可以为项目选择适量的GeoTools依赖包。GeoTools主要模块如图1-2所示,从左到右依次为接口层、实现层和插件层,模块的依赖关系为从上到下,即上面的模块依赖下面的模块。
图1-2 GeoTools主要模块
接口层封装了空间数据的核心规范。接口层主要包括三大类规范,分别是:GeoAPI,这是GeoTools提供的一套稳定的空间数据操作接口;Java拓扑库(Java Topology Suite,JTS),这是使用Java代码实现的一套几何类库;OpenGIS接口,这是对OpenGIS各类规范的Java接口的定义。
实现层是GeoTools的核心,是各类空间数据规范的具体代码实现。从底向上包括:元数据模块Metadata,负责处理各类空间数据格式的元数据信息;空间坐标系模块Referencing,负责各类地理坐标系和投影坐标系的定义与转换;栅格数据模块Coverage,负责栅格数据的读写;Main模块,负责各类常用工具、数据结构和框架的定义;矢量数据模块Data,负责所有矢量数据的读写;关系数据库操作模块JDBC,负责读写各类关系数据库和对应的空间数据扩展;空间查询语言模块 CQL,定义了一套逻辑完备的空间查询语言,用于实现各类空间数据查询;空间数据渲染模块Render,负责矢量数据和栅格数据的渲染;XML模块,用来操作各类使用XML格式描述的空间数据和元数据信息。
插件层是GeoTools扩展能力的体现。插件层基于接口层和实现层,是对具体应用的对应实现,具体包括欧洲石油调查组织(European Petroleum Survey Group,EPSG)的空间坐标系定义扩展模块epsg-hsql,该模块记录了欧洲石油调查组织的6000多个地理坐标系定义;Shapefile为空间数据文件格式扩展模块,该模块负责对Shapefile这类十分常用的矢量数据格式提供读写和索引的支持;空间数据库模块PostGIS负责对当前业界十分常用的PostGIS空间数据库提供读写和索引的实现;XSD WMS负责对基于XML的一些OGC的数据格式和服务规范提供实现。