Wie kann mit ST_Union ein Äquivalent zu "Auflösen aus ArcGIS für Desktop" erreicht werden?

11

Ich versuche, mit ST_Union von PostGIS ein Äquivalent zum Dissolve-Tool von ArcGIS for Desktop zu erzielen, aber es scheint, dass ich kein erwartetes Ergebnis erhalte.

Ich habe eine Tabelle, die bestimmte Attribute mit der Polygongeometrie hat. (wie FID, Locstat, Loccnt, Shape)

Hier ist meine Frage:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Dhams
quelle
1
Können Sie erklären, welche Ergebnisse Sie erwarten und was Sie erhalten? Wird ausgeführt: SELECT AsText (ST_Union ...) FROM ... kann helfen, den Fehler zu finden.
Micha
In der Tabelle habe ich 6842 Datensätze. Gemäß den ArcGIS-Ergebnissen sollte ich 1683 Datensätze erhalten, wobei ich bei Verwendung der Abfrage 6842 Datensätze erhalte. Ich habe auch ST_Aggr_Union ausprobiert, das mir 742 Datensätze mit der Mehrfach-Null-Geometrie gibt.
Dhams

Antworten:

14

Ihr Problem liegt wahrscheinlich daran, was Sie nach Feld in die Gruppe aufgenommen haben.

ST_UNION ist eine Aggregatfunktion, dh sie wird basierend auf dem, was Sie als GROUPParameter angeben , aufgelöst.

Folgendes haben Sie eingegeben:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

Demnach gruppieren Sie nach Ihrer fid, die wahrscheinlich eine eindeutige Kennung ist, und auch nach boundaryshapeder Geometrie. Das Problem dabei ist, dass es höchst unwahrscheinlich ist, dass die Features, die eine eindeutige ID gemeinsam haben, identische Geometrien aufweisen. Daher wird das ST_Unionwahrscheinlich mit so etwas wie dem folgenden enden:

Input:   
fid     boundaryshape  
1         11  
1         12  
1         11  
1         13  
2         12  
2         13  
2         12  
3          5  
3          2  
3          4  

Output:  
fid     boundaryshape  
1        (11 + 11)  
1        12  
1        13  
2        (12 + 12)  
2        13  
3        2  
3        4  
3        5

In diesem Fall sollten Sie sich nur auf der Grundlage Ihrer eindeutigen Kennung auflösen, es sei denn, Sie haben tatsächlich mehrere doppelte Geometrien mit derselben fid, die Sie entfernen möchten. Selbst in dieser Situation sollten Sie nur anhand der gruppieren müssen fid, und die Vereinigung kümmert sich um die Geometrieduplizierung.

Ich würde folgendes versuchen:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;

Das sollte Ihnen das gewünschte Ergebnis bringen, wenn Sie alle Funktionen basierend auf dem gemeinsamen Attribut auflösen fid.

Hier ist das Hilfedokument auf der PostGIS-Site: ST_Union

Sehen Sie sich das erste unten aufgeführte Beispiel an und beachten Sie, dass die Geometrie nicht in der Gruppe nach Abschnitt enthalten ist.

Holen Sie sich räumlich
quelle
1
In einigen Fällen ist es besser, Geometrien vor dem Vereinigen am Raster zu fangen: SELECT ST_Union (ST_SnapToGrid (geom, 0,0001)) FROM geo_area group by level_identifier;
Maxim Eliseev