Advertisement
Guest User

Untitled

a guest
Dec 14th, 2011
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.70 KB | None | 0 0
  1. <?php
  2.    
  3.       // Database connection settings
  4.       define("PG_DB"  , "muni");
  5.       define("PG_HOST", "localhost");
  6.       define("PG_USER", "geobox");
  7.       define(“PG_PASS”, “geobox”);
  8.       define("PG_PORT", "5432");
  9.       define("TABLE",   "ruas");
  10.      
  11.  
  12.    
  13.       $counter = $pathlength = 0;
  14.    
  15.       // Retrieve start point
  16.      $start = split(' ',$_REQUEST['startpoint']);
  17.    
  18.       $startPoint = array($start[0], $start[1]);
  19.      
  20.      
  21.      
  22.      
  23.      
  24.       // Retrieve end point
  25.       $end = split(' ',$_REQUEST['finalpoint']);
  26.    
  27.      $endPoint = array($end[0], $end[1]);
  28.      
  29.      
  30.    
  31.       // Find the nearest edge
  32.       $startEdge = findNearestEdge($startPoint);
  33.      
  34.    
  35.       $endEdge   = findNearestEdge($endPoint);
  36.    
  37.       // FUNCTION findNearestEdge
  38.       function findNearestEdge($lonlat) {
  39.        
  40.         // Connect to database
  41.         $con = pg_connect(“dbname=.PG_DB.” host=.PG_HOST.” password=.PG_PASS.” user=.PG_USER);
  42.        
  43.         $sql = "SELECT gid, source, target, the_geom,
  44.                  distance(the_geom, GeometryFromText(
  45.                       'POINT(".$lonlat[0]." ".$lonlat[1].")', 900913)) AS dist
  46.                 FROM ".TABLE."
  47.                 WHERE the_geom && setsrid(
  48.                       'BOX3D(".($lonlat[0]-200)."
  49.                              ".($lonlat[1]-200).",
  50.                              ".($lonlat[0]+200)."
  51.                              ".($lonlat[1]+200).")'::box3d, 900913)
  52.                 ORDER BY dist LIMIT 1";
  53.        
  54.      
  55.    
  56.    
  57.         $query = pg_query($con,$sql);
  58.        
  59.         $edge['gid']      = pg_fetch_result($query, 0, 0);
  60.         $edge['source']   = pg_fetch_result($query, 0, 1);
  61.         $edge['target']   = pg_fetch_result($query, 0, 2);
  62.         $edge['the_geom'] = pg_fetch_result($query, 0, 3);
  63.    
  64.         // Close database connection
  65.         pg_close($con);
  66.    
  67.         return $edge;
  68.       }
  69.    
  70.       // Select the routing algorithm
  71.        switch($_REQUEST['method']) {
  72.    
  73.    
  74.    
  75.    
  76.    
  77.         case 'SPD' : // Shortest Path Dijkstra
  78.           $sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
  79.                        length(rt.the_geom) AS length, ".TABLE.".id
  80.                     FROM ".TABLE.",
  81.                         (SELECT gid, the_geom
  82.                             FROM dijkstra_sp_delta(
  83.                                 '".TABLE."',
  84.                                 ".$startEdge['source'].",
  85.                                 ".$endEdge['target'].",
  86.                                 3000)
  87.                          ) as rt
  88.                     WHERE ".TABLE.".gid=rt.gid;";
  89.                    
  90.    
  91.                    
  92.           break;
  93.    
  94.         case 'SPA' : // Shortest Path A*
  95.    
  96.           $sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
  97.                          length(rt.the_geom) AS length, ".TABLE.".id
  98.                       FROM ".TABLE.",
  99.                           (SELECT gid, the_geom
  100.                               FROM astar_sp_delta(
  101.                                   '".TABLE."',
  102.                                   ".$startEdge['source'].",
  103.                                   ".$endEdge['target'].",
  104.                                   3000)
  105.                            ) as rt
  106.                       WHERE ".TABLE.".gid=rt.gid;";
  107.           break;
  108.    
  109.         case 'SPS' : // Shortest Path Shooting*
  110.    
  111.           $sql = "SELECT rt.gid, AsText(rt.the_geom) AS wkt,
  112.                          length(rt.the_geom) AS length, ".TABLE.".id
  113.                       FROM ".TABLE.",
  114.                           (SELECT gid, the_geom
  115.                               FROM shootingstar_sp(
  116.                                   '".TABLE."',
  117.                                   ".$startEdge['gid'].",
  118.                                   ".$endEdge['gid'].",
  119.                                   3000, 'length', false, false)
  120.                            ) as rt
  121.                       WHERE ".TABLE.".gid=rt.gid;";
  122.           break;
  123.    
  124.       } // close switch
  125.    
  126.    
  127.       //  echo $sql;
  128.       // Database connection and query
  129.       $dbcon = pg_connect("dbname=".PG_DB." host=".PG_HOST." password=".PG_PASS." user=".PG_USER);
  130.    
  131.       $query = pg_query($dbcon,$sql);
  132.      
  133.       // Return route as XML
  134.       $xml  = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'."\n";
  135.       $xml .= "<route>\n";
  136.      
  137.       // Add edges to XML file
  138.       while($edge=pg_fetch_assoc($query)) {
  139.    
  140.         $pathlength += $edge['length'];
  141.    
  142.         $xml .= "\t<edge id='".++$counter."'>\n";
  143.         $xml .= "\t\t<id>".$edge['id']."</id>\n";
  144.         $xml .= "\t\t<wkt>".$edge['wkt']."</wkt>\n";
  145.         $xml .= "\t\t<length>".round(($pathlength/1000),3)."</length>\n";
  146.         $xml .= "\t</edge>\n";
  147.       }
  148.      
  149.       $xml .= "</route>\n";
  150.            
  151.       // Close database connection
  152.       pg_close($dbcon);
  153.       // Return routing result
  154.       header('Content-type: text/xml',true);
  155.       echo $xml;
  156.      
  157.     ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement