2010-01-22 75 views
29

是否有可用於Java的幾何庫?我正在尋找解決方案來獲取兩個幾何對象之間的交點。用於Java的幾何庫

+2

您正在使用的空間的尺寸是多少? 2D,3D? – 2010-01-25 15:18:17

+0

2D ............. – nanda 2010-01-25 15:23:04

+5

Off topic?你會在開玩笑吧。然後關閉所有的Java問題。 – Stepan 2016-10-29 17:11:56

回答

31

JTS是您最好的免費開源選項。您在JTS尋找的方法是here

至於商業選擇,你必須擁有一個非常強大的幾何圖形庫自己的ArcObjects庫ESRI's Java JNI version。在ESRI的庫的接口稱爲ITopologicalOperator

如果你正在嘗試做的是幾何運算,JTS是你最好的選擇 - 這是一種具有許多港口不同語言的優秀庫。另一方面,如果您正在尋找一個完成複雜符號系統,支持GIS工作流程和多用戶編輯,打印等的GIS系統,那麼我會開始考慮ESRI庫。

+3

錯過了Kendrics鏈接:新網址:http://tsusiatsoftware.net/jts/main.html – KarlP 2011-02-13 21:35:15

+3

免費選項來自Esri:https://github.com/Esri/geometry-api-java – 0kcats 2016-02-18 15:40:57

+0

表示同意。在我的防守中,它在2010年不存在:) – rburhum 2016-02-19 04:22:24

6

你應該看看它的軟件包java.awt.geom,它是JDK的一部分。

特別檢查java.awt.geom.Area類,它允許您執行兩個Shape之間的相交操作。

編輯

尋找交叉點是不平凡的,據我所知,因爲你需要應用不同的算法,這取決於您要分析的形狀。例如,給出了兩個圓之間的交點的算法here,而計算兩條貝塞爾曲線之間的交點的算法是完全不同的(here)。

EDIT 2

一個建議:你可以看着PathIterator類,它返回一個形狀的路徑的描述爲段的序列。特別檢查一下FlatteningPathIterator,它會將任何曲線摺疊成多條直線。一旦你的路徑被縮減爲直線,計算交點將是簡單的...雖然顯然這是一個近似值,如果你的形狀包含曲線。

+0

但結果只是真/假。我需要交叉點 – nanda 2010-01-22 08:46:21

+0

對EDIT的評論:到目前爲止,我知道,一旦我們知道了路徑的方程式,就很容易得到交叉點。如果沒有複雜的解決方案,也許我會自己創建庫。 – nanda 2010-01-22 09:06:00

+0

看到我的第二次編輯。 – Adamski 2010-01-22 09:21:35

6

對於非GIS目的,我可以建議javaGeom庫。它使用大多數人從學校知道的歐幾里德幾何抽象。這個項目沒有最近的活動,但我覺得它結構合理,易於使用。他們說它支持布爾操作,但從未測試過它們的工作效果。有一個功能非常豐富的測試應用程序,命名爲Euclid,它是由同一作者開發的。 你可以嘗試使用它,但只有當你確定它會爲你工作。

http://sourceforge.net/projects/geom-java/

+0

看起來他們已經在2011年末發佈了3個版本,經過長時間的不活動之後。此外,圖書館看起來比JTS更加緊湊 - 不要讓事情膨脹太多! – rescdsk 2012-01-19 15:16:02

+0

檢查[這個答案](http://gamedev.stackexchange.com/a/114761/36681),我發現了很多選擇 – 2016-01-12 22:29:56