Skip to content

Format Support ​

本页概述了 GeoTools 支持的地理空间数据格式以及如何在库中实现格式支持。GeoTools 支持广泛的矢量和栅格格式,专注于标准化的开放规范。

有关特定数据存储的信息,请参阅 Data Stores。

格式支持架构 ​

GeoTools 为格式支持实现了一致的架构,通过特定于格式的实现实现统一的 API,同时适应每种格式的独特特性。

SVG
100%

类层次结构 ​

格式支持通过提供不同格式一致接口的类层次结构实现:

SVG
100%

矢量数据格式 ​

Shapefile ​

Shapefile 是 Esri 开发的广泛使用的矢量数据格式。GeoTools 提供对读取和写入 Shapefile 的全面支持。

核心组件 ​

  • ShapefileDataStore: 提供对 Shapefile 数据访问的主类
  • ShapefileDataStoreFactory: 创建 Shapefile 数据存储
  • ShapefileFeatureSource: 提供对来自 Shapefile 的要素的访问
  • DbaseFileWriter: 将属性写入 DBF 文件

功能和特性 ​

  • 支持所有几何类型(Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon)
  • 通过 DBF 文件读取和写入属性
  • 用于高效查询的可选空间索引(.qix 文件)
  • 用于国际化文本的可自定义字符编码支持
  • 用于提高性能的内存映射选项
  • 支持用于坐标参考系统的 .prj 文件
  • 支持用于索引文件的 .shx 文件

限制 ​

  • 单个文件的 2GB 文件大小限制
  • DBF 格式中的属性名称限制为 10 个字符
  • 每个文件单一几何类型
  • 有限的数据类型(不支持 UUID、XML、数组等)

GeoPackage 矢量 ​

GeoPackage 是一种开放、基于标准、平台独立、可移植、自描述、紧凑的地理空间信息传输格式。它基于 SQLite,同时支持矢量和栅格数据。

核心组件 ​

  • GeoPackage: 用于处理 GeoPackage 文件的主类
  • GeoPkgDataStore: 提供对 GeoPackage 要素数据的访问
  • GeoPkgDialect: 用于 GeoPackage SQLite 数据库的 SQL 方言
  • GeoPkgDataStoreFactory: 创建 GeoPackage 数据存储

功能和特性 ​

  • 基于 SQLite 的矢量数据存储
  • 使用 SQLite 的 R-Tree 实现进行空间索引
  • 高级数据类型,包括日期、时间、枚举
  • 基于 SQL 的筛选和查询
  • 支持 GeoPackage 扩展
  • 能够在一个文件中存储矢量和栅格数据
  • 用于描述内容的元数据表

GeoPackage 结构 ​

SVG
100%

栅格数据格式 ​

GeoTIFF ​

GeoTIFF 是一种公共领域元数据标准,允许地理参考信息嵌入到 TIFF 文件中。它是 GIS 应用程序中最广泛使用的栅格数据格式。

核心组件 ​

  • GeoTiffReader: 读取 GeoTIFF 文件
  • GeoTiffWriter: 写入 GeoTIFF 文件
  • GeoTiffFormat: 格式描述和访问
  • GeoTiffMetadata2CRSAdapter: 将 GeoTIFF 元数据转换为 CRS

功能和特性 ​

  • 读取和写入地理参考栅格数据
  • 支持嵌入的坐标参考系统
  • 支持地面控制点(GCP)
  • 用于高效渲染的概览(金字塔)支持
  • 用于减小文件大小的压缩选项
  • 支持各种像素类型和波段
  • 透明处理世界文件和投影文件
  • 支持 GDAL 元数据标签和 PAM 数据集

读取过程 ​

SVG
100%

GeoPackage 栅格 ​

GeoPackage 还通过其基于图块的存储模型支持栅格数据,该模型专为高效访问和 Web 地图而设计。

核心组件 ​

  • GeoPackageReader: 从 GeoPackage 文件读取栅格数据
  • TileEntry 和 TileMatrix: 表示图块结构
  • TileReader: 读取单个图块

功能和特性 ​

  • 栅格数据的基于图块的存储
  • 用于在不同比例尺下高效显示的多个缩放级别(金字塔)
  • 紧凑的存储格式
  • 与 Web 地图框架的兼容性
  • 矢量和栅格数据的统一格式

使用不同格式 ​

读取矢量数据 ​

矢量数据读取在各格式之间遵循一致的模式:

// Shapefile
File file = new File("data.shp");
ShapefileDataStore store = new ShapefileDataStore(file.toURI().toURL());
SimpleFeatureSource source = store.getFeatureSource();
SimpleFeatureCollection features = source.getFeatures();

// GeoPackage
Map<String, Object> params = new HashMap<>();
params.put("dbtype", "geopkg");
params.put("database", "data.gpkg");
DataStore store = DataStoreFinder.getDataStore(params);
String typeName = store.getTypeNames()[0];
SimpleFeatureSource source = store.getFeatureSource(typeName);
SimpleFeatureCollection features = source.getFeatures();

读取栅格数据 ​

同样,栅格数据读取遵循一致的模式:

// GeoTIFF
File file = new File("data.tif");
GeoTiffReader reader = new GeoTiffReader(file);
GridCoverage2D coverage = reader.read(null);

// GeoPackage Raster
File file = new File("data.gpkg");
GeoPackageReader reader = new GeoPackageReader(file, null);
String coverageName = reader.getGridCoverageNames()[0];
GridCoverage2D coverage = reader.read(coverageName, null);

格式特定参数和选项 ​

Shapefile 参数 ​

参数类型描述
urlURL.shp 文件的 URL
namespaceURI要素类型的命名空间 URI
memory mapped bufferBoolean启用/禁用内存映射
cache and reuse memory mapsBoolean缓存和重用内存映射
create spatial indexBoolean自动创建空间索引
charsetCharsetDBF 文件的字符编码
timezoneTimeZone日期字段使用的时区
enable spatial indexBoolean如果可用则使用空间索引

GeoPackage 参数 ​

参数类型描述
dbtypeString必须是 "geopkg"
databaseFileGeoPackage 文件
userString数据库用户
passwdString数据库密码
namespaceURI要素类型的命名空间 URI
Batch insert sizeInteger单批次中要插入的要素数量

GeoTIFF 参数 ​

参数类型描述
INPUT_TRANSPARENT_COLORColor要设置为透明的颜色
SUGGESTED_TILE_SIZEString建议的图块大小
WRITE_TIFF_TAGSBoolean是否写入 GeoTIFF 标签
SOURCE_URLURLGeoTIFF 的源 URL
COMPRESSIONString压缩类型(例如,"LZW")
COMPRESSION_QUALITYFloat压缩质量级别

各种格式中的日期/时间处理 ​

每种格式都有自己的处理日期和时间值的方法:

Shapefile ​

  • 使用固定宽度的 DBF 格式
  • 日期以 YY-MM-DD 格式存储
  • 没有对时间或时间戳的本机支持
  • 通过 timezone 参数进行时区处理
// 为 Shapefile 配置时区
ShapefileDataStoreFactory factory = new ShapefileDataStoreFactory();
Map<String, Serializable> params = new HashMap<>();
params.put("url", file.toURI().toURL());
params.put("timezone", TimeZone.getTimeZone("UTC"));
DataStore dataStore = factory.createDataStore(params);

GeoPackage ​

  • 使用 SQLite 日期/时间类型
  • 遵循 ISO-8601 格式: YYYY-MM-DDTHH:MM:SS.SSSZ
  • 完全支持日期、时间和时间戳
  • 时区处理内置在 ISO 格式中
// GeoPackage 中的日期格式化
static final String DATE_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

格式支持扩展 ​

GeoTools 格式支持架构设计为可扩展的。要添加对新格式的支持:

矢量格式扩展 ​

  1. 实现 DataStoreFactorySpi 用于格式发现
  2. 扩展 ContentDataStore 用于特定于格式的数据存储实现
  3. 实现适当的 FeatureSource 和 FeatureReader 接口

栅格格式扩展 ​

  1. 扩展 AbstractGridFormat 用于格式描述和能力
  2. 扩展 AbstractGridCoverage2DReader 用于读取栅格数据
  3. (可选)扩展 AbstractGridCoverageWriter 用于写入栅格数据