Extraction de la ligne centrale d'un polygone complexe dans PostGIS / Python

8

Une idée comment extraire la ligne médiane du polygone suivant (Fig1) en utilisant des fonctions PostGIS ou des modules Python? J'essayais la fonction Voronoi mais ce n'est pas utile pour ce type de forme. Je veux quelque chose comme Fig2 blackline.

Fig1: Forme de polygone Fig2: Ligne centrale

Zia
la source
2
Vous voudrez peut-être regarder cette réponse: gis.stackexchange.com/questions/29863/… Je sais qu'il utilise ArcGIS à la place, mais l'approche peut être utile.
WhiteboxDev
2
Que diriez-vous de: postgis.net/docs/ST_StraightSkeleton.html ?
Jakub Kania
@Jakub J'essaie de configurer SFCGAL (nécessaire pour la fonction Skeleton) sur ma base de données PostGIS déjà existante. Bien que j'aie installé le libSFCGAL.sofichier dans le /usr/local/librépertoire, mais je ne sais pas comment importer ST_StriaghtSkeleton()la base de données? Une idée?
Zia
PostGIS doit être compilé avec le support SFCGAL, mais c'est une question différente et pas quelque chose que je connais trop bien.
Jakub Kania
@Jakub Merci. J'ai en quelque sorte résolu cette configuration SFCGAL par moi-même ici
Zia

Réponses:

4

Cela peut être un mauvais outil pour vous, mais vous pouvez le faire simplement avec OpenJUMP et le plugin Skeletonizer. Le plugin peut être téléchargé à partir de http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_plugins/More%20Plugins/JUMP%20Skeletonizer%20Plugin/

Le fichier zip contient un bon manuel. Le plugin est destiné aux cours d'eau et aux plans d'eau, mais votre polygone imite un flux pour moi.

Ceci est votre polygone tel que je l'ai numérisé. Remarquez les sommets dans les lignes centrales des entrées / sorties.

entrez la description de l'image ici

Points d'entrée numérisés sur une couche séparée. Les points doivent s'accrocher aux sommets sur la limite du polygone.

entrez la description de l'image ici

Utilisez les outils Skeletonizer et remplissez les champs

entrez la description de l'image ici

Obtenez le résultat

entrez la description de l'image ici

user30184
la source
Malheureusement, le fichier jar ne contient aucun manuel. Pourriez-vous s'il vous plaît me guider comment ajouter ce plugin à mon interface graphique OpenJump?
Zia
Regardez à l'intérieur du zip , dans skeletonizer-1.0 \ doc \ vous devriez trouver le fichier "SkeletonizerUserGuide.doc". L'installation se fait en déposant les fichiers jar de skeletonizer-1.0 \ lib \ dans le répertoire lib \ ext dans OpenJUMP.
user30184
Cependant, il semble que la plupart des jars ou des versions plus récentes de ceux-ci soient déjà inclus dans OpenJUMP soit dans \ lib soit dans \ lib \ ext. Il est peut-être préférable de copier uniquement ceux qui semblent manquer. Un redémarrage est nécessaire après l'ajout de nouveaux pots.
user30184
J'ai trouvé ce pot ici . Mais je reçois cette erreur java.lang.Exception: Could not determine shapefile type - data is either all GeometryCollections or empty (Illegal State Exception)lors de l'exécution de ce plugin Skeletonizer
Zia
3

Si votre polygone est raster, numérisez-le.

Une fois que votre polygone est vraiment un polygone :), une première solution se trouve, comme @WhiteboxDev l'a dit, c'est le squelette droit, mais il a le problème que, outre la ligne médiane que vous voulez, il renvoie également beaucoup de segments rayonnant de cette ligne vers la bordure de votre polygone. Mais si vous avez PostGIS 2.2+, vous pouvez utiliser à la ST_ApproximateMedialAxis()place, ce que vous voulez.

Marcos Dione
la source