【问题标题】:Show the information of SDO_GEOMETRY (CENTROID)显示 SDO_GEOMETRY (CENTROID) 的信息
【发布时间】:2017-12-08 16:27:51
【问题描述】:

我正在使用 Oracle 的空间数据库,但遇到了一些问题。 我正在使用几何子程序(如 SDO_GEOM.SDO_LENGTH)执行一些程序,它返回一个数字,但是当我使用其他几何子程序(如 SDO_GEOM.CENTROID)时,我不知道如何显示信息,因为这会返回一个 SDO_OBJECT

我是 Spatial Oracle 子程序的新手,非常感谢您的帮助。

这是我正在处理的代码:

PROCEDURE centroId(pnombre IN VARCHAR2) IS
    geomEntrada SDO_GEOMETRY;
    dist VARCHAR2(100);
    tupla caceres%ROWTYPE;
    dim SDO_DIM_ARRAY;
    -- Cursor para recuperar los barrios
    CURSOR cursor_barrio IS 
      SELECT *
      FROM caceres
      WHERE tipo = 'Barrio';

  BEGIN

    -- Recuperar la geometria del parametro de entrada
    SELECT Geom INTO geomEntrada
    FROM Caceres
    WHERE Nombre = pnombre;

    -- Obtener dim
    SELECT DIMINFO INTO dim
    FROM USER_SDO_GEOM_METADATA
    WHERE table_name='CACERES'; --Ojo, CACERES en mayúsculas

    -- Recorrer todos los barrios
    OPEN cursor_barrio;
    LOOP
      FETCH cursor_barrio INTO tupla;
      EXIT WHEN cursor_barrio%NOTFOUND;

      --SDO_GEOM.SDO_LENGTH
      dist := SDO_GEOM.SDO_CENTROID(geomEntrada,dim);
    END LOOP;
    DBMS_OUTPUT.PUT_LINE(pnombre||' have this center: ' || dist);

  END centroId;

我做错了什么?
如何显示信息?可以使用 st_asText 吗?

【问题讨论】:

    标签: database plsql oracle-sqldeveloper spatial


    【解决方案1】:

    SDO GEOMETRY 确实是一门复杂的学科。如果您打算使用它做很多事情,我建议您认真阅读 Oracle 的“空间用户指南和参考”(针对您的 Oracle 版本),也许是几次。

    您询问了如何从对象中获取信息,但没有指定目标信息。我将不得不接受所呈现的逻辑并假设它收集了必要的数据。除了 dist 定义和/或它的分配。函数 SDO_GEOM.SDO_CENTROID 返回的不是一个字符串,而是一个 SDO_GEOMETRY。在其中另一个对象是 SDO_POINT_TYPE,它本身由 3 个数字组成; (x, y, z)。在地理或地理空间数据中对应于经度、纬度、高度。

    访问这些值并没有什么特别之处,只需使用标准的点 (.) 符号即可。所以在这里:

    declare 
      dest sdo_geometry; 
      .
      .
      .
      dest := sdo_geom.sdo_centroid(geomEntrada,dim);
      dbms_output.put_line(pnombre||' have this center: ' 
                         || "longitude=' || to_char(l_centroid.sdo_point.x)
                         || " latitude=' || to_char(l_centroid.sdo_point.y) 
                         ); 
    

    从 SDO 类型访问信息与从任何其他 Oracle 对象访问信息没有什么不同:您需要了解定义并在每个级别使用点 (.) 表示法。

    顺便说一句:上述参考手册包含这些定义。

    CREATE TYPE sdo_geometry AS OBJECT (
     SDO_GTYPE NUMBER, 
     SDO_SRID NUMBER,
     SDO_POINT SDO_POINT_TYPE,
     SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,
     SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);
    
    CREATE TYPE sdo_point_type AS OBJECT (
       X NUMBER,
       Y NUMBER,
       Z NUMBER);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多