当我查询两个几何图形之间的距离时:
DECLARE
dist NUMBER;
geoma SDO_GEOMETRY;
geomb SDO_GEOMETRY;
BEGIN
SDO_GEOM.SDO_CLOSEST_POINTS(sdo_geometry('POINT(10 10)', 4326),
sdo_geometry('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))',
4326),
0.005,
NULL,
dist,
geoma,
geomb);
insert into test (info, geom1, geom2) values (dist, geoma, geomb);
END;
它返回如下:
但是当我查询两点之间的距离时:
SELECT sdo_geom.sdo_distance(sdo_geom.sdo_geometry('POINT(10 10)', 4326),
sdo_geom.sdo_geometry('POINT(2 2)',
4326),
0.0001,
'unit=M') distance_in_m
from DUAL;
返回:1251344.03770147
为什么距离不一样?怎么回事? 感谢任何能给我一些想法的人。
答案 0 :(得分:0)
在SDO_GEOMETRY
documentation后面提供了一种指定形状的不同方法。使用它,值是相同的:
DECLARE
d1 NUMBER;
d2 NUMBER;
d3 NUMBER;
g1 SDO_GEOMETRY := SDO_GEOMETRY(
2003, -- 2 dimensional polygon,
NULL, -- No SRID / Co-ordinate System
NULL, -- SDO_POINT,
SDO_ELEM_INFO_ARRAY( 1, 1003, 3 ), -- Rectangle exterior
SDO_ORDINATE_ARRAY( 0,0, 2,2 ) -- Corners
);
g2 SDO_GEOMETRY := SDO_GEOMETRY(
2001, -- 2 dimensional point,
NULL, -- No SRID / Co-ordinate System
SDO_POINT_TYPE(10,10,NULL), -- SDO_POINT,
NULL, -- Not an array
NULL -- Not an array
);
g3 SDO_GEOMETRY := SDO_GEOMETRY(
2001, -- 2 dimensional point,
NULL, -- No SRID / Co-ordinate System
SDO_POINT_TYPE(2,2,NULL), -- SDO_POINT,
NULL, -- Not an array
NULL -- Not an array
);
ga SDO_GEOMETRY;
gb SDO_GEOMETRY
BEGIN
SDO_GEOM.SDO_CLOSEST_POINTS(
geom1 => g1,
geom2 => g2,
tolerance => 0.005,
unit => NULL,
dist => d1,
geoma => ga,
geomb => gb
);
d2 := SDO_GEOM.SDO_DISTANCE( g2, g3, 0.0001, NULL );
d3 := SDO_GEOM.SDO_DISTANCE( g1, g3, 0.0001, NULL );
DBMS_OUTPUT.PUT_LINE( d1 || ', ' || d2 || ', ' || d3 );
END;
/
<强>输出强>:
11.3137084989848, 11.3137084989848, 11.3137084989848
作为一个额外的奖励,距离现在是SQRT(8*8 + 8*8)
,这是从(2,2)到(10,10)的笛卡尔距离,你也可以使用SDO_DISTANCE
与多边形或者指出同样的答案。