SDO_INTERSECTION 无法正确阅读 return

SDO_INTERSECTION unable to read return properly

所以这是 SDO_INTERSECTION 的文档:https://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objgeom.htm#SPATL1118

这是我的代码:

PROCEDURE ciudadInterseccionCarretera (carretera1 IN VARCHAR2,carretera2 IN 
VARCHAR2) IS
tupla Extremadura%ROWTYPE;
geomResultado SDO_GEOMETRY;
BEGIN

        SELECT SDO_GEOM.SDO_INTERSECTION(ex1.Geom,ex2.Geom,0.05) INTO geomResultado
        FROM Extremadura ex1, Extremadura ex2
        WHERE ex1.Nombre = carretera1 AND ex2.Nombre = carretera2;

        DBMS_OUTPUT.PUT_LINE('ciudad Intersección : '||geomResultado.SDO_GTYPE||' '||geomResultado.SDO_POINT.X);
 END ciudadInterseccionCarretera;

城市交叉点 : 2001

geomResultado 在我执行代码时 returning SDO_GTYPE 正确,它 returns 2001 因为 carretera1 和 carretera2 之间的交点是一个点。但是我无法 return,例如使用 geomResultado.SDO_POINT.X 的此类 POINT 的 X 坐标。有任何想法吗?我觉得我的代码没问题..

编辑:此外,当我尝试使用此代码试图找到两条线的交点时,实际上并不相交,查询结果为空,所以问题出在 SDO_POINT 100 %.

Oracle 有两种存储点几何的方法

第一个在 sdo_geometry 的 sdo_point 部分。

sdo_geometry(2001,null,sdo_point(x,y,null),null,null)

另一种是作为纵坐标数组中的纵坐标:

sdo_geometry(2001,null,null,sdo_elem_info_array(1,1,1),sdo_ordinate_array(x,y))

在这种情况下 sdo_intersection returns 坐标在纵坐标数组中的几何体。您必须从那里获取值。

示例:

declare
   l_geo1 sdo_geometry := sdo_geometry(2001
                                      ,null
                                      ,null
                                      ,sdo_elem_info_array(1, 2, 1)
                                      ,sdo_ordinate_array(0, 0, 10, 10));
   l_geo2 sdo_geometry := sdo_geometry(2001
                                      ,null
                                      ,null
                                      ,sdo_elem_info_array(1, 2, 1)
                                      ,sdo_ordinate_array(0, 10, 10, 0));

   l_geo3 sdo_geometry;

   l_x number;
   l_y number;
begin

   l_geo3 := sdo_geom.sdo_intersection(l_geo1, l_geo2, 0.05);

   l_x := l_geo3.sdo_ordinates(1);
   l_y := l_geo3.sdo_ordinates(2);

   dbms_output.put_line(l_x || ' ' || l_y);
end;

正如 Rene 所建议的,这个问题的解决方案只是使用以下方法请求坐标:

geomResultado.SDO_ORDINATES(1);
geomResultado.SDO_ORDINATES(2);

对于 X 和 Y 坐标。