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;
Antworten:
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
GROUP
Parameter 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 nachboundaryshape
der 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 dasST_Union
wahrscheinlich mit so etwas wie dem folgenden enden: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üssenfid
, 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.
quelle