Skip to content

核心架构 ​

GeoTools 核心架构定义了支持整个 GeoTools 库的基础组件和设计原则。本文档解释了主要架构元素、它们之间的关系以及 GeoTools 代码库的整体组织。有关特定实现的信息,请参阅相应的功能特定页面。

整体架构 ​

GeoTools 遵循模块化架构,围绕地理空间数据处理的关键抽象进行组织。项目结构分为多个层次,组件之间具有清晰的依赖关系。

SVG
100%

核心模块 ​

GeoTools 库围绕一组基本模块设计,这些模块为所有功能提供基础:

模块目的关键抽象
gt-api核心接口DataStore、Feature、FeatureSource、Filter
gt-metadata基础服务和工具Citations、Logging、Factory 系统
gt-referencing坐标参考系统CRS、MathTransform、Position、Bounds
gt-main默认实现DataStore 实现、Geometry 工具
gt-coverage栅格数据处理GridCoverage2D、GridCoverageReader

这些模块构成了 GeoTools 的骨干,通过精心管理的依赖关系确保高级组件可以独立使用。gt-api 模块(原 gt-opengis)定义了在整个库中实现的核心接口。

数据模型 ​

GeoTools 实现了一个综合的数据模型来处理矢量和栅格地理空间数据。

SVG
100%

空间数据抽象 ​

GeoTools 中的空间数据模型建立在几个关键抽象之上:

  1. Feature: 矢量数据的基本单位,通常表示具有属性和几何形状的地理实体
  2. GridCoverage2D: 栅格数据的基本单位,将渲染图像与空间参考信息耦合
  3. Position: 表示坐标空间中的点 (GeoTools 30.x 中替换了 DirectPosition)
  4. Bounds: 表示坐标空间中的边界框 (GeoTools 30.x 中替换了 Envelope)
  5. CoordinateReferenceSystem: 定义 features 和 coverages 的空间参考系统

最常用的实现之一是 ReferencedEnvelope,它将 JTS Envelope 与坐标参考系统结合:

SVG
100%

数据访问框架 ​

GeoTools 数据访问框架提供了一致的 API,用于从各种来源访问矢量和栅格数据。

SVG
100%

该框架围绕以下核心接口设计:

  1. DataAccess/DataStore: 用于矢量数据访问

    • ContentDataStore: 大多数基于文件的数据存储的基础实现
    • JDBCDataStore: 数据库支持的数据存储的基础实现
  2. FeatureSource: 提供对矢量数据的查询功能

    • FeatureCollection: 查询的结果,提供对 Features 的迭代
  3. GridCoverageReader: 用于栅格数据访问

    • AbstractGridCoverageReader: 基础实现
    • 格式特定的实现 (GeoTIFF、ImageMosaic 等)

模块依赖 ​

GeoTools 模块具有一组精心管理的依赖关系,旨在最小化耦合并防止循环依赖。

SVG
100%

依赖结构的设计确保:

  1. API 模块具有最少的依赖
  2. 实现模块依赖于 API,但反之不然
  3. 可选依赖被明确标记和隔离
  4. 高级模块(如 gt-coverage)可以依赖于低级模块(如 gt-main),但反之不然

Factory 系统 ​

GeoTools 使用 factory 系统来实例化关键接口的实现。这允许:

  1. 接口与实现的分离
  2. 可插拔的实现
  3. 基于提示的实现选择自定义
SVG
100%

常用使用模式:

FilterFactory ff = CommonFactoryFinder.getFilterFactory();
Filter filter = ff.equals(ff.property("name"), ff.literal("value"));

显著的架构变更 ​

在 GeoTools 30.x 中,发生了重大的架构变更,删除了 org.opengis 包,将接口移至 org.geotools.api。主要变更包括:

  1. 将 gt-opengis 模块重命名为 gt-api
  2. 将接口从 org.opengis.* 移至 org.geotools.api.*
  3. 将 FilterFactory2 合并到 FilterFactory
  4. 用 Position 替换 DirectPosition
  5. 用 Bounds 替换 Envelope
  6. 将样式接口移至 org.geotools.api.style
SVG
100%

扩展点 ​

GeoTools 设计为可以通过多种机制进行扩展:

  1. Plugins: 实现特定的 DataStore 或 GridCoverageReader 接口
  2. Factories: 注册核心接口的自定义实现
  3. Extensions: 基于核心模块添加专门的功能

插件通过 Java 的 ServiceLoader 机制发现,服务文件位于 META-INF/services/ 中。

结论 ​

GeoTools 核心架构为地理空间数据处理提供了一个灵活且可扩展的框架。其特点包括:

  1. 模块化设计,具有清晰的接口和实现分离
  2. 允许可插拔组件的 factory 系统
  3. 矢量和栅格数据的强抽象
  4. 支持各种数据格式的灵活数据访问框架
  5. 全面的坐标参考系统支持

此架构构成了所有其他 GeoTools 子系统和扩展的基础。