Java的几何库

35

有没有适用于Java的几何库?我正在寻找解决方案,以获取两个几何对象之间的交点。


2
你正在工作的空间是什么维度?2D,3D? - David Segonds
15
离题了?你在开玩笑吧。那我们就把所有Java的问题都关闭好了。 - Stepan
您似乎正在寻找软件推荐,因此在[softwarerecs.se] Stack Exchange上进行研究/提问似乎更为合适。 - PolyGeo
5个回答

35

JTS是您最好的免费开源选项。您在JTS中寻找的方法在这里

就商业选项而言,您可以使用ESRI的Java JNI版本其ArcObjects库具有非常强大的几何库。 ESRI库的接口称为ITopologicalOperator

如果您只想进行几何运算,则JTS是您最好的选择-它是一个出色的库,具有许多不同语言的端口。另一方面,如果您正在寻找整个GIS系统,该系统具有复杂的符号化、支持GIS工作流程和多用户编辑、打印等等,则我会开始查看ESRI库。


3
错过了 Kendrics 的链接:新的网址是:http://tsusiatsoftware.net/jts/main.html。 - KarlP
3
Esri提供的免费选项:https://github.com/Esri/geometry-api-java - 0kcats
同意。为了我的辩护,它在2010年不存在 :) - rburhum
请注意,JTS在处理三维坐标时仍然存在严重问题(它会弄乱z坐标)。我曾试图创建一个外观来解决这个问题,但在角落情况的单元测试中放弃了,因为这需要大量的工作。 - DPM

6
非GIS目的下,我建议使用javaGeom库。它使用几何学的欧几里德抽象,这是大多数人从学校就熟知的。虽然该项目没有最近的活动,但我认为它结构良好,易于使用。他们说它支持布尔操作,但我从未测试过它们的表现如何。有一个非常功能丰富的名为Euclid的测试应用程序,它是由同一位作者开发的。如果您确信它适合您的使用场景,可以尝试使用它。 http://sourceforge.net/projects/geom-java/

看起来他们在长时间的不活跃期后,在2011年末进行了3次发布。此外,该库看起来比JTS更紧凑 - 不要让事情变得太臃肿! - rescdsk
请查看此答案的链接:http://gamedev.stackexchange.com/a/114761/36681,我发现了许多替代方案。 - Aquarius Power

6
你应该查看的包是java.awt.geom,它是JDK的一部分。
特别是要查看java.awt.geom.Area类,它允许您在两个Shape之间执行交集操作。
编辑:据我所知,找到交点并不容易,因为您需要根据您正在分析的形状应用不同的算法。例如,两个圆之间的相交算法在这里给出,而计算两个贝塞尔曲线之间的交点的算法则完全不同(这里)。
编辑2:
一些建议:您可以查看 PathIterator 类,它返回形状路径的描述作为一系列线段。特别是要检查 FlatteningPathIterator,它将任何曲线折叠成多条直线。一旦您的路径被减少到直线,计算交点将变得简单...尽管在形状包含曲线的情况下,这显然是一个近似值。

但结果只有真/假。我需要精确的交点。 - nanda
注释到EDIT:据我所知,一旦我们知道路径方程式,获取交点就非常简单了。如果没有复杂的解决方案,也许我最终会自己创建这个库。 - nanda

4

2

后续版本中又进行了一次更名。许多文档仍然引用旧的内容。这里使用的是相同的JTS库 - heyhey2k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接