Name

ST_HausdorffDistance — Gibt den kürzesten 3-dimensionalen Abstand zwischen zwei geometrischen Objekten als Linie zurück

Synopsis

float ST_HausdorffDistance(geometry g1, geometry g2);

float ST_HausdorffDistance(geometry g1, geometry g2, float densifyFrac);

Beschreibung

Liefert den Hausdorff-Abstand zwischen zwei Geometrien. Der Hausdorff-Abstand ist ein Maß dafür, wie ähnlich oder unähnlich 2 Geometrien sind.

Die Funktion berechnet die "Diskrete Hausdorff-Distanz". Dies ist der Hausdorff-Abstand, der an diskreten Punkten der Geometrien berechnet wird. Der Parameter densifyFrac kann angegeben werden, um durch Verdichtung der Segmente vor der Berechnung des diskreten Hausdorff-Abstands eine genauere Antwort zu erhalten. Jedes Segment wird in eine Anzahl von Untersegmenten gleicher Länge aufgeteilt, deren Anteil an der Segmentlänge dem angegebenen Anteil am nächsten kommt.

Die Einheiten sind in den Einheiten des räumlichen Bezugssystems der Geometrien angegeben.

[Note]

Dieser Algorithmus ist NICHT gleichwertig mit dem Standard-Hausdorff-Abstand. Er berechnet jedoch eine Annäherung, die für eine große Teilmenge nützlicher Fälle korrekt ist. Ein wichtiger Fall sind Linien, die ungefähr parallel zueinander verlaufen und ungefähr gleich lang sind. Dies ist eine nützliche Metrik für die Anpassung von Linien.

Verfügbarkeit: 1.5.0

Beispiele

Hausdorff-Abstand (rot) und Abstand (gelb) zwischen zwei Linien

SELECT ST_HausdorffDistance(geomA, geomB),
       ST_Distance(geomA, geomB)
    FROM (SELECT 'LINESTRING (20 70, 70 60, 110 70, 170 70)'::geometry AS geomA,
                 'LINESTRING (20 90, 130 90, 60 100, 190 100)'::geometry AS geomB) AS t;
 st_hausdorffdistance | st_distance
----------------------+-------------
    37.26206567625497 |          20

Beispiel: Hausdorff-Abstand mit Verdichtung.

SELECT ST_HausdorffDistance(
            'LINESTRING (130 0, 0 0, 0 150)'::geometry,
            'LINESTRING (10 10, 10 150, 130 10)'::geometry,
            0.5);
 ----------------------
          70

Beispiel: Finden Sie für jedes Gebäude die Parzelle, die es am besten repräsentiert. Zunächst muss sich die Parzelle mit der Geometrie des Gebäudes schneiden. DISTINCT ON garantiert, dass jedes Gebäude nur einmal aufgeführt wird. ORDER BY .. ST_HausdorffDistance wählt die Parzelle aus, die dem Gebäude am ähnlichsten ist.

SELECT DISTINCT ON (buildings.gid) buildings.gid, parcels.parcel_id
   FROM buildings
       INNER JOIN parcels
       ON ST_Intersects(buildings.geom, parcels.geom)
   ORDER BY buildings.gid, ST_HausdorffDistance(buildings.geom, parcels.geom);

Siehe auch

ST_FrechetDistance