Adapting the code for filling the gaps

First of all you need to change the line 164-168 in the index.html

instead of

 OpenLayers.loadURL("routing.php?startpoint="+startPoint.geometry.x+" "+startPoint.geometry.y+"&finalpoint="+
 stopPoint.geometry.x+" "+stopPoint.geometry.y+"&method=SPD&srid=900913",
                                   null,
                                   null,
                                   displayRoute,
                                   null); 

write

 OpenLayers.loadURL("routing2.php?startpoint="+startPoint.geometry.x+" "+startPoint.geometry.y+"&finalpoint="
+stopPoint.geometry.x+" "+stopPoint.geometry.y+"&method=SPD&srid=900913",
                                   null,
                                   null,
                                   displayRoute,
                                   null); 

The code of routing2 looks like

<?php
 	
 	  // Database connection settings
 	   define("PG_DB"  , "test");
 	  define("PG_HOST", "localhost");
 	  define("PG_USER", "postgres");
 	  define("PG_PORT", "5432");
 	  define("TABLE",   "ways");
 	
 	$counter = $pathlength = 1;
 	
 	  // Retrieve start point
 	 $start = split(' ',$_REQUEST['startpoint']);
 	
 	  $startPoint = array($start[0], $start[1]);
 	 
 /*	echo $startPoint[0];
 	echo "<br>";
 	  	echo $startPoint[1];
 	  	echo "<br>";*/
 	 
 	 
 	 
 	  // Retrieve end point
 	  $end = split(' ',$_REQUEST['finalpoint']);
 	
 	 $endPoint = array($end[0], $end[1]);
 	 
 	 
 	
 	  // Find the nearest edge
 	  $startEdge = findNearestEdge($startPoint);
 	 
 	
 	  $endEdge   = findNearestEdge($endPoint);
 	
 	  // FUNCTION findNearestEdge
 	  function findNearestEdge($lonlat) {
 	    
 	    // Connect to database
 	    $con = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER);
 	    
 	    $sql = "SELECT gid, source, target, the_geom,astext(the_geom),
 	             distance(the_geom, GeometryFromText(
 	                  'POINT(".$lonlat[0]." ".$lonlat[1].")', 900913)) AS dist
 	            FROM ".TABLE." 
 	            WHERE the_geom && setsrid(
 	                  'BOX3D(".($lonlat[0]-200)."
 	                         ".($lonlat[1]-200).",
 	                         ".($lonlat[0]+200)."
 	                         ".($lonlat[1]+200).")'::box3d, 900913)
 	            ORDER BY dist LIMIT 1";

 	
 	
 	    $query = pg_query($con,$sql); 
 	    
 	    $edge['gid']      = pg_fetch_result($query, 0, 0); 
 	    $edge['source']   = pg_fetch_result($query, 0, 1); 
 	    $edge['target']   = pg_fetch_result($query, 0, 2); 
 	    $edge['the_geom'] = pg_fetch_result($query, 0, 3); 
       $edge['the_geom_as_text'] = pg_fetch_result($query, 0, 4); 




 	    pg_close($con);
 	
 	    return $edge;
 	  }



$sql2="SELECT astext(multiline_locate_point(the_geom,PointFromText('POINT(".$startPoint[0]."
".$startPoint[1].")',900913))) from ways where gid=".$startEdge[gid];



$sql3="SELECT astext(multiline_locate_point(the_geom,PointFromText('POINT(".$endPoint[0].
" ".$endPoint[1].")',900913))) from ways where gid=".$endEdge[gid];
  
   $con = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER);
 

$query2 = pg_query($con,$sql2); 
$query3 = pg_query($con,$sql3); 
 	    
$point_on_line_anfang= pg_fetch_result($query2, 0, 0); 
$point_on_line_ende= pg_fetch_result($query3, 0, 0); 

//echo $point_on_line_ende;

 	
     switch($_REQUEST['method']) {
 	    
 	    
 	    
 	    
 	    
 	         case 'SPD' : // Shortest Path Dijkstra
 	           $sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
 	                        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;";
 	                    
 	           // echo $sql;
 	                    
 	           break;
 	    
 	         case 'SPA' : // Shortest Path A*
 	    
 	           $sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
 	                          length(rt.the_geom) AS length, ".TABLE.".id
 	                       FROM ".TABLE.",
 	                           (SELECT gid, the_geom
 	                               FROM astar_sp_delta(
 	                                   '".TABLE."',
 	                                   ".$startEdge['source'].",
 	                                   ".$endEdge['target'].",
 	                                   3000)
 	                            ) as rt
 	                       WHERE ".TABLE.".gid=rt.gid;";
 	          break;
 	    
 	         case 'SPS' : // Shortest Path Shooting*
 	    
 	           $sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
	                          length(rt.the_geom) AS length, ".TABLE.".id
	                           	                       FROM ".TABLE.",
 	                           (SELECT gid, the_geom
 	                               FROM shootingstar_sp(
 	                                   '".TABLE."',
 	                                   ".$startEdge['gid'].",
 	                                   ".$endEdge['gid'].",
 	                                   3000, 'length', false, false)
 	                            ) as rt
 	                       WHERE ".TABLE.".gid=rt.gid;";
 	                      
 	                
 	           break;
 	    
 	       } // close switch




$geometrie_results=pg_query($sql);
$anzahl_geometrien=pg_num_rows($geometrie_results);


//Ergebnis Nebengeometrie Anfang
for ($x=0;$x<$anzahl_geometrien;$x++)
   {
$ergebnis_geometrie_gid[$x]=pg_result($geometrie_results,$x,gid);




$treffer_nebengeometrie_anfang=pg_query("SELECT b.gid,astext(b.the_geom) from (select the_geom from ways where
 gid=".$startEdge['gid'].")a, (select gid,the_geom from ways WHERE gid=".$ergebnis_geometrie_gid[$x].") b
 WHERE touches (a.the_geom,b.the_geom)");

$ergebnis_nebengeometrie_anfang_gid=@pg_result($treffer_nebengeometrie_anfang,0,gid);



IF ($ergebnis_nebengeometrie_anfang_gid!=''){

Break;
}


}

//Ergebnis Nebengeometrie Ende
for ($x=0;$x<$anzahl_geometrien;$x++)
   {
$ergebnis_geometrie_gid[$x]=pg_result($geometrie_results,$x,gid);




$treffer_nebengeometrie_ende=pg_query("SELECT d.gid,astext(d.the_geom) from (select the_geom from ways where
 gid=".$endEdge['gid'].")c, (select gid,the_geom from ways WHERE gid=".$ergebnis_geometrie_gid[$x].") d
 WHERE touches (c.the_geom,d.the_geom)");
$ergebnis_nebengeometrie_ende_gid=@pg_result($treffer_nebengeometrie_ende,0,gid);

IF ($ergebnis_nebengeometrie_ende_gid!=''){

Break;
}


}



//echo "Also: ".$ergebnis_nebengeometrie_anfang_gid;
//echo "<br>";
//echo "Also: ".$ergebnis_nebengeometrie_ende_gid;
   $con = pg_connect("dbname=".PG_DB." host=".PG_HOST." password=".PG_PASS." user=".PG_USER);





 	  $query = pg_query($con,$sql);
 	  

 	  
//Geometrie-Anfang 	  
$sql3="SELECT astext(give_we_wkt(".$startEdge['gid'].",".$ergebnis_nebengeometrie_anfang_gid.",'".
$point_on_line_anfang."'))";
$query3 = pg_query($con,$sql3);
$gesuchtes_wkt_anfang= pg_fetch_result($query3, 0, 0); 


$sql4="SELECT length('".$gesuchtes_wkt_anfang."')";
$query4 = pg_query($con,$sql4);
$laenge_anfang= pg_fetch_result($query4, 0, 0); 

//----------------------------------------


//Geometrie-Ende	  
$sql5="SELECT astext(give_we_wkt(".$endEdge['gid'].",".$ergebnis_nebengeometrie_ende_gid.",'".
$point_on_line_ende."'))";
$query5 = pg_query($con,$sql5);
$gesuchtes_wkt_ende= pg_fetch_result($query5, 0, 0); 


$sql6="SELECT length('".$gesuchtes_wkt_ende."')";
$query6 = pg_query($con,$sql6);
$laenge_ende= pg_fetch_result($query6, 0, 0); 











//-------------------------------------------
 	  
 	  
 	 
 	  // Return route as XML
 	  $xml  = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'."\n";
 	  $xml .= "<route>\n";
 	    $xml .= "\t<edge id='1'>\n";
 	    $xml .= "\t\t<id>".$startEdge['gid']."</id>\n";
 	    $xml .= "\t\t<wkt>".$gesuchtes_wkt_anfang."</wkt>\n";
 	    $xml .= "\t\t<length>".round(($laenge_anfang/1000),3)."</length>\n";
 	    $xml .= "\t</edge>\n";
 	 
 	  // Add edges to XML file
 	  while($edge=pg_fetch_assoc($query)) { 
 	
 	/*
if ($startEdge['gid']==$edge['id']) {
$edge=pg_fetch_assoc($query,1);
}*/
 	
 	
 	    $pathlength += $edge['length'];
 	    
 	    
 	    
 	    $xml .= "\t<edge id='".++$counter."'>\n";
 	    $xml .= "\t\t<id>".$edge['id']."</id>\n";
 	    $xml .= "\t\t<wkt>".$edge['wkt']."</wkt>\n";
 	    $xml .= "\t\t<length>".round(($pathlength/1000),3)."</length>\n";
 	    $xml .= "\t</edge>\n";
 	  }
 	   $xml .= "\t<edge id='".++$counter."'>\n";
 	    $xml .= "\t\t<id>".$startEdge['gid']."</id>\n";
 	    $xml .= "\t\t<wkt>".$gesuchtes_wkt_ende."</wkt>\n";
 	    $xml .= "\t\t<length>".round(($laenge_ende/1000),3)."</length>\n";
 	    $xml .= "\t</edge>\n";
 	 
 	 
 	 
 	 
 	 
 	 
 	  $xml .= "</route>\n";
 	        
 	  // Close database connection
 	  pg_close($con);
 	  // Return routing result
 	  header('Content-type: text/xml',true);
 	  echo $xml;
 	 
 	 
	?>

....and with that the gaps will be filled :-)

http://www.kneipenculture.de/filling_the_gaps.PNG

Best regards, Kai Behncke