模块组织
目的和范围
本文档解释 GeoTools 库中模块的组织方式。它描述了不同类型的模块、它们的层次关系、依赖关系以及代码库的整体结构。有关特定模块实现的信息,请参阅 空间数据模型 和 数据访问框架 中的相应文档。
模块类型
GeoTools 组织成模块的层次结构,每个模块具有特定的职责。这些模块根据其在库中的作用分为四个主要类别。
核心模块
核心模块构成了 GeoTools 的基础,提供所有其他模块所需的基本接口和基础功能。这些模块定义了在整个库中使用的基本数据结构和 API。
| 模块 | 描述 | 主要职责 |
|---|---|---|
| gt-opengis | OGC/ISO 接口 | 来自 Open Geospatial Consortium 的标准接口 |
| gt-api | GeoTools 接口 | 在整个库中实现的标准接口 |
| gt-metadata | 元数据 | 元数据和核心工具类的实现 |
| gt-referencing | 参考系统 | 坐标参考系统 (CRS)、转换和变换服务 |
| gt-main | 主模块 | 接口和 factory 系统的默认实现 |
库模块
库模块构建在核心模块之上,提供多个插件使用的通用实现和工具。这些模块处理地理空间数据处理的特定方面。
| 模块 | 描述 | 主要职责 |
|---|---|---|
| gt-coverage | Grid Coverage | 支持栅格和图像处理 |
| gt-cql | CQL | 约束查询语言解析器 |
| gt-render | 渲染 | 空间数据的可视化 |
| gt-jdbc | JDBC | 通用数据库访问功能 |
| gt-xml | XML | XML 解析和编码 |
插件模块
插件模块为特定数据格式或服务提供实现。它们通常依赖于库模块并扩展功能以支持特定的文件格式、数据库或 Web 服务。
| 模块 | 描述 | 主要职责 |
|---|---|---|
| gt-shapefile | Shapefile | 访问 ESRI Shapefiles |
| gt-geotiff | GeoTIFF | GeoTIFF 栅格格式支持 |
| gt-imagemosaic | ImageMosaic | 地理参考图像的镶嵌 |
| gt-geopkg | GeoPackage | OGC GeoPackage 格式支持 |
| gt-jdbc-postgis | PostGIS | PostgreSQL/PostGIS 数据库访问 |
| gt-jdbc-oracle | Oracle | Oracle Spatial 数据库访问 |
扩展模块
扩展模块提供构建在核心库之上的附加功能,但更加专门或可选。这些模块通常提供更高级的功能。
| 模块 | 描述 | 主要职责 |
|---|---|---|
| gt-brewer | Brewer | ColorBrewer 和其他样式工具 |
| gt-css | CSS | 基于 CSS 的地图样式 |
| app-schema | Application Schema | 支持复杂的 Feature 类型 |
模块层次和依赖
下图说明了关键 GeoTools 模块之间的层次关系和依赖关系:
Maven 项目结构
GeoTools 使用 Maven 进行构建管理和依赖解析。模块组织反映在项目的目录结构和 POM 文件中。
顶层项目结构由三个主要模块组成:
模块依赖管理
GeoTools 使用 Maven 的依赖管理来控制模块如何相互依赖以及外部库。根 POM 定义了外部依赖的通用版本,然后由各个模块引用。
依赖模式
模块组织遵循以下依赖模式:
- 核心独立性: 核心模块对外部库的依赖最少
- 向上依赖: 模块可以依赖于同一级别或层次结构中较低级别的模块
- 无循环依赖: 依赖图是有向无环图
- Factory 系统: 通过 factory 查找方法获取实现,而不是直接实例化
模块 Artifact ID
每个模块的 Maven artifact ID 遵循一致的命名模式:
| 模块类型 | 命名模式 | 示例 |
|---|---|---|
| 核心 | gt-[name] | gt-api、gt-main |
| 库 | gt-[name] | gt-coverage、gt-cql |
| 插件 | gt-[name] | gt-shapefile、gt-geotiff |
| JDBC 插件 | gt-jdbc-[database] | gt-jdbc-postgis |
| 扩展 | gt-[name] 或 [name] | gt-css、app-schema |
在项目中包含模块
在自己的项目中使用 GeoTools 时,可以根据需求包含特定模块。每个模块单独版本化并发布到 Maven 仓库。
典型依赖模式
基本 GIS 应用程序: 包含核心模块和特定插件
<dependency> <groupId>org.geotools</groupId> <artifactId>gt-main</artifactId> <version>${geotools.version}</version> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-shapefile</artifactId> <version>${geotools.version}</version> </dependency>数据库应用程序: 包含 JDBC 支持和数据库特定插件
<dependency> <groupId>org.geotools</groupId> <artifactId>gt-jdbc</artifactId> <version>${geotools.version}</version> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-jdbc-postgis</artifactId> <version>${geotools.version}</version> </dependency>栅格处理: 包含 coverage 支持和栅格插件
<dependency> <groupId>org.geotools</groupId> <artifactId>gt-coverage</artifactId> <version>${geotools.version}</version> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-geotiff</artifactId> <version>${geotools.version}</version> </dependency>
构建配置文件和可选模块
GeoTools 使用 Maven profiles 来控制构建中包含哪些模块。这允许根据构建需求包含或排除可选模块。
| Profile | 目的 | 示例用法 |
|---|---|---|
| all | 构建所有模块 | mvn install -Dall |
| docs | 包含文档 | mvn -P docs install |
| pending | 包含实验性模块 | mvn -P pending install |
| online | 启用在线测试 | mvn -P online install |
模块测试和质量保证
每个模块包含自己的测试套件以确保功能。测试框架支持不同测试场景的多种 profiles:
- 单元测试: 基本功能测试
- 集成测试: 与其他模块一起测试
- 在线测试: 需要网络访问的测试
- 压力测试: 性能和负载测试
许多模块还构建测试 JAR,可被其他模块重用以进行测试:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>