【问题标题】:Oracle - Converting SDO_GEOMETRY to WKT?Oracle - 将 SDO_GEOMETRY 转换为 WKT?
【发布时间】:2017-12-19 17:53:41
【问题描述】:

我对 oracle 空间非常陌生。

我有一个包含一个 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)

为什么我在这里得到空值?不应该显示坐标点吗?

【问题讨论】:

    标签: oracle oracle-spatial


    【解决方案1】:

    评论太长 - 不知道为什么它不适合你,但我无法复制你的结果:

    Oracle 设置

    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)
    

    【讨论】:

    • 这很奇怪。我正在使用 oracle 定位器(oracle 空间的免费版本)。此外,数据库是在 linux 机器(fedora)中设置的。这可能是导致这种输出的原因(我非常怀疑,但仍然如此?)根据docs - SDO_UTIL 由 oracle 定位器支持。
    • 该功能绝对是定位器的一部分。你用什么工具来显示结果。显然不是 SQLPLUS ...也许该工具无法显示结果 - 返回的字符串是 CLOB。
    • 另一种可能是使用对象类型的get_wkt()方法:SELECT NAME, t.GEOM.get_wkt() AS point FROM NEW_TEST t;只是不要忘记为表格使用别名(此处为“t”)。
    • @AlbertGodfrind 是的,是的!我正在使用 sqldeveloper。此外,get_wkt() 查询给出了相同的结果(null)。我是否缺少任何类型的配置?我还尝试在 Windows 7 机器(VM)中执行查询。遇到同样的错误。
    • 谁能帮我解决这个问题?
    【解决方案2】:

    SDO_UTIL.TO_WKTGEOMETRY 函数似乎在 Express 版本 中不可用(Source - Siva Ravada-Oracle):

    Oracle Express 在数据库和 WKT 中没有 Javavm 转换例程需要这个,因为该功能是作为 Java 实现的 存储过程。所以这些 WKT 例程在 速成版。

    您仍然可以像这样构建自己的 WKT(用于积分):

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

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2021-11-07
      • 1970-01-01
      • 2018-09-29
      • 2023-03-11
      • 2020-04-29
      相关资源
      最近更新 更多