1.架构设计
OGC 规范对空间矢量数据的框架进行了设计,GeoTools 对其进行了实现。其中的 DataStore 可以近似理解成关系数据库中的个数据库实例,FeatureSource 可以近似理解成关系数据库中的一张表。
DataAccess 接口主要对空间要素类型的相关信息的构建、读取、更新、清除等操作进行了设定。DataStore 接口直接继承了 DataAccess 接口,DataAccess 接口主要定义了数据源的基本行为,如新建、更改、删除等,将一整套 SimpleFeature 的数据模型进行了嵌入可以看到所有的数据转换格式已经从上层的泛型具象成了 SimpleFeature以及 SimpleFeatureType。除此以外,DataStore 也指定了空间矢量数据的读写方法以及相关的函数。FeatureSource (可通过DataStore获取)和 SimpleFeatureSource 则是与具体的 SimpleFeatureType 绑定的数据结构,用户可以通过其子类对表,直接进行查询和写入操作。
public interface DataAccess<T extends FeatureType, F extends Feature> {
// 获取数据信息
ServiceInfo getInfo();
// 新建数据
void createSchema(T featureType) throws IOException;
// 更新数据字段信息
void updateSchema(Name typeName, T featureType) throws IOException;
// 删除数据
void removeSchema(Name typeName) throws IOException;
// 获取数据名称
List<Name> getNames() throws IOException;
// 获取数据字段信息
T getSchema(Name name) throws IOException;
// 获取数据源
FeatureSource<T, F> getFeatureSource(Name typeName) throws IOException;
// 释放数据连接
void dispose();
}
2.DataStore
DataStore 提供了较为完整的读写功能,熟悉 Java 的同学甚至可以将其理解成一个类似于JDBC 的连接空间数据的驱动程序。
DataStore 是主要用于访问和存储矢量格式的空间数据的引擎。矢量数据的数据格式有很多种。GeoTools 支持如 Shapefile、数据库等的接入其支持的数据源种类有很多种,例如地理信息系统行业常用的 PostGIS、时空数据领域使用到的 GeoMesa、新型的 GeoPackage 等。在支持这些数据源时,GeoTools 提供了统一的 DataStore 访问接口,如代码清单 5-2 所示。用户只需要实现这个接口,就能够针对特定的数据源进行相应的扩展。
public interface DataStore extends DataAccess<SimpleFeatureType, SimpleFeature> {
// 更新SimpleFeatureType 结构信息
void updateSchema(String typeName, SimpleFeatureType featureType) throws IOException;
// 删除SimpleFeatureType
void removeSchema(String typeName) throws IOException;
// 获取SimpleFeatureType 名称
String[] getTypeNames() throws IOException;
// 获取SimpleFeatureType 对象
SimpleFeatureType getSchema(String typeName) throws IOException;
// 获取FeatureSource对象
SimpleFeatureSource getFeatureSource(String typeName) throws IOException;
// 获取查询结果
SimpleFeatureSource getFeatureSource