الاسم
ST_FrechetDistance — تُعيد مسافة فريشيه (Fréchet) بين شكلين.
المختصر
float ST_FrechetDistance(geometry g1, geometry g2, float densifyFrac = -1);
الوصف
تطبّق خوارزمية لحساب مسافة فريشيه مقصورة على نقاط منفصلة لكلا الشكلين، استنادًا إلى حساب مسافة فريشيه المنفصلة. مسافة فريشيه مقياس للتشابه بين المنحنيات يأخذ في الحسبان موقع النقاط وترتيبها على امتداد المنحنيات. لذلك فهي غالبًا أفضل من مسافة هاوسدورف.
عند تحديد densifyFrac الاختياري، تُجري هذه الدالة تكثيفًا للمقاطع قبل حساب مسافة فريشيه المنفصلة. يحدد الوسيط densifyFrac النسبة التي يُكثَّف بها كل مقطع. إذ يُقسَم كل مقطع إلى عدد من المقاطع الفرعية المتساوية الطول، تكون نسبة طول كل منها إلى الطول الكلي أقرب ما يمكن إلى النسبة المعطاة.
الوحدات هي وحدات النظام المرجعي المكاني للشكلين.
|
|
|
يدعم التطبيق الحالي الرؤوس فقط بوصفها المواقع المنفصلة. ويمكن توسيعه للسماح باستخدام كثافة عشوائية من النقاط. |
|
|
|
كلما صغّرنا قيمة densifyFrac، حصلنا على مسافة فريشيه أدق. لكن زمن الحساب واستهلاك الذاكرة يزدادان بمربع عدد المقاطع الفرعية. |
تُنفَّذ بواسطة وحدة GEOS.
متاحة منذ: 2.4.0 - تتطلب GEOS >= 3.7.0
أمثلة
postgres=# SELECT st_frechetdistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry);
st_frechetdistance
--------------------
70.7106781186548
(1 row)
SELECT st_frechetdistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry, 0.5);
st_frechetdistance
--------------------
50
(1 row)