甲骨文 - 转换SDO_GEOMETRY到WKT?

问题描述:

我是很新的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) 

为什么我得到空吗?它不应该显示坐标点吗?

太长评论 - 不知道为什么它不为你工作,但我不能复制您的结果:

甲骨文设置

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”)。 –

功能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;