函数:
CREATE OR REPLACE FUNCTION driving_distance(
sql text,
source_id integer,
distance float8,
directed boolean,
has_reverse_cost boolean)
RETURNS SETOF path_result
参数:
sql: 查询出哪些数据行需要计算
- id:线id(一般取gid)
- source: 起始源点(顶点)
- target: 目标源点(顶点)
- cost: 边的遍历权值 (防止负权边被插入到路径中).
source_id:起点id
distance: 加权值 (不是工程单位 – 他们是不一样的).
directed: true if the graph is directed如果路径有向,设置为true
has_reverse_cost: 如果为true, 反向权值(reverse_cost)列的SQL生成的行设置将用于遍历的权值的优势最优边在相反的方向.
输出:
这个函数返回一组数据。有一行是每个交叉边和一个额外的包括含终端顶点。每行的列如下:
- vertex_id:从起始顶点,依次为每个交叉的顶点,最后一个为路径的目标顶点。
- edge_id:交叉的边id(一般为gid)
- cost: 边的距离,总路径为距离为所有值的和。
示例:
SELECT * FROM driving_distance('SELECT gid AS id,source,target,
length::double precision AS cost FROM dourol',10549,0.01,false,false);
vertex_id | edge_id | cost
-----------+---------+---------------
6190 | 120220 | 0.00967666852
6205 | 118671 | 0.00961557335
6225 | 119384 | 0.00965668162
6320 | 119378 | 0.00959826176
...
...
...
15144 | 122612 | 0.00973386526
15285 | 120471 | 0.00912965866
15349 | 122085 | 0.00944814966
15417 | 120471 | 0.00942316736
15483 | 121629 | 0.00972957546
(293 rows)