显示 SDO_GEOMETRY (CENTROID) 的信息
Posted
技术标签:
【中文标题】显示 SDO_GEOMETRY (CENTROID) 的信息【英文标题】:Show the information of 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 吗?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于显示 SDO_GEOMETRY (CENTROID) 的信息的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 空间查询, 数据类型为 sdo_geometry
转载Oracle Spatial中SDO_Geometry详细说明