0

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
4

1 に答える 1

0

sdo_geom.relate が間違った結果を返している可能性があります (MapViewer では、結果はすべて問題なく適切に表示されます)。

ただし、許容値 0.0001 でリレート DETERMINE を実行すると、予想どおり、上記のすべてのケース (0.001 から 0.028) に対して CONTAINS が返されることに注意してください。

これ以上詳しく調べていませんが、バッファリングの結果が (何らかの理由で) 0.006 から 0.026 の間の許容範囲内にあることがわかる場合があります。組み込みのバッファリング コマンドには過去にいくつかの問題があったため、完全に一貫していなくても驚かないでしょう。

于 2013-02-03T17:35:01.923 に答える