ST_FrechetDistance — Gibt den kürzesten 3-dimensionalen Abstand zwischen zwei geometrischen Objekten als Linie zurück
float ST_FrechetDistance(
geometry g1, geometry g2, float densifyFrac = -1)
;
Implementiert einen Algorithmus zur Berechnung der Fréchet-Metrik, der für beide geometrischen Objekte auf diskrete Punkte beschränkt ist und auf Computing Discrete Fréchet Distance beruht. Die Fréchet-Metrik ist ein Maß für die Ähnlichkeit von Kurven, welches die Position und die Reihenfolge der Kurvenstützpunkte mit einbezieht. Daher ist sie oft besser geeignet als die Hausdorff-Metrik.
Wenn der optionale Parameter "densifyFrac" vorgegeben wird, dann führt diese Funktion eine Verdichtung der Linienstücke durch, bevor die diskrete Fréchet-Metrik berechnet wird. Der Parameter "densifyFrac" bestimmt um welchen Anteil die Linienstücke verdichtet werden. Jedes Linienstück wird in gleichlange Teilsegmente zerlegt, deren Anteil an der Gesamtlänge am nächsten an den vorgegebenen Anteil herankommt.
Die Einheiten sind in den Einheiten des räumlichen Bezugssystems der Geometrien angegeben.
Bei der aktuellen Implementierung können die diskreten Punkte nur Knoten sein. Dies könnte erweitert werden, um eine beliebige Punktdichte zu ermöglichen. |
Umso kleiner wir densifyFrac wählen, umso genauer wird die Fréchet-Metrik. Aber die Rechenzeit und der Speicherplatzbedarf steigen quadratisch mit der Anzahl der Teilabschnitte. |
Wird vom GEOS Modul ausgeführt
Verfügbarkeit: 2.4.0 - benötigt 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)