Supprimer des polygones de ruban (définis) à l'aide de PostGIS? [fermé]

9

Comment puis-je écrire SQL (pour PostGIS dans PostgreSQL) pour supprimer les polygones de ruban (y compris les longs slivers étroits et certains petits polygones irréguliers qui étaient des `` lacunes '' erronées dans le jeu de données d'origine) de mon jeu de données en fusionnant avec un polygone adjacent avec le bord le plus long?

J'ai un jeu de données (nom de table: "Végétation" contenant plusieurs milliers de polygones identifiés comme un ruban ou un "vrai" polygone dans une colonne de description (nom de colonne: "desc") comme "ruban" ou "principal". [Modifier: Avant pour importer mon jeu de données dans PostGIS, je l'ai nettoyé en important dans GRASS (c'est aussi la façon dont j'ai converti tous les espaces en petits polygones, que j'ai ensuite fusionné avec le jeu de données principal. J'ai trouvé si j'augmentais la tolérance de capture et la surface minimale passée '' 1 'dans l'importation GRASS, j'ai commencé à perdre les fonctionnalités souhaitées.]

Je crois comprendre que je pourrais avoir besoin des étapes suivantes:

  1. Identifiez le polygone (Vegetation.desc = "principal") adjacent à chaque ruban (Vegetation.desc = "ruban") partageant le bord le plus long.
  2. Identifiez le bord entre chaque ruban et son polygone principal adjacent partageant le bord le plus long identifié à l'étape 1. (Peut-être en utilisant ST_Relate)
  3. Supprimez le bord entre chaque ruban et son polygone principal adjacent partageant le bord le plus long à l'aide de l'identificateur de bord retourné à l'étape 2. (Peut-être en utilisant ST_RemEdgeModFace)

Je n'ai qu'une compréhension très basique de SQL et le processus ci-dessus dépasse mes capacités.

DavidM
la source
extension "topologie postgis", si j'ai bien compris, la création d'une topologie avec une tolérance plus grande que votre ruban moyen nettoiera les géométries. mais je n'ai rien fait de tel
simplexio
Je pense que je perdrais beaucoup de résolution en créant une topologie avec une tolérance suffisamment grande en raison de la taille de certains des «éclats» (voir la clarification dans le texte). Cela peut être dû à ma compréhension limitée et les solutions plus simples sont les bienvenues!
DavidM
bienvenue au gis et au nettoyage des données. Avez-vous accès à FME? celui-ci est assez facile à utiliser et a une option pour supprimer les éclats des polygones. Alternatives à gis.stackexchange.com/questions/24365/… et google semble trouver des réponses pl / pgsql à votre question (aucune idée de leur qualité). Cela dit, il n'y a pas de moyen super facile de le faire que je sache, le nettoyer à la main est le moyen le plus "simple" de le faire, mais je peux prendre beaucoup de temps
simplexio
La substance argentée laisse des trous si vous créez une union ou y aura-t-il des artefacts intersectés ou les deux types d'erreurs d'arrondi?
huckfinn
1
J'ai résolu temporairement mon problème (pour le projet en cours) en utilisant la version d'essai d'ARCGIS et en appliquant la fonction d'élimination. Cela a bien fonctionné. Je serais toujours prêt à travailler sur une solution SQL à l'aide de postgis.
DavidM

Réponses:

3

J'utilise ceci lors de l'agrégation des formes de l'ensemble de données GADM2 dans SQL Server:

SET @g2 = @g1.STBuffer(1).Reduce(1).STBuffer(-1).Reduce(1)

Le reduce()efface les artefacts étendus et accélère les choses par un facteur de 100x - un peu rude, mais bon pour les approximations.

Daniel
la source