首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示SDO_GEOMETRY (质心)信息

显示SDO_GEOMETRY (质心)信息
EN

Stack Overflow用户
提问于 2017-12-08 16:27:51
回答 1查看 797关注 0票数 0

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

我是空间Oracle子程序的新手,所以我很感谢您的帮助。

这是我正在研究的代码:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2017-12-10 04:21:14

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

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

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

代码语言:javascript
复制
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对象访问信息没有什么不同:您需要知道定义并使用点(.)每个级别的符号。

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

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47718390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档