本页汇集了每个模块的每个模块页面。即使你不确定哪个模块负责,它也允许你搜索答案。
请向本页发送任何意见或建议GeoTools 用户列表。
常见的地理工具问题
问:什么是地理工具?
GeoTools 免费开源 Java 用于处理矢量和网格数据的地理空间工具包。它由大量模块组成,允许您:
访问各种文件格式和空间数据库 GIS 数据
广泛使用地图投影
过滤和分析空间和非空间属性的数据
地图以复杂的风格组合和显示
创建和分析图形和网络
简单的功能
网格覆盖
样式层描述符
过滤编码
GeoTools 自定义应用程序或作为库的贡献可以通过添加新模块轻松扩展。
问:GeoTools 库有哪些功能?
这是一个很难回答的问题,因为 GeoTools 是一个通用的地理空间库。
以下是当今库中一些重要功能的例子:
-
支持 OGC Grid Coverage 实施
-
坐标参考系统和转换支持
-
使用 OGC 样式层描述符 (SLD) 标准符号系统
-
使用 OGC 过滤器编码规范的属性和空间过滤器
-
支持图形和网络
-
无状态、低内存渲染器在服务器端环境中尤为有用
-
强大的“模式辅助”解析技术,使用 XML 模式绑定到 GML 内容
-
通过 Web Map Server 和 Web Feature Server 支持与 OGC Web 服务交互
-
开放式插件系统允许您教授图书馆其他格式
-
ImageIO-EXT 项目的插件允许 GeoTools 从 GDAL 读取额外的光栅格式
问:好的,GeoTools 支持哪些数据格式?
GeoTools 通过使用插件支持其他格式。您可以通过仅包含您需要的插件来控制您的应用程序支持的格式。
-
arcgrid
-
db2
-
光栅格式
-
geotiff
-
grassraster
-
image
- 使用常见图像格式(例如 JPEG、TIFF、GIF 和 PNG)的 world plus 图像文件 -
imageio-ext-gdal
(由于 ImageIO 项目,允许访问其他 GDAL 格式) -
imagemoasaic
-
imagepyramid
-
JP2K
-
-
数据库
gt-jdbc-ng
``支持-
db2
-
geopackage
-
hana
-
h2
-
mysql
-
oracle
-
postgis
-
sqlserver
-
teradata
-
-
property
- 通常用于测试的简单文本文件格式 -
shapefile
也许不受支持的模块或插件之一可能满足您的需求。这些模块由社区提供,尚未达到图书馆预期的质量:
还有一些流行或正在开发的“不受支持”的格式:
-
dfx
-
geojson
-
wfs
目前权威的插件列表当然是源码:
-
https://github.com/geotools/geotools/tree/main/modules/plugin
-
https://github.com/geotools/geotools/tree/main/modules/unsupported
地理工具版本
问:GeoTools 版本是如何组织的?
像许多开源项目一样,GeoTools 有一个开发版本和一个或多个在任何给定时间处于活动状态的稳定版本。活跃是指项目开发人员正在开发新功能、改进和错误修复。
开发版本是 GitHub 存储库 ( https://github.com/geotools/geotools ) 中的主要分支。这是正在处理最新功能的“前沿”代码。最终这段代码将成为下一个稳定的分支。
稳定版本是 GitHub 存储库中的一个分支。例如,可以在GitHub - geotools/geotools at 14.x找到 14.x 稳定分支 。稳定版本不会获得新功能,但会修复错误,有时还会获得其他小改进。
正式发布是 GitHub 存储库中的一个标签。例如,可以在https://github.com/geotools/geotools/releases/tag/14.0找到 GeoTools 14.0 。同样,可以在https://github.com/geotools/geotools/releases/tag/13.1找到 13.1 版本 。
从 GeoTools 版本 8 开始,major.minor.patch 编号系统适用。
重大的
主要标识符的增加(例如从 8.xy 版本到 9.0.0)表示可能破坏与以前版本的二进制兼容性的实质性更改。
次要的
次要标识符的增量(例如从 8.0.y 版到 8.1.y 版)表示不会破坏与先前版本的二进制兼容性的新功能和/或改进。
修补
补丁标识符的增量(例如从版本 8.0.0 到 8.0.1)表示自上一版本以来的修复和小调整。
问:什么是 SNAPSHOT 版本,我该如何使用它?
快照是开发人员正在积极处理的 GeoTools 代码。
通常会有三个活动快照:
-
一个与稳定分支相关的(例如 GeoTools 23-SNAPSHOT);
-
与维护分支相关的第二个(例如 22-SNAPSHOT);
-
第三个用于主分支(例如 24-SNAPSHOT)。
有时也会有应用了错误修复的早期分支的快照版本(例如 GeoTools 19-SNAPSHOT)。
每晚构建新的快照 jar 并将其部署到与用于正式发布的存储库分开的存储库中。如果您使用 Maven 作为构建工具,则可以通过将以下内容添加到您的pom.xml
:
osgeo-snapshot OSGeo Snapshot Repository https://repo.osgeo.org/repository/snapshot/ true false
您现在可以通过将项目设置为您的版本属性来针对快照版本构建您的项目,如下所示:
24-SNAPSHOT
在您的应用程序中主动测试修复时,这是一种很好的方法。
常见的许可证问题
问:GeoTools 使用什么许可证?
所有 GeoTools 模块均在 GNU 宽松通用公共许可证 (LGPL) 下发布。GeoTools 可用于商业应用,对 GeoTools 所做的任何更改都需要提供给您的客户。
一个简单的方法是将更改贡献回 GeoTools 项目(但这不是必需的)。
问:我可以在我的商业项目中使用 GeoTools 吗?
是的。这是我们选择 LGPL 许可证的原因之一。您可以构建一个使用 GeoTools 作为库的商业应用程序,并在您选择的任何许可下重新分发您的应用程序。您的用户将根据您的许可条款获得您的应用程序的许可,并根据 LGPL 的条款获得 GeoTools 库的许可。您只需要为您的用户提供某种方式来获取 GeoTools 库的源代码,最简单的方法是将您的用户指向 GeoTools 项目的服务器。
但是,如果您选择修改 GeoTools 库本身,那么您必须将这些更改的源代码发布给您的应用程序用户。
最简单的方法是将这些更改提交回 GeoTools 项目,以便将更改合并到核心源代码中。
问:我可以在我的 GPL 项目中使用 GeoTools 吗?
是的。这是我们选择 LGPL 许可证的原因之一。您可以构建一个使用 GeoTools 作为库的免费软件应用程序,并在 GPL 许可下重新分发您的应用程序。您的用户将根据 GPL 的条款获得您的应用程序的许可,并根据 LGPL 的条款获得 GeoTools 库的许可。您只需要为您的用户提供某种方式来获取 GeoTools 库的源代码,或者通过将您的用户指向 GeoTools 项目的服务器,或者通过向他们提供 GeoTools 代码的方式向他们提供您的 GPL 代码应用。
但是,如果您选择修改 GeoTools 库本身,那么您必须将这些更改的源代码发布给您的用户。
最简单的方法是将这些更改提交回 GeoTools 项目,以便将更改合并到核心源代码中。
您还可以将 GeoTools 代码直接合并到您的 GPL 应用程序中。从法律上讲,后者相当于根据 GPL 重新许可 GeoTools,这是 LGPL 明确允许的。这种重新许可是单向的,需要特定的操作 - 请参阅 LGPL。
问:我使用 GeoTools 有哪些限制?
没有任何。您可以使用 GeoTools 代码阅读、运行、复制或执行任何您想做的事情。这是我们根据 LGPL 授予您的自由软件的四项核心自由之一:为您选择的任何目的使用软件的自由。
LGPL 的唯一限制是当您重新分发 GeoTools 时,即当您将它单独或作为更大产品的一部分传递给其他人时,例如当您共享或出售它时。
问:我重新分发 GeoTools 有哪些限制?
从技术上讲,您必须向从您那里收到 GeoTools 副本的每个人提供某种方式来获取库的源代码。实际上,将这些用户指向 GeoTools 项目本身被认为是一个合适的解决方案。
但是,如果您要重新分发 GeoTools 的修改版本,则需要向用户提供对修改后代码的访问权限。这意味着您必须为您的用户提供某种方式来获取修改后的代码,例如自己发布代码。为您的用户提供修改的另一种方法是与我们合作,将您的更改集成到 GeoTools 库中——然后您可以直接使用新库。最好的方法是在我们的问题跟踪器上打开一个更改请求,并向该请求添加一个包含您的更改的代码补丁。
问:为什么我在 GeoTools 发行版或 javadocs 中找不到模块 X?
如果您正在使用最新的 GeoTools 版本,那么您正在寻找的模块很可能是 不受支持的模块。这些模块不是标准 GeoTools 发行版的一部分,但可从GIT 存储库的文件夹中获得。如果你使用 Maven 作为你的构建工具,你可以像任何其他 GeoTools 模块一样包含一个不受支持的模块的依赖项。
问:什么是不受支持的模块?
不受支持的模块是在GIT 存储库中每个 GeoTools 版本的文件夹中找到的。它们不是标准 GeoTools 发行版的一部分,但仍可通过 Subversion、Maven 和手动下载使用。
由于以下一个或多个原因,模块可能不受支持:
-
它正在开发中,尚未满足通用 GeoTools 发行版中包含的可用性、测试覆盖率、文档等的所有标准。
-
它缺少模块维护者。
-
它已被另一个模块取代并从一般发行版中删除,但仍有足够的有用位或活跃用户使其值得保留(至少一段时间)。
不受支持的模块好坏参半:有些是可靠且经常使用的,而有些则处于各种发展或衰退状态。找出任何特定模块状态的最佳方法是查看用户列表档案,然后,如果您想进一步检查,请将问题发布到列表中。
OpenGIS 常见问题
问:与“GeoAPI”的关系?
-
GeoAPI 始于 2002 年 James McGill(他还创立了 GeoTools)。当时的目标是为 GeoTools、deegree 和 OpenJump 等独立项目提供通用 API,允许轻松交换代码。
-
后来,开放地理空间联盟以类似的目标启动了“GO-1”项目。“地理空间对象”项目由当时位于美国的 Polexis 领导。
-
鉴于 GO-1 和 GeoAPI 目标之间的相似性,我们相互联系并设法合并了两个项目。
-
Polexis 基于 GeoAPI 2.0 制定了以下官方 OGC 规范:http : //www.opengeospatial.org/standards/go(现已停用)。
-
后来 Polxis 被 Sys Technology 收购,新的所有者和优先事项停止了他们对 GeoAPI / GO-1 的投资。
-
OGC 的 GO-1 / GeoAPI 工作组因缺乏活动而解散。
-
GeoTools 贡献者逐渐接管了 GeoAPI 项目,并在 GeoTools 2.7 中将这些接口折叠回 GeoTools OpenGIS 模块。
JTS 常见问题
问:JTS 和 GeoTools 是什么关系?
我们使用 Java Topology Suite 来表示“简单”几何,并使用 OpenGIS 接口来表示其他所有内容。在某些情况下,我们被迫定义自己的 API 模块,例如数据访问,其中“标准”不可用。
您将经常使用 JTS,因为它实际上就是 GeoTools 的“形状”。它使用像Coordinate
Point
Polygon
和LineString
-
请记住,JTS 是纯拓扑结构,而 Geometry 对象是没有意义的纯形状。对于含义,将该形状放置在地球上,您需要咨询
CoordinateReferenceSystem
. -
JTS 拓扑操作在二维笛卡尔平面中工作。考虑到这一点,可以表示三维形状,但不能用它来计算。
-
JTS 专注于线性拓扑,您需要将曲线表示为
LineString
具有许多小段的曲线。
有了这些笔记,JTS 听起来可能是有限的;相反,它专注于手头的任务——地理信息系统。虽然 3D 和曲线在 CAD 系统中可能很常见,但我们需要大量资金和原始科学才能使其适用于 GIS。其中一些工作是在带有 ISO 几何的 GeoTools 中进行的。
问:什么几何规格?
JTS 是 OGC Simple Features for SQL Specification(即 SFSQL)的实现。它涵盖了 2D 结构,如点、线和多边形。JTS 愿意携带第三点,但不将其用于计算 - 使其成为笛卡尔空间的 2.5D 解决方案。
规格 |
支持 |
执行 |
---|---|---|
SQL 的简单功能 |
2.5D,线性 |
Java 拓扑套件 |
ISO几何 |
3D,曲线 |
OpenGIS ISO 几何接口 |
GeoTools 强调使用这两种实现,但坦率地说,ISO Geometry 实现还没有准备好。
元数据常见问题
问:实用程序类?
GeoTools 还包括用于支持 GeoTools 实现的实用程序类。
在大多数情况下,这些类被视为内部类,作为消除 Java 版本之间差异的示例。
问:你为什么要在 Java 6 中实现这个类?
如果您正在运行 Java 6,请随意使用 Java 6 工具。
一些实用程序类只是为了在 Java 1.4 中完成工作——它们与空间无关。您会找到已检查集合的示例(是的,我知道在 Java 5 中可用);对象缓存的实现(有一个 JSR);等等 …
问:为什么这些实用程序类在元数据模块中?
因为元数据是我们软件堆栈中“最低”的实现 jar;其他人都需要。这些类真的不够有趣,无法分离到它们自己的模块中。
问:为什么gt-metadata
包含所有这些工厂的东西?
该gt-metadata
模块介绍了一些用于将 GeoTools 连接到项目提供的服务所需的“粘合代码”。您将在此处找到涵盖日志记录和 JNDI 集成的页面。
有关如何将 GeoTools 集成到您的应用程序中的更详细讨论,请查看有关集成的高级部分。
参考常见问题
问:为什么我不能在 WMS 图层上显示 shapefile?
当 shapefile 使用的坐标参考系统和 WMS 图层使用的坐标参考系统之间的轴定义(即 X 是哪个方向?)不同时,就会发生这种情况。可以通过在显示图层之前在代码中包含此语句来请求 GeoTools 强制实施经度 - 纬度轴顺序来修复它……
Hints.putSystemDefault(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE);
如果这不起作用,您可以尝试这种更残酷的系统范围方法......
System.setProperty("org.geotools.referencing.forceXY", "true");
也可以看看:
Q: gt-reference 需要什么 Jars?
作为使用示例,gt-epsg-hsql
您将需要:
C:\geotools\trunk\modules\plugin\epsg-hsql>mvn dependency:tree ... ------------------------------------------------------------------------ Building EPSG Authority Service using HSQL database task-segment: [dependency:tree] ------------------------------------------------------------------------ [dependency:tree] org.geotools:gt2-epsg-hsql:jar:2.5-SNAPSHOT +- junit:junit:jar:3.8.1:test +- javax.media:jai_core:jar:1.1.3:provided +- org.geotools:gt2-referencing:jar:2.5-SNAPSHOT:compile | +- java3d:vecmath:jar:1.3.1:compile | +- commons-pool:commons-pool:jar:1.3:compile | \- org.geotools:gt2-metadata:jar:2.5-SNAPSHOT:compile | +- org.opengis:geoapi:jar:2.2-SNAPSHOT:compile | +- javax.units:jsr108:jar:0.01:compile | \- edu.oswego:concurrent:jar:1.3.4:compile +- org.geotools:gt2-sample-data:jar:2.5-SNAPSHOT:test +- hsqldb:hsqldb:jar:1.8.0.7:compile +- net.sourceforge.groboutils:groboutils-core:jar:5:test \- commons-dbcp:commons-dbcp:jar:1.2.2:test ------------------------------------------------------------------------
问:需要 Bursa-Wolf 参数吗?
GeoTools 此时使用 Bursa-Wolf 参数执行基准面偏移。如果无法从您的数据中确定这些,CoordinateReferenceSystem
我们将无法进行转换。
大多数情况下,这并不重要,因为用户在收集信息的同一数据中处理他们的信息。
-
答:宽容
快速修复包括在搜索
MathTransform
.时将“lenient”设置为 true :MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
这种方法对于显示来说已经足够好了,但不推荐用于编辑或仔细分析工作。
-
答:匹配您的 PRJ 文件
通常,当您
CoordinateReferenceSystem
从prj
shapefile 中包含的 文件加载 a 时,会发生这种情况。修复使用 CRS 实用程序类在 EPSG 数据库中查找完整定义。EPSG 数据库包含的信息多于您的
prj
文件中无法表达的信息。 -
A: Grid 基准面偏移
最后,在极少数情况下,由网格支持的基准偏移仅部分实现。Reuben Schulz 为 NADCON 实施了由网格支持的数据转移,但存在以下限制:
-
尚未集成 NADCON 网格的使用
DefaultCoordinateOperationFactory
(因此您需要手动设置) -
不包括网格提供的基准偏移的一般情况,例如西班牙基准更改 ED50-ETRS89 将不起作用
-