Milvus
Zilliz
Casa
  • Guida per l'utente
  • Home
  • Docs
  • Guida per l'utente

  • Ricerca

  • Filtraggio

  • Operatori della geometria

Operatori geometriciCompatible with Milvus 2.6.4+

Milvus supporta una serie di operatori per il filtraggio spaziale sui campi di GEOMETRY, essenziali per la gestione e l'analisi dei dati geometrici. Questi operatori consentono di recuperare le entità in base alle relazioni geometriche tra gli oggetti.

Tutti gli operatori geometrici funzionano con due argomenti geometrici: il nome del campo GEOMETRY definito nello schema della collezione e un oggetto geometrico di destinazione rappresentato in formato Well-Known Text (WKT).

Sintassi d'uso

Per filtrare su un campo GEOMETRY, utilizzare un operatore geometrico in un'espressione:

  • Generale: {operator}(geo_field, '{wkt}')

  • Basato sulla distanza: ST_DWITHIN(geo_field, '{wkt}', distance)

Dove:

  • operator è uno degli operatori geometrici supportati (ad esempio, ST_CONTAINS, ST_INTERSECTS). I nomi degli operatori devono essere tutti maiuscoli o tutti minuscoli. Per un elenco degli operatori supportati, consultare la sezione Operatori geometrici supportati.

  • geo_field è il nome del campo GEOMETRY.

  • '{wkt}' è la rappresentazione WKT della geometria da interrogare.

  • distance è la soglia specifica per ST_DWITHIN.

Per saperne di più sui campi GEOMETRY in Milvus, consultare Campo geometrico.

Operatori geometrici supportati

La tabella seguente elenca gli operatori geometrici disponibili in Milvus.

I nomi degli operatori devono essere tutti maiuscoli o tutti minuscoli. Non mescolare i casi all'interno dello stesso nome di operatore.

Operatore

Descrizione

Esempio

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

Restituisce VERO se due geometrie sono spazialmente identiche, cioè hanno lo stesso insieme di punti e la stessa dimensione.

Due geometrie (A e B) sono esattamente identiche nello spazio?

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

Restituisce VERO se la geometria A contiene completamente la geometria B, con gli interni che hanno almeno un punto in comune.

Il confine di una città (A) contiene un parco specifico (B)?

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

Restituisce VERO se le geometrie A e B si intersecano parzialmente ma non si contengono completamente.

Due strade (A e B) si incrociano in un'intersezione?

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

Restituisce VERO se le geometrie A e B hanno almeno un punto in comune. Questa è l'interrogazione spaziale più generale e più utilizzata.

Un'area di ricerca (A) si interseca con uno qualsiasi dei punti vendita (B)?

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

Restituisce VERO se le geometrie A e B hanno la stessa dimensione, si sovrappongono parzialmente e nessuna contiene completamente l'altra.

Due terreni (A e B) si sovrappongono?

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

Restituisce VERO se le geometrie A e B hanno un confine comune ma i loro interni non si intersecano.

Due proprietà vicine (A e B) condividono un confine?

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

Restituisce VERO se la geometria A è completamente contenuta nella geometria B, con gli interni che hanno almeno un punto in comune. È l'inverso di ST_Contains(B, A).

Un punto di interesse specifico (A) si trova entro un raggio di ricerca definito (B)?

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

Restituisce VERO se la distanza tra la geometria A e la geometria B è minore o uguale alla distanza specificata.

Nota: la geometria B attualmente supporta solo i punti. L'unità di misura della distanza è il metro.

Trova tutti i punti entro 5000 metri da un punto specifico (B).

ST_EQUALS / st_equals

L'operatore ST_EQUALS restituisce VERO se due geometrie sono spazialmente identiche, cioè hanno lo stesso insieme di punti e la stessa dimensione. È utile per verificare se due oggetti geometrici memorizzati rappresentano esattamente la stessa posizione e la stessa forma.

Esempio

Si supponga di voler verificare se una geometria memorizzata (come un punto o un poligono) è esattamente identica a una geometria di destinazione. Ad esempio, è possibile confrontare un punto memorizzato con un punto specifico di interesse.

# 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'operatore ST_CONTAINS restituisce VERO se la prima geometria contiene completamente la seconda. È utile per trovare punti all'interno di un poligono o poligoni più piccoli all'interno di uno più grande.

Esempio

Immaginiamo di avere un insieme di quartieri cittadini e di voler trovare un punto di interesse specifico, come un ristorante, che rientra nei confini di un determinato quartiere.

# 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'operatore ST_CROSSES restituisce TRUE se l'intersezione di due geometrie forma una geometria con una dimensione inferiore a quella delle geometrie originali. Questo si applica tipicamente a una linea che attraversa un poligono o un'altra linea.

Esempio

Si vogliono trovare tutti i sentieri escursionistici (stringhe di linee) che attraversano una specifica linea di confine (un'altra stringa di linee) o che entrano in un'area protetta (poligono).

# The filter expression to find geometries that cross a line string.
filter = "ST_CROSSES(geo_field, 'LINESTRING(5 0, 5 10)')"

ST_INTERESSI / st_intersetti

L'operatore ST_INTERSECTS restituisce TRUE se due geometrie hanno un qualsiasi punto dei loro confini o interni in comune. Si tratta di un operatore di uso generale per individuare qualsiasi forma di sovrapposizione spaziale.

Esempio

Se si dispone di un insieme di strade e si vogliono trovare tutte le strade che attraversano o toccano una specifica stringa di linea che rappresenta una nuova strada proposta, si può usare 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'operatore ST_OVERLAPS restituisce TRUE se due geometrie della stessa dimensione hanno un'intersezione parziale, dove l'intersezione stessa ha la stessa dimensione delle geometrie originali, ma non è uguale a nessuna delle due.

Esempio

Si dispone di un insieme di regioni di vendita sovrapposte e si desidera trovare tutte le regioni che si sovrappongono parzialmente a una nuova zona di vendita proposta.

# 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'operatore ST_TOUCHES restituisce TRUE se i confini di due geometrie si toccano, ma i loro interni non si intersecano. È utile per individuare le adiacenze.

Esempio

Se si dispone di una mappa delle parcelle di proprietà e si vogliono trovare tutte le parcelle che sono direttamente adiacenti a un parco pubblico senza alcuna sovrapposizione.

# 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'operatore ST_WITHIN restituisce TRUE se la prima geometria è completamente all'interno o sul confine della seconda. È l'inverso di ST_CONTAINS.

Esempio

Si vogliono trovare tutte le piccole aree residenziali che si trovano interamente all'interno di un parco più grande.

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

Per ulteriori informazioni su come utilizzare un campo GEOMETRY, consultare la sezione Campo geometrico.

ST_DWITHIN / st_dwithin

L'operatore ST_DWITHIN restituisce TRUE se la distanza tra la geometria A e la geometria B è minore o uguale a un valore specificato (in metri). Attualmente, la geometria B deve essere un punto.

Esempio

Si supponga di avere un insieme di sedi di negozi e di voler trovare tutti i negozi entro 5.000 metri dalla sede di un cliente specifico.

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

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?