Opérateurs géométriquesCompatible with Milvus 2.6.4+

Milvus prend en charge un ensemble d'opérateurs de filtrage spatial sur les champs GEOMETRY, qui sont essentiels pour la gestion et l'analyse des données géométriques. Ces opérateurs vous permettent d'extraire des entités sur la base des relations géométriques entre les objets.

Tous les opérateurs géométriques fonctionnent en prenant deux arguments géométriques : le nom du champ GEOMETRY défini dans le schéma de votre collection et un objet géométrique cible représenté au format Well-Known Text (WKT).

Syntaxe d'utilisation

Pour filtrer sur un champ GEOMETRY, utilisez un opérateur géométrique dans une expression :

  • Général : {operator}(geo_field, '{wkt}')

  • Basé sur la distance : ST_DWITHIN(geo_field, '{wkt}', distance)

Où :

  • operator est l'un des opérateurs géométriques pris en charge (par exemple, ST_CONTAINS, ST_INTERSECTS). Les noms des opérateurs doivent être en majuscules ou en minuscules. Pour obtenir la liste des opérateurs pris en charge, reportez-vous à la section Opérateurs géométriques pris en charge.

  • geo_field est le nom de votre champ GEOMETRY.

  • '{wkt}' est la représentation WKT de la géométrie à interroger.

  • distance est le seuil spécifique à ST_DWITHIN.

Pour en savoir plus sur les champs GEOMETRY dans Milvus, reportez-vous à la section Champ géométrique.

Opérateurs géométriques pris en charge

Le tableau suivant répertorie les opérateurs géométriques disponibles dans Milvus.

Les noms des opérateurs doivent être en majuscules ou en minuscules. Ne mélangez pas les majuscules et les minuscules dans un même nom d'opérateur.

Opérateur

Description de l'opérateur

Exemple

ST_EQUALS(A, B) / st_equals(A, B)

Renvoie VRAI si deux géométries sont identiques dans l'espace, ce qui signifie qu'elles ont le même ensemble de points et la même dimension.

Deux géométries (A et B) sont-elles exactement identiques dans l'espace ?

ST_CONTAINS(A, B) / st_contains(A, B)

Renvoie VRAI si la géométrie A contient complètement la géométrie B, leurs intérieurs ayant au moins un point commun.

Les limites d'une ville (A) contiennent-elles un parc spécifique (B) ?

ST_CROSSES(A, B) / st_crosses(A, B)

Renvoie VRAI si les géométries A et B se croisent partiellement mais ne se contiennent pas entièrement.

Deux routes (A et B) se croisent-elles à une intersection ?

ST_INTERSECTS(A, B) / st_intersects(A, B)

Renvoie VRAI si les géométries A et B ont au moins un point commun. Il s'agit de la requête spatiale la plus générale et la plus utilisée.

Une zone de recherche (A) croise-t-elle l'un des emplacements de magasin (B) ?

ST_OVERLAPS(A, B) / st_overlaps(A, B)

Renvoie VRAI si les géométries A et B sont de même dimension, se chevauchent partiellement et ne contiennent pas entièrement l'autre.

Deux terrains (A et B) se chevauchent-ils ?

ST_TOUCHES(A, B) / st_touches(A, B)

Retourne VRAI si les géométries A et B ont une limite commune mais que leurs intérieurs ne se croisent pas.

Deux propriétés voisines (A et B) ont-elles une frontière commune ?

ST_WITHIN(A, B) / st_within(A, B)

Renvoie VRAI si la géométrie A est entièrement contenue dans la géométrie B, leurs intérieurs ayant au moins un point commun. C'est l'inverse de ST_Contains(B, A).

Un point d'intérêt spécifique (A) se trouve-t-il dans un rayon de recherche défini (B) ?

ST_DWITHIN(A, B, distance) / st_dwithin(A, B, distance)

Renvoie VRAI si la distance entre la géométrie A et la géométrie B est inférieure ou égale à la distance spécifiée.

Remarque: la géométrie B ne prend actuellement en charge que les points. L'unité de distance est le mètre.

Trouver tous les points situés à moins de 5000 mètres d'un point spécifique (B).

ST_EQUALS / st_equals

L'opérateur ST_EQUALS renvoie la valeur VRAIE si deux géométries sont identiques dans l'espace, c'est-à-dire si elles ont le même ensemble de points et la même dimension. Cet opérateur est utile pour vérifier si deux objets géométriques stockés représentent exactement le même emplacement et la même forme.

Exemple

Supposons que vous souhaitiez vérifier si une géométrie stockée (telle qu'un point ou un polygone) est exactement la même qu'une géométrie cible. Par exemple, vous pouvez comparer un point stocké à un point d'intérêt spécifique.

# The filter expression to check if a geometry matches a specific point
filter = "ST_EQUALS(geo_field, 'POINT(10 20)')"

ST_CONTAINS / st_contains

L'opérateur ST_CONTAINS renvoie TRUE si la première géométrie contient complètement la seconde géométrie. Ceci est utile pour trouver des points à l'intérieur d'un polygone, ou des polygones plus petits à l'intérieur d'un plus grand.

Exemple

Imaginez que vous disposiez d'un ensemble de quartiers et que vous souhaitiez trouver un point d'intérêt spécifique, tel qu'un restaurant, situé à l'intérieur des limites d'un quartier donné.

# 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

L'opérateur ST_CROSSES renvoie TRUE si l'intersection de deux géométries forme une géométrie de dimension inférieure à celle des géométries d'origine. Cela s'applique typiquement à une ligne traversant un polygone ou une autre ligne.

Exemple

Vous souhaitez trouver tous les sentiers de randonnée (chaînes de lignes) qui traversent une ligne de démarcation spécifique (une autre chaîne de lignes) ou qui entrent dans une zone protégée (polygone).

# 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

L'opérateur ST_INTERSECTS renvoie TRUE si deux géométries ont en commun un point de leurs limites ou de leurs intérieurs. Il s'agit d'un opérateur général permettant de détecter toute forme de chevauchement spatial.

Exemple

Si vous disposez d'une collection de routes et que vous souhaitez trouver toutes les routes qui traversent ou touchent une ligne spécifique représentant une nouvelle route proposée, vous pouvez utiliser 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

L'opérateur ST_OVERLAPS renvoie TRUE si deux géométries de même dimension ont une intersection partielle, où l'intersection elle-même a la même dimension que les géométries d'origine, mais n'est pas égale à l'une ou l'autre d'entre elles.

Exemple

Vous avez un ensemble de régions de vente qui se chevauchent et vous voulez trouver toutes les régions qui se chevauchent partiellement avec une nouvelle zone de vente proposée.

# 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

L'opérateur ST_TOUCHES renvoie TRUE si les limites de deux géométries se touchent, mais que leurs intérieurs ne se croisent pas. Ceci est utile pour détecter les contiguïtés.

Exemple

Si vous disposez d'une carte des parcelles de propriété et que vous souhaitez trouver toutes les parcelles qui sont directement adjacentes à un parc public sans aucun chevauchement.

# 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

L'opérateur ST_WITHIN renvoie TRUE si la première géométrie se trouve entièrement à l'intérieur ou à la limite de la seconde géométrie. C'est l'inverse de ST_CONTAINS.

Exemple

Vous souhaitez trouver toutes les petites zones résidentielles situées entièrement à l'intérieur d'une zone de parc plus vaste.

# 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))')"

Pour plus d'informations sur l'utilisation d'un champ GEOMETRY, voir Champ géométrique.

ST_DWITHIN / st_dwithin

L'opérateur ST_DWITHIN renvoie TRUE si la distance entre la géométrie A et la géométrie B est inférieure ou égale à une valeur spécifiée (en mètres). Actuellement, la géométrie B doit être un point.

Exemple

Supposons que vous disposiez d'une collection d'emplacements de magasins et que vous souhaitiez trouver tous les magasins situés à moins de 5 000 mètres de l'emplacement d'un client spécifique.

# Find all stores within 5000 meters of the point (120 30)
filter = "ST_DWITHIN(geo_field, 'POINT(120 30)', 5000)"