J'ai la couche suivante en utilisant SRID 27700 dans postgis:
Il s’agit de toutes les régions administratives du Royaume-Uni et, comme vous pouvez le constater à partir du groupe de couleurs, chacune d’entre elles possède un champ de texte spécifiant le comté dans lequel elles se trouvent.
Ce que j'aimerais faire, c'est créer des polygones de comté plus grands à partir des plus petits d'un comté donné. Ainsi, dans l'image, les polygones de couleur bleu sarcelle formeraient un grand polygone à partir du seul anneau extérieur contenant tous les polys de cette image. couleur, comme tous les violet, marron, rose, gris, etc. doivent tous former un polygone.
J'ai déjà essayé ce qui suit:
insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name
Mais il continue de générer des géométries brisées que je rencontre ensuite de gros problèmes de traitement.
J'essaie de faire une carte au niveau du comté plus simple avec les principales zones de sortie en.
Toutes les solutions ne doivent pas nécessairement être dans Postgis non plus, j'ai toute la pile OS4Geo installée, la dernière version de QGis et plus d'utilitaires que je ne peux me permettre.
Les seules choses que je n'ai pas sont les grands garçons comme ArcGis (bien que je puisse avoir un vieux Mapinfo traînant quelque part)
Pour mémoire, le jeu de données que j'essaie de créer doit accompagner un livre SIG que je suis en train d'écrire et destiné aux programmeurs .NET souhaitant écrire des applications SIG à l'aide de .NET.
Après avoir essayé les suggestions ci-dessous, celle qui a fonctionné le mieux a été la solution «Paul Ramseys».
J'ai maintenant un joli fichier simplifié de comtés et arrondissements qui est juste assez simple pour mon livre, mais assez complexe pour me permettre de démontrer un SQL géo-spatial intéressant.
Même si la solution de Paul a finalement été celle qui a fonctionné pour moi, j'ai également utilisé d'autres réponses pour simplifier la carte des polygones et réduire davantage la complexité.
Cependant, bien que ST_Collect soit plus rapide que ST_Union, il a été observé que c’était aussi le principal responsable des géométries brisées. Je suppose que l’augmentation de la vitesse est obtenue au détriment d’une précision moindre de la fonction principale.
astext(multi())
partie? Je m'éloigne simplement de ce que je vois dans d'autres exemples de dissolution PostGIS.Réponses:
ST_Union fonctionnerait, mais votre travail en ligne n’est presque pas propre. Les limites de vos petits trucs ne sont donc pas toutes parfaitement égales. Vous pouvez les aligner doucement sur une grille pour essayer d'augmenter les chances que les sommets s'alignent, mais je parie que vous aurez encore quelques cas qui ne fonctionneront pas. Soit ils vont au-delà de la tolérance ou, plus probablement, il y aura des endroits où les sommets ne sont pas liés, il y a donc une ligne d'un côté et un sommet de l'autre.
Si vous utilisez PostGIS 2.0, la construction d'une structure de topologie avec une tolérance peut vous permettre d'obtenir la réponse que vous recherchez, si vous avez de la chance.
la source
Incorrect parameter count in the call to native function 'ST_Union'
et je ne sais pas si c'est une limitation de MySQL.Vous dites qu'il faut "... former un grand polygone à partir de l'anneau extérieur unique qui contient tous les polys ...". Le ST_ExteriorRing le fait,
Vous pouvez utiliser ST_Union (), comme suggéré, ou tester avec ST_Collection ().
NOTES: pour éviter les petits creux ou les "géométries brisées", vous pouvez utiliser st_convexhull et / ou ST_Simplify pour chaque geom,
et vérifiez vos géométries,
la source
La fonction ST_Collect est une fonction "agrégée" dans la terminologie de PostgreSQL
"
SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN
" renverra une GEOMETRYCOLLECTION distincte pour chaque valeur distincte d'ATTRCOLUMhttp://postgis.net/docs/ST_Collect.html
Remarque: ST_Collect est beaucoup plus rapide que ST_Union.
la source
D'après votre question, je suppose que vous utilisez le produit Boundary-Line d'Ordnance Survey. Si tel est le cas, il inclut déjà un jeu de données au niveau du comté, il n’est donc pas nécessaire de le générer vous-même à partir de zones paroissiales de niveau inférieur.
Si vous n'utilisez pas Boundary-Line, je vous recommande de le faire car il est gratuit sous la licence OpenData du système d'exploitation et dispose d'un niveau comté comme fichier de forme que vous pouvez charger directement dans PostGIS.
la source