这是SDO_INTERSECTION: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;ciudad Intersección :2001年
当我执行代码时,geomResultado正在正确地返回SDO_GTYPE,它返回2001,因为carretera1和carretera2之间的交点是一个点。但是,我无法返回,例如,使用geomResultado.SDO_POINT.X的这种点的X坐标。有什么想法吗?我想我的密码没问题..。
编辑:此外,当我试图使用这段代码寻找两行的交集时,查询的结果是空的,所以问题在SDO_POINT中是100%。
发布于 2018-12-12 14:02:59
Oracle有两种存储点几何的方法
第一个是在sdo_point的sdo_geometry部分。
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返回坐标数组中的几何。你必须从那里得到值。
示例:
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;发布于 2018-12-12 17:33:00
正如Rene所建议的,解决这个问题的方法就是使用以下方法来请求坐标:
geomResultado.SDO_ORDINATES(1);
geomResultado.SDO_ORDINATES(2);对于X和Y坐标。
https://stackoverflow.com/questions/53741804
复制相似问题