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
Both lines are traversed from left to right. The first line is straight, while the second bows upward through its middle vertex. The point ordering matters, so keeping both inputs in the same direction makes the comparison clearer.
WITH lines AS (
SELECT 'LINESTRING (0 0,100 0)'::geometry AS baseline,
'LINESTRING (0 0,50 50,100 0)'::geometry AS bowed
)
SELECT baseline AS baseline,
bowed AS bowed,
ST_FrechetDistance(baseline, bowed) AS discrete_distance,
ST_FrechetDistance(baseline, bowed, 0.5) AS densified_distance
FROM lines;