# 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: