Explanation Source Code for Killing some bugs (wrong path calculation)¶
In the source-code the routing calculation is called twice
$length_1 = getting_pathlength($startEdge['source'],$endEdge['target'],$startEdge['gid'],$endEdge['gid'],$point_on_line_begin,$point_on_line_ende);
$length_2 = getting_pathlength($endEdge['source'],$startEdge['target'],$startEdge['gid'],$endEdge['gid'],$point_on_line_begin,$point_on_line_ende);
… and it is calculated how long the pathes are (whole MULTINESTRINGS and the “pieces” between start/end_point and the next geometry
It depends on the length which route is painted:
if ($length_1 < $length_2){
$sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
ST_Length(rt.the_geom) AS length, ".TABLE.".id
FROM ".TABLE.",
(SELECT gid, the_geom
FROM dijkstra_sp_delta(
'".TABLE."',
".$startEdge['source'].",
".$endEdge['target'].",
3000) WHERE gid!=".$startEdge['gid']." AND gid!=".$endEdge['gid']."
) as rt
WHERE ".TABLE.".gid=rt.gid;";
}
else
{
$sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
ST_Length(rt.the_geom) AS length, ".TABLE.".id
FROM ".TABLE.",
(SELECT gid, the_geom
FROM dijkstra_sp_delta(
'".TABLE."',
".$endEdge['source'].",
".$startEdge['target'].",
3000) WHERE gid!=".$startEdge['gid']." AND gid!=".$endEdge['gid']."
) as rt
WHERE ".TABLE.".gid=rt.gid;";
}
And as you see it works: