ジオメトリ演算子
Zilliz Cloud は、GEOMETRY フィールドに対する空間フィルタリングのための一連の演算子をサポートしています。これらはジオメトリデータの管理と分析に不可欠です。これらの演算子を使用すると、オブジェクト間のジオメトリ関係に基づいてエンティティを取得できます。
すべてのジオメトリ演算子は、2 つのジオメトリ引数を取って機能します。コレクションスキーマで定義された GEOMETRY フィールドの名前と、Well-Known Text (WKT) 形式で表現されたターゲットジオメトリオブジェクトです。
構文の使用
GEOMETRY フィールドでフィルタリングするには、式の中でジオメトリ演算子を使用します。
-
一般:
{operator}(geo_field, '{wkt}') -
距離ベース:
ST_DWITHIN(geo_field, '{wkt}', distance)
ここで:
-
operatorは、サポートされているジオメトリ演算子のいずれかです(例:ST_CONTAINS、ST_INTERSECTS)。演算子名はすべて大文字またはすべて小文字である必要があります。サポートされている演算子の一覧については、サポートされているジオメトリ演算子 を参照してください。 -
geo_fieldは、GEOMETRYフィールドの名前です。 -
'{wkt}'は、クエリ対象のジオメトリの WKT 表現です。 -
distanceは、ST_DWITHIN専用のしきい値です。
Zilliz Cloud の GEOMETRY フィールドの詳細については、ジオメトリフィールド を参照してください。
サポートされているジオメトリ演算子
次の表に、Zilliz Cloud で使用可能なジオメトリ演算子を示します。
演算子名はすべて大文字またはすべて小文字である必要があります。同じ演算子名内で大文字と小文字を混在させないでください。
演算子 | 説明 | 例 |
|---|---|---|
| 2 つのジオメトリが空間的に同一である場合、つまり同じ点の集合と次元を持つ場合に TRUE を返します。 | 2 つのジオメトリ(A と B)は空間的に完全に同じですか? |
| ジオメトリ A がジオメトリ B を完全に含み、それらの内部が少なくとも 1 つの共通点を持つ場合に TRUE を返します。 | 都市の境界(A)が特定の公園(B)を含んでいますか? |
| ジオメトリ A と B が部分的に交差するが、互いを完全に含まない場合に TRUE を返します。 | 2 つの道路(A と B)は交差点で交差していますか? |
| ジオメトリ A と B が少なくとも 1 つの共通点を持つ場合に TRUE を返します。これは最も一般的で広く使用されている空間クエリです。 | 検索エリア(A)が店舗の場所(B)のいずれかと交差していますか? |
| ジオメトリ A と B が同じ次元で、部分的に重なり、どちらも他方を完全に含まない場合に TRUE を返します。 | 2 つの土地(A と B)は重なっていますか? |
| ジオメトリ A と B が共通の境界を共有するが、それらの内部が交差しない場合に TRUE を返します。 | 2 つの隣接する不動産(A と B)は境界を共有していますか? |
| ジオメトリ A がジオメトリ B に完全に含まれ、それらの内部が少なくとも 1 つの共通点を持つ場合に TRUE を返します。これは | 特定の関心点(A)は定義された検索半径(B)内にありますか? |
| ジオメトリ A とジオメトリ B の間の距離が指定された距離以下の場合に TRUE を返します。 注:ジオメトリ B は現在ポイントのみをサポートしています。距離の単位はメートルです。 | 特定のポイント(B)から 5000 メートル以内のすべてのポイントを検索します。 |
ST_EQUALS / st_equals
ST_EQUALS 演算子は、2 つのジオメトリが空間的に同一である場合、つまり同じ点の集合と次元を持つ場合に TRUE を返します。これは、2 つの保存されたジオメトリオブジェクトが完全に同じ位置と形状を表しているかどうかを確認する際に役立ちます。
例
保存されたジオメトリ(ポイントやポリゴンなど)がターゲットジオメトリと完全に同じかどうかを確認したいとします。例えば、保存されたポイントを特定の関心点と比較できます。
# The filter expression to check if a geometry matches a specific point
filter = "ST_EQUALS(geo_field, 'POINT(10 20)')"
ST_CONTAINS / st_contains
ST_CONTAINS 演算子は、第1ジオメトリが第2ジオメトリを完全に含んでいる場合に TRUE を返します。これは、ポリゴン内のポイントや、より大きなポリゴン内に含まれる小さなポリゴンを検索する際に役立ちます。
例
都市の行政区画のコレクションがあり、特定の行政区画の境界内に位置するレストランなどの特定の興味地点(POI)を見つけたいとします。
# The filter expression to find geometries completely within a specific polygon.
filter = "ST_CONTAINS(geo_field, 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')"
ST_CROSSES / st_crosses
ST_CROSSES 演算子は、2つのジオメトリの交差部分が元のジオメトリよりも次元の低いジオメトリを形成する場合に TRUE を返します。これは通常、ラインがポリゴンまたは別のラインと交差する場合に適用されます。
例
特定の境界線(別のラインストリング)と交差する、または保護区域(ポリゴン)に入るすべてのハイキングトレイル(ラインストリング)を見つけたい場合を考えます。
# The filter expression to find geometries that cross a line string.
filter = "ST_CROSSES(geo_field, 'LINESTRING(5 0, 5 10)')"
ST_INTERSECTS / st_intersects
ST_INTERSECTS 演算子は、2つのジオメトリの境界または内部に共通する点が1つでも存在する場合に TRUE を返します。これは、あらゆる形式の空間的重複を検出するための汎用的な演算子です。
例
道路のコレクションがあり、計画中の新道路を表す特定のラインストリングと交差または接触するすべての道路を見つけたい場合、ST_INTERSECTS を使用できます。
# The filter expression to find geometries that intersect with a specific line string.
filter = "ST_INTERSECTS(geo_field, 'LINESTRING (1 1, 2 2)')"
ST_OVERLAPS / st_overlaps
ST_OVERLAPS 演算子は、同じ次元の2つのジオメトリが部分的に交差しており、かつその交差部分自体が元のジオメトリと同じ次元を持ちながら、いずれのジオメトリとも等しくない場合に TRUE を返します。
例
重複する販売地域のセットがあり、新しく提案された販売ゾーンと部分的に重複するすべての地域を見つけたいとします。
# The filter expression to find geometries that partially overlap with a polygon.
filter = "ST_OVERLAPS(geo_field, 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')"
ST_TOUCHES / st_touches
ST_TOUCHES 演算子は、2 つのジオメトリの境界が接触しているが、内部が交差していない場合に TRUE を返します。これは隣接関係を検出する際に役立ちます。
例
土地の区画図があり、公共公園と直接隣接しており、かつ重複がないすべての区画を見つけたい場合。
# The filter expression to find geometries that only touch a line string at their boundaries.
filter = "ST_TOUCHES(geo_field, 'LINESTRING(0 0, 1 1)')"
ST_WITHIN / st_within
ST_WITHIN 演算子は、第1ジオメトリが第2ジオメトリの内部または境界上に完全に含まれている場合に TRUE を返します。これは ST_CONTAINS の逆です。
例
指定された大きな公園区域内に完全に含まれるすべての小規模住宅地を見つけたいとします。
# The filter expression to find geometries that are completely within a larger polygon.
filter = "ST_WITHIN(geo_field, 'POLYGON((110 38, 115 38, 115 42, 110 42, 110 38))')"
GEOMETRY フィールドの使用方法の詳細については、ジオメトリ フィールド を参照してください。
ST_DWITHIN / st_dwithin
ST_DWITHIN 演算子は、ジオメトリ A とジオメトリ B の距離が指定値(メートル単位)以下の場合に TRUE を返します。現在、ジオメトリ B はポイントである必要があります。
例
店舗の位置情報を含むコレクションがあり、特定の顧客の位置から 5,000 メートル以内にあるすべての店舗を検索したい場合を想定します。
# Find all stores within 5000 meters of the point (120 30)
filter = "ST_DWITHIN(geo_field, 'POINT(120 30)', 5000)"