GeoTools 的构建
使⽤ Maven 构建 GeoTools
GeoTools 使⽤ GitHub ⽹站作为⾃⼰的仓库,⽤户可直接从 GitHub ⽹站上下载最新的 GeoTools 源代码,下载后的源代码⽬录说明如表所⽰。


GeoTools 的使⽤⽅式
GeoTools 作为⼀个 Java 类库,它提供了不同抽象层级的使⽤⽅ 式。在添加了 GeoTools 的依赖包后,⽤户可直接使⽤ GeoTools 的⼯具 类对空间数据进⾏处理,也可以通过 GeoTools ⼯⼚类解析空间数据格 式,更可以通过 Java 命名和⽬录接⼝( Java Naming and Directory Interface , JNDI )将 GeoTools 集成进⽤户已有的⼯程中。⽤户可根据 应⽤场景,选择合适的使⽤⽅式。
引⽤ GeoTools 依赖包
由于 GeoTools 本⾝是⽤ Java 编写的,其本⾝可以被封装成⼀个 JAR 包,这是 Java 对⾃⾝代码编译并封装以后所得的⽂件。我们如果想要 使⽤ GeoTools 的功能,那就需要将它的 JAR 包引⼊⾃⼰的项⽬⾥⾯ 来。⽬前主要有两种⽅式,⼀种是使⽤项⽬管理⼯具引⽤,例如使⽤ Maven 引⽤,另⼀种是直接引⽤ JAR 包。
1 .使⽤ Maven 引⽤
GeoTools 是使⽤ Maven 构建的, Maven ⾮常擅⻓整理⼤量 Java 依赖 包的层级依赖关系,因此使⽤ Maven 是引⽤ GeoTools 依赖的推荐⽅ 式。
2 .直接引⽤ JAR 包
直接引⽤ JAR 包是将所有 GeoTools 的依赖包存储到本地开发环境 中,是⼀种传统的 Java 依赖包组织⽅式。需要注意的是,由于 Java 依 赖包之间经常会发⽣依赖冲突,因此需将 GeoTools ⼆进制分发版中的 所有内容和上级依赖包存储到本地 IDE 中。
使⽤ GeoTools 的接⼝
作为⼀个开源库,读者可以⾃由调⽤所需的 GeoTools 中的各种 类。然⽽, GeoTools 提供了⼀种更为⼲净的⽅法。随着 GeoTools 的迭 代, GeoTools 从⾃⾝的内部实现中⼲净地分离出⼏组应⽤程序接⼝ ( Application Program Interface , API ),并对外暴露。这些接⼝被称 为 GeoAPI 。使⽤这些合理封装的接⼝可以保证在 GeoTools 发⽣升级期 间对本地代码改动最少。
如果读者使⽤这些接⼝编写代码, GeoAPI 会在 GeoTools 升级过程 中保证接⼝不发⽣变化。如果这些接⼝发⽣变化(仅当底层标准实现 发⽣变化时),这些接⼝将在下个发布周期内被标记为弃⽤,以此来 警⽰⽤户,让⽤户进⾏平滑升级。
在当前的 GeoTools 版本中,这些稳定的接⼝主要包含在 3 个模块 中,分别如下。
( 1 ) gt-opengis 模块,该模块⽤于提供各类 OGC 和 ISO 的规范接 ⼝。
( 2 ) JTS 模块,该模块⽤于提供各类平⾯⼏何对象的 Java 实现。
( 3 ) gt-main 模块,该模块⽤于提供 GeoTools ⾃⾝的能⼒。
这些接⼝提供了基础和常⽤的空间数据结构和空间分析能⼒,通 过⾯向接⼝程序设计, GeoTools 可在不关⼼具体实现的情况下使⽤相 关能⼒。
使⽤ GeoTools ⼯具类
除了接⼝, GeoTools 还提供了许多⼯具类,这些⼯具类⼤体可分 为 3 类。
( 1 )常⻅操作⼯具类,通过对⼀些通⽤⽅法进⾏封装,减少编码 负担的实⽤⼯具类,⽐如 CQL 、 DataUtilities 和 JTS 类。其中每⼀个⼯ 具类都提供了多个公共⽅法来帮助开发者充分利⽤ GeoTools 提供的服 务。
( 2 )运⾏时⼯具类,即在 GeoTools 运⾏时将接⼝和实现黏合在⼀ 起,显著的⼀个例⼦是 FactoryFinders 类,该⼯具类允许你在类路径 ( CLASSPATH )上查找各种可⽤的、满⾜ GeoTools 插件规范的实现。
( 3 ) GeoTools 扩展⼯具类,即在⾃⾝之上提供额外的服务,并需 要额外的公共类来实现这⼀点,⼀个常⻅例⼦是位于 gt-brewer 包下的 ColorBrewer 类。
⽤户可以直接使⽤上述⼯具类,其中有⼀部分是动态类,⽤户需 要构造相关的对象才能调⽤相关的⽅法;另⼀部分是静态⽅法,⽤户 只需要直接通过类名就可以使⽤对应的⽅法,更加⽅便。
使⽤⼯⼚模式
接⼝只定义了数据结构应该是什么样⼦,但是没有提供创建对象 的⽅法。在 Java 中,解决该问题的⽅法是提供⼀个 “ ⼯⼚ ” ,⼯⼚提供 了 “ 创建 ” 对象的⽅法,⽤户可以使⽤⼯⼚来代替新建对象操作,这种 设计模式被称为⼯⼚模式。 GeoTools 提供了⼀系列⼯⼚类,允许⽤户 创建和使⽤各种⼯⼚对象,例如⼏何要素、样式、属性过滤器、空间 过滤器、空间坐标系和空间数据源。 GeoTools 提供了⼀个 FactoryFinder ⼯⼚类,⽤于定位类路径上可⽤的⼯⼚实现。通过使⽤ FactoryFinder ⼯⼚类,⽤户的代码可以构建为仅使⽤接⼝运⾏,实现 完全的定义与实现相分离。
虽然⽤户可以直接找到并使⽤各种⼯⼚中的每⼀个实现类,但这 会在⽤户的代码和实际实现之间引⼊依赖性。这种依赖于特定实现的 做法会使⽤户的代码难以更改,并阻⽌在将来利⽤更好的实现来替代 该实现的可能。

但是从 2.2 版本后, GeoTools 提供了⼀种更加灵活的⽅式来创建 Shapefile ⽂件数据源。使⽤ DataStoreFinder ⼯⼚类根据传⼊的不同参数 类型,⾃动查找匹配的数据源类型对应的实现,并进⾏创建⼯作

Comments