2012-05-08 23 views
3

我一直致力於爲用戶存儲位置的Web項目。該項目目前使用MySql 5.5和JPA 2來映射關係數據庫,並將EJB 3.1作爲中間層。我將經度和緯度數據存儲在MySql中的十進制數據類型中。什麼數據庫和Java庫用於空間分析?

我想擴展項目,以便用戶可以在地圖上標記出的位置(通過使用Google Map API 3)附近搜索點(GPS座標)。

在開始轉換或更改項目中的組件之前,我需要一些提示和建議。如果可能的話,使用教程以及如何實現更改以及使用哪些工具(庫,開發工具等)。這是我的問題。

  1. 我可以在MySQL中使用空間擴展(使用的數據類型,如點),這映射到由JPA 2支持實體(如DataNucleus將庫,如果它們被JPA 2支持)。這是重量輕,可以堅持自己通過持久層。
  2. 遷移到PostGIS和Postgres(它似乎有更好的空間支持),而改變數據庫和使用hibernate所需的所有痛苦和努力會更好。 Netbeans具有Hibernate支持,但是在使用JDBC for PostGis時,我偶然發現問題。如果我走上這條路,需要一個很好的教程來開始。
  3. 使用已就地和Jan Philip Matuschek

計算從哺乳期A和B.本文​​中所做的那樣類似的距離,請原諒我聚類問題的基礎設施。 Regards Chris

+0

我已經沉浸在自己多一點。我現在知道的是,我不僅需要空間分析。但是我需要一個擁有地理支持的數據庫,而我對純粹的笛卡爾計算不太感興趣。由於我收集的職位將在更大的區域範圍內。 PostGIS支持WGS 84,功能不多。但它有我現在需要的一次。當我有一個工作原型時,我會報告。 – Chris

+0

如果MySQL支持地理(大地)座標,我還沒有發現任何東西。 – Chris

+0

我不知道MySQL對地理的支持,但這在PostGIS中都是可行的。 PostGIS有一個'GISTree'索引,它允許你索引你的地理(Oracle中的r-tree),它允許更快的地理查詢。你計劃做'地區'(你可以使用緯度/經度來定義一個多邊形,然後搜索例如,DB點在那個多邊形中),或者你打算做「最接近」還是「距離這個點2英里」? – Twelfth

回答

3

如果你只有點位置,但是如果你想在多邊形中查找點(即按地區查詢),或者使用花哨的索引和搜索算法,MySQL的Spacial擴展通常是可以的。有一個really good cross comparison來幫助顯示不同的空間數據庫之間的差異。

我看到遷移到PostgreSQL和PostGIS還有很多好處。另外還有許多與PostGIS天真地工作的GIS應用程序,例如QGIS,Geoserver等。最新版本的PostGIS有a KNN nearest neighbor search operator可快速查找例如幾百萬行中最近的25個點到特定點您的地圖(另請參閱here)。

有關JDBC和PostGIS,請參見the manual。至於JPA,請參見PostGIS and JPA 2.0

至於距離計算,請參閱ST_DistanceST_Distance_Spheroid

+0

我對PostGIS不太瞭解,但是談論PostgreSQL 8.3的比較不僅僅是過時的。 –

+0

比較刷新當然是應該的,特別是現在PostGIS 2.0已經不在了。大部分表格仍然有效。值得注意的是,PostGIS現在擁有「True Geodetic支持」的「地理」類型(截至1.5版本)。 –

+0

是的,我認爲遷移到postGIS 2是一個好方法。由於我將在幾個國家和周圍搜索位置,所以只是簡單的笛卡爾calc是不夠的。但是我想到mongoDB,因此使用普通的Java對象(PO​​JO)似乎很容易。有沒有人嘗試在mongoDB中的位置進行地理搜索(大地測量)? – Chris