SDO_GEOM.SDO_CENTROID
(ドキュメント) を使用して、ジオメトリの重心を見つけることができます。
この関数によって提供される重心は数学的な重心のみであり、たとえばポリゴンが L 字型の場合、常にジオメトリ内にあるとは限らないことに注意してください。SpatialDB Adviser にはこれに関する優れた記事がありますが、簡単な例を次に示します。

これが問題ではなく、そのレベルの精度が必要ない場合は、ビルトインを使用してください。ただし、これが問題であると考えている場合 (私が過去に行ったように)、SpatialDB Adviser にはセントロイドを正しく計算するスタンドアロン PL/SQL パッケージ。
パフォーマンスのニーズに応じて、オンザフライでセントロイドを計算し、クエリで直接使用するか、テーブルにセントロイド列を追加して、アプリケーション コード (最良の場合) またはトリガーで値を計算してキャッシュすることができます。 (最悪の場合)。
クエリは次のようになります。
SELECT a.*
FROM city.zoning a
JOIN username.buildings b ON sdo_contains(a.geom, b.centroid) = 'TRUE'
WHERE b.bldg_code = 3
これは、空間的にインデックスが作成された列と、追加されて入力された新しい列にSDO_CONTAINS
基づいて使用されていることに注意してください (注 - クエリはテストされていません)。ゾーニング ジオメトリが空間的にインデックス付けされていない場合は、 を使用するか、重心列にインデックスを付けてロジックを反転し、を使用する必要があります。a.geom
b.centroid
SDO_GEOM.RELATE
SDO_INSIDE