Mehr

Toleranz in Postgis einstellen


gibt es in Postgis sowieso eine Toleranz einzustellen, in Arcgis ist Toleranz der minimale Abstand, der zwei Punkte trennen könnte, wenn der Abstand zwischen ihnen kleiner als die Toleranz ist, so dass die Punkte als überlappt betrachtet werden. Ich muss diesen Parameter setzen, weil ich mit Funktionen wie seltsame Ergebnisse erhalteST_Schnittpunkte, ST_gleich, ST_Differenz. Unter diesen Bedingungen überprüfe ich Schnittpunkte durchST_Distanz(p1 , p2) < Toleranzaber ich hätte gerne eine robustere und allgemeinere lösung.

in meinem Anwendungsfall benötige ich nur 1cm bis 1mm Präzision, aber zum Beispiel liefern ST_Intersects manchmal wegen einiger Mikrometer (0,000001) nicht die erwarteten Ergebnisse.

SELECT ST_Intersects('POINT(0.00000000000000001 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);

Die robusteste Strategie zum Bestimmen eines Geometrieschnittpunkts besteht darin, ST_DWithin(g1, g2, dist) zu verwenden. Wenn Sie jedoch Geometrieüberlagerungswerkzeuge wie ST_Difference oder ST_Intersection verwenden, müssen die Knoten aneinander "geschnappt" werden. Versuchen Sie also ST_Snap (Geometrieeingabe, Geometriereferenz, Gleitkommatoleranz). Hier ist ein Beispiel für mehrere Techniken.

SELECT ST_Intersects(a, b) AS intersects_ohne_snap, ST_AsText(ST_Snap(a, b, tol)) AS a_snapped_on_b, ST_Intersects(ST_Snap(a, b, tol), b) AS intersects_with_a_snapped_on_b, ST_Asl(b) ) AS b_snapped_on_a, ST_Intersects(ST_Snap(b, a, tol), b) AS intersects_with_b_snapped_on_a, ST_DWithin(a, b, tol), ST_Distance(a, b) < tol AS distance_lt_tol FROM ( SELECT 0000'POINT(0.00'0000) :Geometrie AS a, 'LINESTRING ( 0 0, 0 2 )'::Geometrie AS b, 0.001 AS tol ) f; -[ AUFZEICHNUNG 1 ]------------------+------------------------------------ überschneidet_ohne_snap | f a_snapped_on_b | POINT(0 0) schneidet_mit_a_snapped_on_b | t b_snapped_on_a | LINESTRING(1e-017 0,0 2) schneidet_mit_b_snapped_on_a | t st_dinnerhalb | t distance_lt_tol | t

Auch hier ist die Vereinfachung der Frage ST_DWithin. (ST_Snap macht meiner Erfahrung nach manchmal unerwartete Dinge)


Schau das Video: PostgreSQL + PostGIS. Basics (Oktober 2021).