Comment obtenir l'équivalent de Dissoudre à partir d'ArcGIS for Desktop à l'aide de ST_Union?

11

J'essaie d'obtenir un équivalent à l'outil Dissoudre d'ArcGIS for Desktop en utilisant ST_Union de PostGIS, mais il semble que je n'obtienne pas le résultat attendu.

J'ai une table qui a certains attributs avec la géométrie du polygone. (comme FID, Locstat, Loccnt, Shape)

Voici ma requête:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Dhams
la source
1
Pouvez-vous expliquer quels résultats vous attendez et ce que vous obtenez? En cours d'exécution: SELECT AsText (ST_Union ...) FROM ... peut aider à trouver l'erreur.
Micha
Dans le tableau, j'ai 6842 enregistrements, selon les résultats ArcGIS, je devrais obtenir 1683 enregistrements où, en utilisant la requête, j'obtiens 6842 enregistrements. J'ai également essayé ST_Aggr_Union qui me donne 742 enregistrements avec la géométrie nulle multiple.
Dhams

Réponses:

14

Votre problème est probablement dû à ce que vous avez inclus dans le champ group by.

ST_UNION est une fonction d'agrégation, ce qui signifie qu'elle se dissout en fonction de ce que vous spécifiez comme GROUPparamètre.

Voici ce que vous avez entré:

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

Selon cela, vous regroupez par votre fid, qui est probablement un identifiant unique, et aussi par boundaryshape, qui est la géométrie. Le problème est qu'il est très peu probable que les entités partageant un identifiant unique aient des géométries identiques. Par conséquent, le ST_Unionva probablement se retrouver avec quelque chose comme ce qui suit:

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

Dans ce cas, vous ne devriez dissoudre que sur la base de votre identifiant unique, sauf si vous avez en fait un certain nombre de géométries en double avec le même fid, dont vous essayez de vous débarrasser. Cependant, même dans cette situation, vous ne devez regrouper que sur la base du fid, et le syndicat se chargera de la duplication de la géométrie.

J'essaierais ce qui suit:

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

Cela devrait vous donner le résultat souhaité de la dissolution de toutes les fonctionnalités en fonction de l'attribut commun fid.

Voici le document d'aide sur le site PostGIS: ST_Union

Voir le premier exemple répertorié en bas et notez qu'il n'inclut pas la géométrie dans la section grouper par.

Obtenez spatial
la source
1
Dans certains cas, il est préférable d'aligner les géométries sur la grille avant de faire l'union: SELECT ST_Union (ST_SnapToGrid (geom, 0.0001)) FROM geo_area group by level_identifier;
Maxim Eliseev du