J'ai un graphe de réseau que je dois simplifier dans le sens de réduire le nombre d'arêtes . L'idée serait de fusionner les nœuds proches les uns des autres et de supprimer les bords courts de connexion.
Comment cela pourrait-il être réalisé dans PostGIS ou GRASS? Ou existe-t-il de meilleures approches pour simplifier automatiquement un réseau comme celui-ci?
J'ai déjà essayé la fonction ST_SnapToGrid mais je ne suis pas satisfait des résultats (gris = original, noir = cassé):
Réponses:
Le plus proche que je suis venu jusqu'ici est le suivant:
Il claque les routes avec une tolérance de 5 mètres et supprime toutes les lignes de longueur nulle. Ce n'est pas une solution optimale car elle semble s'aligner de manière plutôt aléatoire sur un sommet.
la source
Avez-vous essayé le GRASS v.generalize ?
v.generalize
vous permet de choisir l'algorithme de généralisation avec l' attribut method . Il y en a un tas: douglas, douglas_reduction, lang, reduction, reumann, boyle, slide_averaging, distance_weighting, chaiken, hermite, serpents, réseau, déplacement .Et paramètres supplémentaires
threshold
,degree_thresh
,angle_thresh
(selon l'algorithme choisi) peut vous aider à obtenir un résultat précis.Voici un tutoriel .
la source
Je ne l'ai pas fait mais je pense que je peux suggérer une direction.
ST_ModEdgeHeal fusionnera un bord dans l'autre. ST_NewEdgeHeal remplacera les deux par un nouveau bord.
Manuel de topologie PostGIS
la source
@underdark, je vois que vous avez écrit un outil pour densifier les lignes dans Sextante. Par conséquent, je suggère l'algorithme suivant pour éviter de prendre "au hasard" un de vos points.
Sélectionnez les segments de ligne dont vous souhaitez vous débarrasser en fonction de leur longueur.
Pour chacun de ces segments, créez un point au point médian
Supprimer le petit segment
Vous pouvez maintenant utiliser ST_Snap dans PostGIS (voir l'exemple ici )
EDIT: notez que dans votre cas, vous pouvez également utiliser v.net en premier afin de supprimer les pseudo-nœuds (nœud qui ne connecte que deux lignes)
la source
Voici comment Michaël Michaud a analysé cela sur la liste des développeurs OpenJUMP:
la source