2017-06-29 156 views
2

我是很新的Oracle空間。甲骨文 - 轉換SDO_GEOMETRY到WKT?

我有一個SDO_GEOMETRY列的空間表。在此表中插入POINT數據後,我想要以WKT格式檢索數據。

這裏是我做過什麼:

插入數據 -

INSERT INTO new_test (name, geom) VALUES (
'Test', 
SDO_GEOMETRY(
      2001, 
      4326, 
      SDO_POINT_TYPE(12,14,NULL), 
      NULL, 
      NULL)); 

讀取數據 -

SELECT NAME, SDO_UTIL.TO_WKTGEOMETRY(GEOM) AS point FROM NEW_TEST; 

輸出 -

NAME | POINT 
------------- 
Test | (null) 

爲什麼我得到空嗎?它不應該顯示座標點嗎?

回答

1

太長評論 - 不知道爲什麼它不爲你工作,但我不能複製您的結果:

甲骨文設置

CREATE TABLE new_test (name varchar2(20), geom SDO_GEOMETRY); 

INSERT INTO new_test (name, geom) 
VALUES (
    'Test', 
    SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(12,14,NULL), NULL, NULL) 
); 

查詢

SELECT NAME, SDO_UTIL.TO_WKTGEOMETRY(GEOM) AS point FROM NEW_TEST; 

輸出

NAME POINT                   
---- ----------------- 
Test POINT (12.0 14.0) 
+0

這很奇怪。我正在使用oracle locator(oracle空間的免費版本)。此外,數據庫安裝在一個Linux的盒子(Fedora)。這可能是其中任何一個原因(我非常懷疑,但仍然?) 按照[文檔](http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_locator。 htm#SPATL340) - SDO_UTIL由oracle定位器支持。 – kryptxy

+0

該功能絕對是Locator的一部分。你用什麼工具來顯示結果。顯然不是SQLPLUS ...也許這個工具只是無法顯示結果 - 返回的字符串是一個CLOB。 –

+1

另一種可能是使用對象類型的get_wkt()方法:SELECT NAME,t.GEOM.get_wkt()AS point FROM NEW_TEST t;不要忘記爲表格使用別名(這裏是「t」)。 –

0

功能SDO_UTIL.TO_WKTGEOMETRY似乎不是在快速版本可用(Source - 西瓦Ravada甲骨文):

Oracle快捷不具有JAVAVM在數據庫和WKT 轉換例程需要將此功能作爲Java 存儲過程實現。因此,這些WKT例程不支持 Express版本。

您還可以建立自己的高鐵總站像這樣(爲分):

SELECT name, 'POINT ('||t.X||' '||t.Y||')' AS point FROM NEW_TEST p, TABLE(SDO_UTIL.GETVERTICES(p.GEOM)) t;