是否有可用于Java的几何库?我正在寻找解决方案来获得两个几何对象之间的交叉点。
答案 0 :(得分:31)
JTS是您最好的免费开源选项。您在JTS中寻找的方法是here
就商业选项而言,您有ESRI's Java JNI version的ArcObjects库,它具有非常强大的几何库。 ESRI库中的接口称为ITopologicalOperator
如果您要做的只是几何操作,JTS是您的最佳选择 - 它是一个出色的库,它有许多不同语言的端口。另一方面,如果您正在寻找具有复杂符号系统的整个GIS系统,支持GIS工作流程和多用户编辑,打印等,那么我将开始查看ESRI库。
答案 1 :(得分:6)
您应该查看它的包java.awt.geom
,它是JDK的一部分。
特别检查java.awt.geom.Area
类,它允许您在两个Shape
之间执行交叉操作。
修改强>
据我所知,找到交叉点并非易事,因为您需要根据您正在分析的形状应用不同的算法。例如,两个圆之间交叉的算法给出here,而计算两个贝塞尔曲线之间的内部的算法是完全不同的(here)。
编辑2
一个建议:你可以查看PathIterator
类,它将形状路径的描述作为一系列段返回。特别检查FlatteningPathIterator
,它会将任何曲线折叠成多条直线。一旦你的路径缩小为直线,计算交点将很简单......虽然这显然是你的形状包含曲线的情况下的近似值。
答案 2 :(得分:6)
对于非GIS目的,我可能会建议 javaGeom 库。它使用大多数人从学校知道的欧几里德几何抽象。这个项目最近没有活动,但我发现它结构合理,易于使用。他们说它支持布尔操作,但从未测试过它们的工作情况。有一个功能丰富的测试应用程序,名为Euclid,由同一作者开发。 您可以尝试使用它,但前提是您确定它会为您工作。
答案 3 :(得分:4)
我发现JTS易手,或改变了家庭网站,或其他什么。可以在此处找到更新的版本:http://maven.geotoolkit.org/com/vividsolutions/jts/1.10/
编辑:这可能是新的主页:http://tsusiatsoftware.net/jts/main.html
答案 4 :(得分:2)
答案 5 :(得分:0)
http://edndoc.esri.com/arcobjects/9.2/Java/java/library_reference/Geometry/Geometry_overview.htm
尝试此链接此链接包含有关geomentry库的详细信息.....