2013-02-07 53 views
0

我使用jdbc將ormlite連接到postgresql數據庫。我的數據結構是預定義的,並且包含一個名爲geometry的Postgis數據類型。該數據類型可以包含GIS應用程序的不同幾何結構(點,線串,多邊形等)。 Natively Postgis可以將此數據類型轉換爲geoJson或任何其他字符串格式相關的格式。使用PostGIS與ormLite

當我直接使用帶Postgis的ormLite(作爲字符串)時,它給了我一個二進制格式。所以我想使用postgis函數將這種二進制格式轉換爲geoJson,KML。

在SQL它看起來像這樣:

select ST_AsGeoJson(geometrycolumn) from table; 

update table set geometrycolumn = ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-5.5,7.2]}') 

在這種幾何列應該訪問的模式(讀/寫)爲一個字符串。

我試圖使用ormlite persisters但這已經太晚了。目前,使用persister(通過resultToSqlArgparseDefaultString),查詢被髮送到數據庫,我無法編輯從postgres請求的列。 Mrog有一個solution與此有關的問題,但也使用persisters。

我也嘗試用jdbc覆蓋特定的類。但不知道如何「注入」sql函數。

或者我可以使用原始SQL查詢。但是我需要使用的表中還有很多其他屬性。我必須使用兩個查詢到數據庫(一次是常規屬性,一次是幾何列)。而我的感覺不是使用原生的sql語句。

另一種解決方案是在數據庫端創建一個geoJson列。 ormLite可以從中讀取,並使用sql-trigger寫入原始列。但那是一個糟糕的解決方案。

我真的必須創建自定義數據類型並在服務器端進行轉換,而不是在數據庫上進行轉換嗎?還是有解決方案來使用本地數據庫功能?

回答

0

我也試圖把它整理出來,雖然設置稍有不同。我一直專注於從MSSQL中獲取WKT中的多邊形。

由於我只使用矩形,我決定製作一個矩形數據類型。因爲我實現返回

return String.format("geometry::STGeomFromText('POLYGON ((%d %d, %d %d, %d %d, %d %d, %d %d))',0)",etc...) 

就剩下選擇的問題,該工程對插入和更新由於javaToSqlArg罰款。我發現修復這個問題的唯一方法是有點骯髒。

我在表格中創建了另一列作爲幾何類型的基於字符串的表示。然後我添加了一個觸發器來保持它們同步。當一個人更新時,其他人得到轉換和更新。

如果我沒有使用數據庫幾何函數的相交等我可能只是使字段文本。

也許值得看看:WKB4J它可能能夠讀取從ormlite返回的二進制數據,並使它們更有形。