Skip to content

模块组织 ​

目的和范围 ​

本文档解释 GeoTools 库中模块的组织方式。它描述了不同类型的模块、它们的层次关系、依赖关系以及代码库的整体结构。有关特定模块实现的信息,请参阅 空间数据模型 和 数据访问框架 中的相应文档。

模块类型 ​

GeoTools 组织成模块的层次结构,每个模块具有特定的职责。这些模块根据其在库中的作用分为四个主要类别。

SVG
100%

核心模块 ​

核心模块构成了 GeoTools 的基础,提供所有其他模块所需的基本接口和基础功能。这些模块定义了在整个库中使用的基本数据结构和 API。

模块描述主要职责
gt-opengisOGC/ISO 接口来自 Open Geospatial Consortium 的标准接口
gt-apiGeoTools 接口在整个库中实现的标准接口
gt-metadata元数据元数据和核心工具类的实现
gt-referencing参考系统坐标参考系统 (CRS)、转换和变换服务
gt-main主模块接口和 factory 系统的默认实现

库模块 ​

库模块构建在核心模块之上,提供多个插件使用的通用实现和工具。这些模块处理地理空间数据处理的特定方面。

模块描述主要职责
gt-coverageGrid Coverage支持栅格和图像处理
gt-cqlCQL约束查询语言解析器
gt-render渲染空间数据的可视化
gt-jdbcJDBC通用数据库访问功能
gt-xmlXMLXML 解析和编码

插件模块 ​

插件模块为特定数据格式或服务提供实现。它们通常依赖于库模块并扩展功能以支持特定的文件格式、数据库或 Web 服务。

模块描述主要职责
gt-shapefileShapefile访问 ESRI Shapefiles
gt-geotiffGeoTIFFGeoTIFF 栅格格式支持
gt-imagemosaicImageMosaic地理参考图像的镶嵌
gt-geopkgGeoPackageOGC GeoPackage 格式支持
gt-jdbc-postgisPostGISPostgreSQL/PostGIS 数据库访问
gt-jdbc-oracleOracleOracle Spatial 数据库访问

扩展模块 ​

扩展模块提供构建在核心库之上的附加功能,但更加专门或可选。这些模块通常提供更高级的功能。

模块描述主要职责
gt-brewerBrewerColorBrewer 和其他样式工具
gt-cssCSS基于 CSS 的地图样式
app-schemaApplication Schema支持复杂的 Feature 类型

模块层次和依赖 ​

下图说明了关键 GeoTools 模块之间的层次关系和依赖关系:

Maven 项目结构 ​

GeoTools 使用 Maven 进行构建管理和依赖解析。模块组织反映在项目的目录结构和 POM 文件中。

顶层项目结构由三个主要模块组成:

SVG
100%

模块依赖管理 ​

GeoTools 使用 Maven 的依赖管理来控制模块如何相互依赖以及外部库。根 POM 定义了外部依赖的通用版本,然后由各个模块引用。

依赖模式 ​

模块组织遵循以下依赖模式:

  1. 核心独立性: 核心模块对外部库的依赖最少
  2. 向上依赖: 模块可以依赖于同一级别或层次结构中较低级别的模块
  3. 无循环依赖: 依赖图是有向无环图
  4. Factory 系统: 通过 factory 查找方法获取实现,而不是直接实例化
SVG
100%

模块 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 仓库。

典型依赖模式 ​

  1. 基本 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>
  2. 数据库应用程序: 包含 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>
  3. 栅格处理: 包含 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>