J'ai un fichier de formes polyligne représentant un réseau routier et un second fichier de formes contenant des points. Je voudrais utiliser PostGIS (vraisemblablement PgRouting) pour identifier les sous-réseaux ou les zones de service rayonnant à partir de ces points.
Essentiellement, j'espère poser la question: "À partir du point X, jusqu'où pourrais-je marcher dans une direction donnée, compte tenu d'un budget de déplacement total de 1 km, en suivant le réseau routier?" Le résultat serait un ensemble de polylignes coupées représentant la gamme totale des possibilités de déplacement, compte tenu d'un budget de déplacement de 1 km.
Pour référence, cette analyse GRASS semble être exactement ce que je veux faire (sauf que je veux le faire dans PostGIS): http://www.gdf-hannover.de/lit_html/grass60_v1.2_en/node57.html#sec: optalloc
Cet exemple suivant semble être presque ce que je veux faire, sauf qu'il semble répondre à la question "vers quels nœuds pourrais-je voyager avec un budget de déplacement de X distance?" http://underdark.wordpress.com/2011/02/12/drive-time-isochrones/
La seconde n'est pas tout à fait la réponse que je cherche, car je veux que les polylignes soient coupées sur ma distance de déplacement - je m'en fiche si je parviens jusqu'à un nœud.
Réponses:
Une pensée que je devais était de 1) exécuter la routine driving_distance et 2) utiliser la routine "points_as_polygon" de pgRouting (qui appelle la fonction alphashape) pour générer le plus petit polygone (s) à des distances de coût données en fonction des points de la routine driving_distance Retour. Ensuite, vous pouvez sélectionner toutes les rues dans les polygones, ce qui vous donnera une idée générale du voyage.
Si vous n'avez pas suivi la discussion sur la liste des utilisateurs de pgRouting , ils ont discuté plus d'options récemment (discussions de mai et juin 2011).
la source
Comme il s'agit vraiment d'un problème de graphique, ce dont vous avez besoin, c'est de la connectivité / topologie + informations sur les coûts. Pour pg_routing, c'est la table que vous envoyez aux algorithmes de chemin le plus court. Cet article contient des informations sur la façon d'en créer un (je suppose que vous en avez déjà un). Désolé, je ne peux pas vous donner la fonction exacte dans pg_routing qui fait cela, mais en écrire une devrait être faisable. Cependant, je peux vous dire que si vous continuez d'appeler le chemin le plus court encore et encore, vous faites l'algorithme ci-dessous encore et encore et supprimez le résultat - pas efficace du tout.
Votre solution devient alors marcher chaque bord tout en les ajoutant à une "liste parcourue" et en calculant un coût jusqu'à ce que votre budget (c'est-à-dire la distance) soit dépassé. Si le budget est acceptable (c'est-à-dire que le budget n'a pas été dépassé), vous ajoutez également la géométrie à un "sac de géométrie de liste acceptable". Vous ne devez traiter chaque bord qu'une seule fois. Pour la toute dernière tranche (où vos budgets sont dépassés), vous devez obtenir la longueur et interpoler la distance exacte que vous souhaitez parcourir , puis ajouter le résultat à la "liste acceptable". Votre résultat est une union de ce sac de géométrie.
la source
Comme vous n'avez qu'à considérer une petite région (1 km de rayon au maximum), vous pourriez probablement vous en tirer en divisant les liens en plusieurs petits morceaux (selon la précision que vous souhaitez atteindre) et en créant les nœuds nécessaires. Les réseaux "haute résolution" qui en résultent devraient être encore gérables.
la source