مشغلات الهندسةCompatible with Milvus 2.6.4+
يدعم ميلفوس مجموعة من المشغلات للتصفية المكانية على GEOMETRY الحقول، وهي ضرورية لإدارة وتحليل البيانات الهندسية. تسمح لك هذه المشغلات باسترداد الكيانات بناءً على العلاقات الهندسية بين الكائنات.
تعمل جميع مشغّلات الهندسة من خلال أخذ وسيطتين هندسيتين: اسم الحقل GEOMETRY المحدد في مخطط مجموعتك وكائن هندسي مستهدف ممثل بتنسيق نص معروف (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.
لمعرفة المزيد عن GEOMETRY الحقول في ميلفوس، راجع حقل الهندسة.
مشغلات الهندسة المدعومة
يسرد الجدول التالي قائمة بعوامل الهندسة المتوفرة في ميلفوس.
يجب أن تكون أسماء المشغلات كلها كبيرة أو كلها صغيرة. لا تخلط الحالات داخل نفس اسم المشغل.
المشغل |
الوصف |
مثال |
|---|---|---|
|
يُرجِع TRUE إذا كان الشكلان الهندسيان متطابقين مكانيًا، أي أن لهما نفس مجموعة النقاط والأبعاد. |
هل الشكلان الهندسيان (أ و ب) متماثلان تماماً في الفضاء؟ |
|
ترجع TRUE إذا كان الشكل الهندسي (أ) يحتوي تماماً على الشكل الهندسي (ب)، مع وجود نقطة واحدة مشتركة بينهما على الأقل. |
هل حدود المدينة (أ) تحتوي على حديقة معينة (ب)؟ |
|
تُرجع TRUE إذا كان الشكلان الهندسيان (أ) و(ب) يتقاطعان جزئياً ولكن لا يحتويان على بعضهما البعض بالكامل. |
هل يتقاطع طريقان (أ و ب) عند تقاطع؟ |
|
ترجع TRUE (صحيح) إذا كان للطريقين (أ) و(ب) نقطة مشتركة واحدة على الأقل. هذا هو الاستعلام المكاني الأكثر عمومية والأكثر استخدامًا. |
هل تتقاطع منطقة البحث (أ) مع أي من مواقع المتجر (ب)؟ |
|
يُرجِع TRUE إذا كانت المساحتان (أ) و(ب) من نفس البُعد، ومتداخلتين جزئياً، ولا تحتوي إحداهما على الأخرى بالكامل. |
هل قطعتا الأرض (أ و ب) متداخلتان؟ |
|
تُرجع TRUE إذا كانت قطعتا الأرض (أ) و(ب) تشتركان في حدود مشتركة ولكن لا تتقاطع تصميماتهما الداخلية. |
هل تشترك قطعتا أرض متجاورتان (أ و ب) في حدود مشتركة؟ |
|
تُرجع TRUE إذا كان الشكلان الهندسيان (أ) و(ب) متضمنين بالكامل داخل الشكل الهندسي (ب)، مع وجود نقطة واحدة مشتركة على الأقل بين تصميميهما الداخليين. إنه معكوس |
هل توجد نقطة محددة (أ) ضمن نصف قطر بحث محدد (ب)؟ |
|
ترجع TRUE إذا كانت المسافة بين الشكل الهندسي A والشكل الهندسي B أقل من أو تساوي المسافة المحددة. ملاحظة: يدعم الشكل الهندسي B حاليًا النقاط فقط. وحدة المسافة هي متر. |
ابحث عن جميع النقاط ضمن 5000 متر من نقطة محددة (B). |
ST_EQUALS / st_equals
يقوم المشغّل ST_EQUALS بإرجاع TRUE إذا كان هناك هندسيان متطابقان مكانيًا، أي أن لهما نفس مجموعة النقاط والأبعاد. هذا مفيد للتحقق مما إذا كان كائنان هندسيان مخزنان يمثلان نفس الموقع والشكل بالضبط.
مثال
لنفترض أنك تريد التحقق مما إذا كان الشكل الهندسي المخزّن (مثل نقطة أو مضلع) مطابقًا تمامًا للشكل الهندسي الهدف. على سبيل المثال، يمكنك مقارنة نقطة مخزّنة بنقطة محددة ذات أهمية.
# 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 بإرجاع TRUE إذا كانت الهندسة الأولى تحتوي بالكامل على الهندسة الثانية. هذا مفيد لإيجاد نقاط داخل مضلع، أو مضلعات أصغر داخل مضلع أكبر.
مثال
تخيّل أن لديك مجموعة من أحياء المدينة وتريد العثور على نقطة معيّنة ذات أهمية، مثل مطعم، تقع ضمن حدود منطقة معيّنة.
# 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 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 بإرجاع 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 بإرجاع 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 بإرجاع 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 بإرجاع 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 بإرجاع TRUE إذا كانت المسافة بين الحقل الهندسي (أ) والحقل الهندسي (ب) أقل من أو تساوي قيمة محددة (بالأمتار). حاليًا، يجب أن يكون الشكل الهندسي B نقطة.
مثال
لنفترض أن لديك مجموعة من مواقع المتاجر وتريد العثور على جميع المتاجر في نطاق 5000 متر من موقع عميل معين.
# Find all stores within 5000 meters of the point (120 30)
filter = "ST_DWITHIN(geo_field, 'POINT(120 30)', 5000)"