10.2.0.5(win64)および11.2.0.3パッチ7(win32)で次の動作が発生します。
私の期待が間違っているのか、オラクルの結果なのかはわかりません。
行要素の周りにバッファーを作成し、バッファーと行の間の関係を決定するとき、CONTAINS(行はバッファーの境界内に含まれる)を取得することを期待していますが、DISJOINTを取得します。
テストコードは次のとおりです。
declare
l_geo1 mdsys.sdo_geometry;
l_geo2 mdsys.sdo_geometry;
l_relate varchar2(100);
begin
-- Create the line
l_geo1 := mdsys.sdo_geometry(2002
,90112
,null
,mdsys.sdo_elem_info_array(1, 2, 1)
,mdsys.sdo_ordinate_array(153972.952, 473287.52, 153972.839, 473281.531));
-- Create the buffer using 0.020 meters = 20mm
l_geo2 := sdo_geom.sdo_buffer(l_geo1, 0.020, 0.0005);
-- Determine the relation
l_relate := sdo_geom.relate(l_geo2, 'determine', l_geo1, 0.0005);
dbms_output.put_line(l_relate);
end;
バッファサイズ0を使用する場合、関係は(予想どおり)EQUALです。バッファサイズ0.01〜0.26を使用する場合、関係は素です。バッファサイズ> 0.027を使用する場合、関係はCONTAINSです。
この動作は、データセットのかなりの数の行に見られます。これらの路線はすべて、ほぼ南北方向に走っています。
結果についての私の期待は正しいですか?sdo_geom.relate関数は間違った結果を返しますか?
ありがとう、ルネ。
編集:さまざまなバッファサイズのループを追加しました:
0 EQUAL
.001 CONTAINS
.002 CONTAINS
.003 CONTAINS
.004 CONTAINS
.005 CONTAINS
.006 DISJOINT
.007 DISJOINT
.008 DISJOINT
.009 DISJOINT
.01 DISJOINT
.011 DISJOINT
.012 DISJOINT
.013 DISJOINT
.014 DISJOINT
.015 DISJOINT
.016 DISJOINT
.017 DISJOINT
.018 DISJOINT
.019 DISJOINT
.02 DISJOINT
.021 DISJOINT
.022 DISJOINT
.023 DISJOINT
.024 DISJOINT
.025 DISJOINT
.026 DISJOINT
.027 CONTAINS
.028 CONTAINS