显示SDO_GEOMETRY(CENTROID)

时间:2017-12-08 16:27:51

标签: database plsql oracle-sqldeveloper spatial

我正在使用Oracle的空间数据库,但我遇到了一些麻烦。 我正在使用像SDO_GEOM.SDO_LENGTH那样返回数字的几何子程序做一些程序,但是当我使用其他几何子程序如SDO_GEOM.CENTROID时,我不知道如何显示信息,因为这会返回{{1 }}

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

这是我正在处理它的代码:

SDO_OBJECT

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

1 个答案:

答案 0 :(得分:0)

SDO GEOMETRY确实是一个复杂的主题。如果您要对此做很多事情,我建议您仔细阅读Oracle的“空间用户指南和参考”#34; (对于您的Oracle版本),可能需要几次。

您询问了如何从对象中获取信息,但未指定目标信息。我必须接受所提出的逻辑并假设它收集必要的数据。除了 dist 定义和/或它的分配之外。函数SDO_GEOM.SDO_CENTROID不返回sring,而是返回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对象访问信息没有什么不同:您需要知道定义并在每个级别使用点(。)表示法。

BTW:上述参考手册包含这些定义。

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);