要利用rgrouting实现像QGIS那样求任意两点间的最短路径,可以按照以下步骤使用pl/pgsql进行自定义函数:
1 函数的参数为:_myShortPath(startxfloat, starty float,endx float,endy float,costfile varchar),前四个参数为起点和终点的坐标,最后一个参数为最短路径分析时的cost字段;
2 分别找出距离起点和终点最近的两条线,可以使用:
ST_DWithin(geography gg1, geography gg2, double precisiondistance_meters);
在距离gg2在distance_meters范围内的gg1的线,之后使用ST_Distance(geometryg1, geometry g2);进行排序,并取第一个。
3 找出在上一步求出最近线上距离起点(终点)最近的点。使用:
ST_ClosestPoint(geometryg1, geometry g2)
4 根据第2步求出的离起点最近先的target和离终点最近线的source,求最短路径。使用
SELECTst_linemerge(st_union(b.geom)) into v_res
FROMpgr_kdijkstraPath(
'SELECTid, source, target, ' || costfile ||' as cost FROM route',
v_startTarget,array[v_endSource], true, false
)a,
routeb
WHEREa.id3=b.id
GROUPby id1
ORDE