Milvus
Zilliz
Beranda
  • Panduan Pengguna
  • Home
  • Docs
  • Panduan Pengguna

  • Pencarian

  • Penyaringan

  • Operator Geometri

Operator GeometriCompatible with Milvus 2.6.4+

Milvus mendukung seperangkat operator untuk pemfilteran spasial pada bidang GEOMETRY, yang sangat penting untuk mengelola dan menganalisis data geometri. Operator-operator ini memungkinkan Anda untuk mengambil entitas berdasarkan hubungan geometri antar objek.

Semua operator geometri berfungsi dengan mengambil dua argumen geometri: nama bidang GEOMETRY yang ditentukan dalam skema koleksi Anda dan objek geometri target yang direpresentasikan dalam format Well-Known Text (WKT).

Menggunakan sintaks

Untuk memfilter pada bidang GEOMETRY, gunakan operator geometri dalam sebuah ekspresi:

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

  • Berbasis jarak: ST_DWITHIN(geo_field, '{wkt}', distance)

Di mana

  • operator adalah salah satu operator geometri yang didukung (misalnya, ST_CONTAINS, ST_INTERSECTS). Nama operator harus menggunakan huruf besar atau huruf kecil. Untuk daftar operator yang didukung, lihat Operator geometri yang didukung.

  • geo_field adalah nama bidang GEOMETRY Anda.

  • '{wkt}' adalah representasi WKT dari geometri yang akan ditanyakan.

  • distance adalah ambang batas khusus untuk ST_DWITHIN.

Untuk mempelajari lebih lanjut tentang bidang GEOMETRY di Milvus, lihat Bidang Geometri.

Operator geometri yang didukung

Tabel berikut mencantumkan operator geometri yang tersedia di Milvus.

Nama operator harus menggunakan huruf besar atau huruf kecil. Jangan mencampur huruf besar dan kecil dalam nama operator yang sama.

Operator

Deskripsi

Contoh

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

Mengembalikan TRUE jika dua geometri identik secara spasial, yang berarti mereka memiliki kumpulan titik dan dimensi yang sama.

Apakah dua geometri (A dan B) sama persis dalam ruang?

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

Mengembalikan nilai TRUE jika geometri A sepenuhnya berisi geometri B, dengan interiornya memiliki setidaknya satu titik yang sama.

Apakah sebuah batas kota (A) berisi sebuah taman tertentu (B)?

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

Mengembalikan nilai TRUE jika geometri A dan B berpotongan sebagian tetapi tidak sepenuhnya berisi satu sama lain.

Apakah dua jalan (A dan B) berpotongan di sebuah persimpangan?

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

Mengembalikan nilai TRUE jika geometri A dan B memiliki setidaknya satu titik yang sama. Ini adalah kueri spasial yang paling umum dan banyak digunakan.

Apakah area pencarian (A) bersinggungan dengan salah satu lokasi toko (B)?

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

Mengembalikan TRUE jika geometri A dan B memiliki dimensi yang sama, tumpang tindih sebagian, dan tidak ada yang sepenuhnya berisi satu sama lain.

Apakah dua bidang tanah (A dan B) tumpang tindih?

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

Mengembalikan nilai TRUE jika geometri A dan B memiliki batas yang sama namun interiornya tidak berpotongan.

Apakah dua properti yang bertetangga (A dan B) memiliki batas yang sama?

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

Mengembalikan nilai TRUE jika geometri A sepenuhnya berada di dalam geometri B, dengan interiornya memiliki setidaknya satu titik yang sama. Ini adalah kebalikan dari ST_Contains(B, A).

Apakah sebuah titik tertentu (A) berada dalam radius pencarian yang ditentukan (B)?

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

Mengembalikan TRUE jika jarak antara geometri A dan geometri B kurang dari atau sama dengan jarak yang ditentukan.

Catatan: Geometri B saat ini hanya mendukung titik. Satuan jarak adalah meter.

Temukan semua titik dalam jarak 5000 meter dari titik tertentu (B).

ST_SAMA / st_equals

Operator ST_EQUALS mengembalikan TRUE jika dua geometri identik secara spasial, yang berarti mereka memiliki set titik dan dimensi yang sama. Hal ini berguna untuk memverifikasi apakah dua objek geometri yang disimpan mewakili lokasi dan bentuk yang sama.

Contoh

Misalkan Anda ingin memeriksa apakah geometri yang tersimpan (seperti titik atau poligon) sama persis dengan geometri target. Sebagai contoh, Anda dapat membandingkan titik yang tersimpan dengan titik yang diinginkan.

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

ST_CONTAINS / st_contains

Operator ST_CONTAINS mengembalikan TRUE jika geometri pertama benar-benar berisi geometri kedua. Hal ini berguna untuk menemukan titik di dalam poligon, atau poligon yang lebih kecil di dalam poligon yang lebih besar.

Contoh

Bayangkan Anda memiliki koleksi distrik kota dan ingin menemukan tempat menarik tertentu, seperti restoran, yang berada di dalam batas-batas distrik tertentu.

# 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

Operator ST_CROSSES mengembalikan TRUE jika perpotongan dua geometri membentuk geometri dengan dimensi yang lebih rendah dari geometri aslinya. Hal ini biasanya berlaku pada sebuah garis yang melintasi sebuah poligon atau garis lain.

Contoh

Anda ingin menemukan semua jalur pendakian (string garis) yang melintasi garis batas tertentu (string garis lain) atau memasuki area yang dilindungi (poligon).

# 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

Operator ST_INTERSECTS mengembalikan TRUE jika dua geometri memiliki titik batas atau interior yang sama. Ini adalah operator tujuan umum untuk mendeteksi segala bentuk tumpang tindih spasial.

Contoh

Jika Anda memiliki koleksi jalan dan ingin menemukan semua jalan yang melintasi atau menyentuh string garis tertentu yang merepresentasikan jalan baru yang diusulkan, Anda dapat menggunakan 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_TINDIH / st_tumpang tindih

Operator ST_OVERLAPS mengembalikan TRUE jika dua geometri dengan dimensi yang sama memiliki perpotongan parsial, di mana perpotongan itu sendiri memiliki dimensi yang sama dengan geometri asli, tetapi tidak sama dengan salah satu dari mereka.

Contoh

Anda memiliki sekumpulan wilayah penjualan yang tumpang tindih dan ingin menemukan semua wilayah yang tumpang tindih secara parsial dengan zona penjualan baru yang diusulkan.

# 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

Operator ST_TOUCHES mengembalikan TRUE jika dua batas geometri bersentuhan, tetapi interiornya tidak bersinggungan. Hal ini berguna untuk mendeteksi kedekatan.

Contoh

Jika Anda memiliki peta bidang properti dan ingin menemukan semua bidang yang berbatasan langsung dengan taman umum tanpa adanya tumpang tindih.

# 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_DALAM / st_within

Operator ST_WITHIN mengembalikan TRUE jika geometri pertama sepenuhnya berada di dalam interior atau pada batas geometri kedua. Ini adalah kebalikan dari ST_CONTAINS.

Contoh

Anda ingin menemukan semua area perumahan kecil yang terletak sepenuhnya di dalam area taman yang lebih besar.

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

Untuk informasi lebih lanjut mengenai cara menggunakan bidang GEOMETRY, lihat Bidang Geometri.

ST_DWITHIN / st_dwithin

Operator ST_DWITHIN mengembalikan TRUE jika jarak antara geometri A dan geometri B kurang dari atau sama dengan nilai yang ditentukan (dalam meter). Saat ini, geometri B harus berupa sebuah titik.

Contoh

Misalkan Anda memiliki koleksi lokasi toko dan ingin menemukan semua toko dalam jarak 5.000 meter dari lokasi pelanggan tertentu.

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

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?