PgRouting-如何在达到最高费用时剪辑链接?


13

我有一个代表道路网络的折线shapefile和一个包含点的第二个shapefile。我想使用PostGIS(大概是PgRouting)来识别从这些点辐射的子网或服务区域。

本质上,我希望问一个问题:“从X点开始,如果总旅行预算为1公里,沿着道路网络,我可以在任何给定的方向上走多远?” 在给定1 km的旅行预算的情况下,结果将是一组修剪的折线,它们代表旅行可能性的总范围。

作为参考,此GRASS分析似乎正是我要执行的操作(除了我要在PostGIS中执行的操作):http: //www.gdf-hannover.de/lit_html/grass60_v1.2_en/node57.html#sec : optalloc

下一个示例似乎几乎是我想要做的,只是它似乎回答了“在给定X距离旅行预算的情况下我可以旅行到哪个节点?”这一问题。http://underdark.wordpress.com/2011/02/12/drive-time-isochrones/

第二个问题并不是我要寻找的答案,因为我希望将折线限制在我的行进距离之内-我不在乎是否将其一直延伸到一个节点。


我想到的一种选择是以某种方式将折线分割成很多点。这使我更接近正确的答案,但似乎很hack弱,仍然不能完全解决我的问题。
彼得

Answers:


2

我曾经想到的是1)运行Driving_distance例程,2)使用pgRouting中的“ points_as_polygon”例程(调用alphashape函数),根据Driving_distance例程中的点在给定的成本距离下生成最小的多边形。返回。然后,您可以选择多边形内的所有街道,这将给您大致的旅行概念。

如果您没有关注pgRouting用户列表上的讨论,那么他们最近一直在讨论更多选项(2011年5月和2011年6月的主题)。


1
有趣的用户列表讨论。糟糕的是Driving_distance函数有问题。
昏暗

1

由于这确实是一个图形问题,因此您需要的是连通性/拓扑+成本信息。对于pg_routing,这是您发送给最短路径算法的表。本文提供了有关如何构建一个的信息(我假设您已经拥有一个)。抱歉,我无法在pg_routing中提供执行此操作的确切功能,但是写一个应该可以。但是,我可以告诉您,如果您一遍又一遍地调用shortest_path,那么您将一遍又一遍地执行以下算法并将结果浪费掉-根本没有效率。

然后,您的解决方案将遍历所有边缘,同时将其添加到“遍历列表”并计算成本,直到您的预算(即距离)被透支为止。如果预算是可以接受的(即预算尚未透支),则还将几何图形添加到“可接受的列表几何图形袋”中。您仅需将每个边精确地处理一次。对于最后一个边缘(预算被透支的地方),您需要获取长度并内插您要移动的确切距离,然后将结果添加到“可接受的列表”中。你的结果是一个工会是几何袋。


1
最后一步有一个微妙之处:可以从其任一端点到达某些边缘。即使从端点之一遍历整个边缘将超出预算限制,这也可能导致包括两端的一部分甚至整个边缘 例如,考虑从点a沿着具有单位长度边{(a,b),(a,c),(b,c)}和预算为1.6的无向图行进。您可以以1的费用到达bc,还有0.6可以花费。这使得沿边(b,c)的每个点都可以访问。
ub

您是对的:) +1
拉吉·亚瑟·伯姆

1

“从X点开始,在总预算为1公里的情况下,沿着道路网络,我可以朝任何给定的方向走多远?”

由于您只需要考虑一个较小的区域(最大半径为1 km),因此可以避免将链接分成多个小块(取决于要达到的精度)并创建必要的节点。由此产生的“高分辨率”网络应仍可管理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.