1

多数のジオメトリを含むテーブルがあります。別のジオメトリで最も覆われているものを抽出しようとしています。

これは、写真とコードで最もよく説明されています。

現在、この単純な空間クエリを実行して、渡された WKT ジオメトリと空間的に相互作用する行を取得しています

SELECT ID, NAME FROM MY_TABLE WHERE 
sdo_anyinteract(geom, 
sdo_geometry('POLYGON((400969 95600,402385 95957,402446 95579,400905 95353,400969 95600))',27700)) = 'TRUE';

うまく機能し、渡されたジオメトリと何らかの方法で相互作用する一連の行を返します。

私が望むのは、渡されたジオメトリによって最もカバーされているものを見つけることです。このイメージを考えてみましょう。

ポリゴン選択例

色付きのブロックは「MY_TABLE」を表しています。上部の黒いポリゴンは、検索対象の渡されたジオメトリを表しています。ここから返される結果は Polygon 2 です。これは、ポリゴンで最も覆われているためです。これは可能ですか?カバー率を取得してそれを並べ替えるために使用できるもの、または単にその1つの結果だけを返す方法はありますか?

- 編集 -

受け入れられた回答を補足するために(これはこれの完全な基礎であるため、下に行って賛成票を投じるべきです)、これが私が最終的に得たものです。

SELECT name, MI_PRINX, 
SDO_GEOM.SDO_AREA(
  SDO_GEOM.SDO_INTERSECTION(
    GEOM, 
    sdo_geometry('POLYGON((400969.48717156524 95600.59583240788,402385.9445972018 95957.22742049221,402446.64806962677 95579.91508788493,400905.95874489535 95353.03765349534,400969.48717156524 95600.59583240788))',27700)
    ,0.005
  )
,0.005) AS intersect_area 
FROM LIFE_HEATHLAND WHERE sdo_anyinteract(geom, sdo_geometry('POLYGON((400969.48717156524 95600.59583240788,402385.9445972018 95957.22742049221,402446.64806962677 95579.91508788493,400905.95874489535 95353.03765349534,400969.48717156524 95600.59583240788))',27700)) = 'TRUE'
ORDER BY INTERSECT_AREA DESC;

INTERSECT_AREAこれにより、クエリ ポリゴンと領域を提供するという新しい列が交差するすべての結果が返されます。次に、これを並べ替えて、最大数を選択します。

4

1 に答える 1