[pgrouting-users] Issues with pgrouting workshop code in postgis 2.11/pgrouting 2.0

I’m having issues getting the pgrouting workshop to work on Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

How can I rewrite the following php/sql code and make it compatible with my version:


<?php

  // Database connection settings
  define("PG_DB"  , "routing");
  define("PG_HOST", "localhost"); 
  define("PG_USER", "postgres");
  define("PG_PORT", "5432"); 
   define("PG_PASSWD",   "*******"); 
  define("TABLE",   "eastlegon"); 

  $counter = $pathlength = 0;

  // Retrieve start point
  $start = split(' ',$_REQUEST['startpoint']);
  $startPoint = array($start[0], $start[1]);

  // 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." password=".PG_PASSWD);

    $sql = "SELECT gid, source, target, the_geom, 
             distance(the_geom, GeometryFromText(
                  'POINT(".$lonlat[0]." ".$lonlat[1].")', 4326)) AS dist 
            FROM ".TABLE."  
            WHERE the_geom && setsrid(
                  'BOX3D(".($lonlat[0]-200)." 
                         ".($lonlat[1]-200).", 
                         ".($lonlat[0]+200)." 
                         ".($lonlat[1]+200).")'::box3d, 4326) 
            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);  

    // Close database connection
    pg_close($con);

    return $edge;
  }

  // Select the routing algorithm
  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)
                     ) as rt 
                WHERE ".TABLE.".gid=rt.gid;";
      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

  // Database connection and query
  $dbcon = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER." password=".PG_PASSWD);

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

  // Return route as XML
  $xml  = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'."\n";
  $xml .= "<route>\n";

  // Add edges to XML file
  while($edge=pg_fetch_assoc($query)) {  

    $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 .= "</route>\n";

  // Close database connection
  pg_close($dbcon);

  // Return routing result
  header('Content-type: text/xml',true);
  echo $xml;

?>

Thanks,

Emmanuel,

That PHP code looks like it was written for pgRouting 1.0. Which workshop did you get that from?

Most of the pgRouting 2.0 functions are prefixed with pgr_. There should be a file in your install called
In C:/Program Files/PostgreSQL/9.2/share/extensions/pgrouting_legacy.sql which installs the 1.0 function names. You could try using that though I haven’t personally had a need to.

One other thing I did notice about this code which I think is a bug is that although PG_PORT is defined, it doesn’t seem to be used for pg_connect, so will not work without modification if you are runnning postgres on non-default port (5432).

Hope that helps,
Regina
http://www.postgis.us
http://www.bostongis.com
http://www.paragoncorporation.com


From: pgrouting-users-bounces@lists.osgeo.org [mailto:pgrouting-users-bounces@lists.osgeo.org] On Behalf Of Emmanuel Adegboye
Sent: Friday, January 03, 2014 4:42 PM
To: pgrouting-users@lists.osgeo.org
Subject: [pgrouting-users] Issues with pgrouting workshop code in postgis2.11/pgrouting 2.0

I’m having issues getting the pgrouting workshop to work on Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

How can I rewrite the following php/sql code and make it compatible with my version:

<?php

  // Database connection settings
  define("PG_DB"  , "routing");
  define("PG_HOST", "localhost"); 
  define("PG_USER", "postgres");
  define("PG_PORT", "5432"); 
   define("PG_PASSWD",   "*******"); 
  define("TABLE",   "eastlegon"); 

  $counter = $pathlength = 0;

  // Retrieve start point
  $start = split(' ',$_REQUEST['startpoint']);
  $startPoint = array($start[0], $start[1]);

  // 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." password=".PG_PASSWD);

    $sql = "SELECT gid, source, target, the_geom, 
             distance(the_geom, GeometryFromText(
                  'POINT(".$lonlat[0]." ".$lonlat[1].")', 4326)) AS dist 
            FROM ".TABLE."  
            WHERE the_geom && setsrid(
                  'BOX3D(".($lonlat[0]-200)." 
                         ".($lonlat[1]-200).", 
                         ".($lonlat[0]+200)." 
                         ".($lonlat[1]+200).")'::box3d, 4326) 
            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);  

    // Close database connection
    pg_close($con);

    return $edge;
  }

  // Select the routing algorithm
  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)
                     ) as rt 
                WHERE ".TABLE.".gid=rt.gid;";
      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

  // Database connection and query
  $dbcon = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER." password=".PG_PASSWD);

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

  // Return route as XML
  $xml  = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'."\n";
  $xml .= "<route>\n";

  // Add edges to XML file
  while($edge=pg_fetch_assoc($query)) {  

    $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 .= "</route>\n";

  // Close database connection
  pg_close($dbcon);

  // Return routing result
  header('Content-type: text/xml',true);
  echo $xml;

?>

Thanks,

Regina.

It was from the foss4g 2007 workshop. The most recent worshops include wrapper functions which I am not familiar with so I also get stuck at some point.

What I am trying to do is to create a simple application that allows users to set a start and end point and calculate the route using any one of the major algorithms like the workshop describes.

So far, the user interface (based on openlayers 2.10) works well and displays both points. I get an error in firebug when I click the ‘calculate route’ button and the php script is called, and this was after I installed legacy.sql. I get “ERROR: type “geoms” does not exist” when installing pgrouting.sql.

Here’s the error from firebug:

<br />
<b>Warning</b>:  pg_query(): Query failed: ERROR:  parse error - invalid geometry
HINT:  &quot;POINT( )&quot; &lt;-- parse error at position 9 within geometry in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>42</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>44</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>45</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>46</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>47</b><br />
<br />
<b>Warning</b>:  pg_query(): Query failed: ERROR:  parse error - invalid geometry
HINT:  &quot;POINT( )&quot; &lt;-- parse error at position 9 within geometry in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>42</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>44</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>45</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>46</b><br />
<br />
<b>Warning</b>:  pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>47</b><br />
<br />
<b>Warning</b>:  pg_query(): Query failed:  in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>108</b><br />
<br />
<b>Warning</b>:  pg_fetch_assoc() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line <b>115</b><br />
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<route>
</route>

And the html document:

pgRouting Demo #map-id { width: 100%; height: 512px; border: 1px solid black; }
  • <input type=“radio” name=“control” id=“noneToggle”

    onclick=“toggleControl(this);” checked=“checked” />

    navigate

  • <input type=“radio” name=“control” value=“start” id=“startToggle”

    onclick=“toggleControl(this);” />

    set start point

  • <input type=“radio” name=“control” value=“stop” id=“stopToggle”

    onclick=“toggleControl(this);” />

    set stop point

Shortest Path Dijkstra - undirected (BBox) Shortest Path A Star - undirected Shortest Path Shooting Star

Calculate Route

On Jan 4, 2014 3:45 AM, “Paragon Corporation” <lr@pcorp.us> wrote:

Emmanuel,

That PHP code looks like it was written for pgRouting 1.0. Which workshop did you get that from?

Most of the pgRouting 2.0 functions are prefixed with pgr_. There should be a file in your install called
In C:/Program Files/PostgreSQL/9.2/share/extensions/pgrouting_legacy.sql which installs the 1.0 function names. You could try using that though I haven’t personally had a need to.

One other thing I did notice about this code which I think is a bug is that although PG_PORT is defined, it doesn’t seem to be used for pg_connect, so will not work without modification if you are runnning postgres on non-default port (5432).

Hope that helps,
Regina
http://www.postgis.us
http://www.bostongis.com
http://www.paragoncorporation.com


From: pgrouting-users-bounces@lists.osgeo.org [mailto:pgrouting-users-bounces@lists.osgeo.org] On Behalf Of Emmanuel Adegboye
Sent: Friday, January 03, 2014 4:42 PM
To: pgrouting-users@lists.osgeo.org
Subject: [pgrouting-users] Issues with pgrouting workshop code in postgis2.11/pgrouting 2.0

I’m having issues getting the pgrouting workshop to work on Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

How can I rewrite the following php/sql code and make it compatible with my version:


<?php

  // Database connection settings
  define("PG_DB"  , "routing");
  define("PG_HOST", "localhost"); 
  define("PG_USER", "postgres");
  define("PG_PORT", "5432"); 
   define("PG_PASSWD",   "*******"); 
  define("TABLE",   "eastlegon"); 

  $counter = $pathlength = 0;

  // Retrieve start point
  $start = split(' ',$_REQUEST['startpoint']);
  $startPoint = array($start[0], $start[1]);

  // 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." password=".PG_PASSWD);

    $sql = "SELECT gid, source, target, the_geom, 
             distance(the_geom, GeometryFromText(
                  'POINT(".$lonlat[0]." ".$lonlat[1].")', 4326)) AS dist 
            FROM ".TABLE."  
            WHERE the_geom && setsrid(
                  'BOX3D(".($lonlat[0]-200)." 
                         ".($lonlat[1]-200).", 
                         ".($lonlat[0]+200)." 
                         ".($lonlat[1]+200).")'::box3d, 4326) 
            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);  

    // Close database connection
    pg_close($con);

    return $edge;
  }

  // Select the routing algorithm
  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)
                     ) as rt 
                WHERE ".TABLE.".gid=rt.gid;";
      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;";  
      

Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users

Emmanuel,

I wrote the legacy.sql more as an example to document how things changed, but it was never tested as we did not plan on supporting it. The idea behind it was to provide and an example to help people convert their existing applications to use the new functions.

Part of the problem with the legacy code is that it had not test suite and the code was very buggy. It also was haphazard because of its evolution and random things being added that people thought might be nice to have.

The best thing to do is use the new workshop and if you have questions or get stuck to ask the list and we will try to help you sort them out.

Best regards,
   -Steve

On 1/3/2014 11:28 PM, Emmanuel Adegboye wrote:

Regina.

It was from the foss4g 2007 workshop. The most recent worshops include
wrapper functions which I am not familiar with so I also get stuck at
some point.

What I am trying to do is to create a simple application that allows
users to set a start and end point and calculate the route using any one
of the major algorithms like the workshop describes.

So far, the user interface (based on openlayers 2.10) works well and
displays both points. I get an error in firebug when I click the
'calculate route' button and the php script is called, and this was
after I installed legacy.sql. I get "ERROR: type "geoms" does not exist"
when installing pgrouting.sql.

Here's the error from firebug:

|<br />
||<b>Warning</b>: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: &quot;POINT( )&quot; &lt;-- parse error at position 9 within geometry in <b>C:\ms4w\Apache\htdocs||\hgt\routing.php</b> on line <b>42</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>44</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>45</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>46</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>47</b><br />
||<br />
||<b>Warning</b>: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: &quot;POINT( )&quot; &lt;-- parse error at position 9 within geometry in <b>C:\ms4w\Apache\htdocs||\hgt\routing.php</b> on line <b>42</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>44</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>45</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>46</b><br />
||<br />
||<b>Warning</b>: pg_fetch_result() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>47</b><br />
||<br />
||<b>Warning</b>: pg_query(): Query failed: in <b>C:\ms4w\Apache\htdocs\hgt\routing.php</b> on line||<b>108</b><br />
||<br />
||<b>Warning</b>: pg_fetch_assoc() expects parameter 1 to be resource, boolean given in <b>C:\ms4w\Apache||\htdocs\hgt\routing.php</b> on line <b>115</b><br />
||<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
||<route>
||</route>|

And the html document:

<!DOCTYPE html>

<html>

<head>

<title>pgRouting Demo</title>

<link rel="stylesheet" href="openlayers/theme/default/style.css"
type="text/css">

<style>

#map-id {

width: 100%;

height: 512px;

border: 1px solid black;

}

</style>

<script src="openlayers/OpenLayers.js"></script>

</head>

<body>

<div id="map-id"></div>

<script>

var SinglePoint = OpenLayers.Class.create();

SinglePoint.prototype = OpenLayers.Class.inherit(OpenLayers.Handler.Point, {

createFeature: function(evt) {

this.control.layer.removeFeatures(this.control.layer.features);

OpenLayers.Handler.Point.prototype.createFeature.apply(this, arguments);

}

});

var start_style = OpenLayers.Util.applyDefaults({

externalGraphic: "start.png",

graphicWidth: 18,

graphicHeight: 26,

graphicYOffset: -26,

graphicOpacity: 1

}, OpenLayers.Feature.Vector.style['default']);

var stop_style = OpenLayers.Util.applyDefaults({

externalGraphic: "stop.png",

graphicWidth: 18,

graphicHeight: 26,

graphicYOffset: -26,

graphicOpacity: 1

}, OpenLayers.Feature.Vector.style['default']);

var result_style = OpenLayers.Util.applyDefaults({

strokeWidth: 3,

strokeColor: "#ff0000",

fillOpacity: 0

}, OpenLayers.Feature.Vector.style['default']);

// global variables

var map, parser, start, stop, result, controls;

var format = 'image/png';

var bounds = new OpenLayers.Bounds(

                     -0.178166372987693, 5.62323476776518,

                     -0.140817506885068, 5.64840001174401

                 );

var options = {

                     controls: ,

                     maxExtent: bounds,

                     maxResolution: 0.0001458940082134,

                     projection: "EPSG:4326",

                     units: 'degrees'

};

map = new OpenLayers.Map("map-id", options);

boundary = new OpenLayers.Layer.WMS(

                     "East Legon - Boundary",
"http://localhost:8080/geoserver/pgrouting/wms&quot;,

                     {

                         LAYERS: 'pgrouting:eastlegonboundary',

                         STYLES: '',

                         format: format,

                         tiled: true,

                         tilesOrigin : map.maxExtent.left + ',' +
map.maxExtent.bottom

                     },

                     {

                         buffer: 0,

                         displayOutsideMaxExtent: true,

                         isBaseLayer: true,

                         yx : {'EPSG:4326' : true}

                     }

                 );

eastlegon = new OpenLayers.Layer.WMS(

                     "East Legon",
"http://localhost:8080/geoserver/pgrouting/wms&quot;,

                     {

                         LAYERS: 'pgrouting:eastlegon',

                         STYLES: '',

                         format: format,

transparent: true,

                         tiled: true,

                         tilesOrigin : map.maxExtent.left + ',' +
map.maxExtent.bottom

                     },

                     {

                         buffer: 0,

                         displayOutsideMaxExtent: true,

                         isBaseLayer: false,

                         yx : {'EPSG:4326' : true}

                     }

                 );

start = new OpenLayers.Layer.Vector("Start Point", {style: start_style});

stop = new OpenLayers.Layer.Vector("End Point", {style: stop_style});

result = new OpenLayers.Layer.Vector("Routing Results",

{style: result_style});

map.addLayers([boundary, eastlegon, start, stop, result]);

map.addControl(new OpenLayers.Control.LayerSwitcher());

map.addControl(new OpenLayers.Control.PanPanel());

map.addControl(new OpenLayers.Control.ZoomPanel());

map.addControl(new OpenLayers.Control.ScaleLine());

map.addControl(new OpenLayers.Control.Navigation());

map.addControl(new OpenLayers.Control.MousePosition());

map.zoomToExtent(bounds);

// controls

controls = {

start: new OpenLayers.Control.DrawFeature(start, SinglePoint),

stop: new OpenLayers.Control.DrawFeature(stop, SinglePoint)

}

for (var key in controls) {

map.addControl(controls[key]);

}

function toggleControl(element) {

for (key in controls) {

if (element.value == key && element.checked) {

controls[key].activate();

} else {

controls[key].deactivate();

}

}

}

function compute() {

             var startPoint = start.features[0];

             var stopPoint = stop.features[0];

             if (startPoint && stopPoint) {

                 var result = {

                     startpoint: startPoint.geometry.x + ' ' +
startPoint.geometry.y,

                     finalpoint: stopPoint.geometry.x + ' ' +
stopPoint.geometry.y,

                     method: OpenLayers.Util.getElement('method').value,

                     region: "eastlegon",

                     srid: "4326"

                 };

                 OpenLayers.loadURL("./routing.php",

  OpenLayers.Util.getParameterString(result),

                                    null,

                                    displayRoute);

             }

         }

         function displayRoute(response) {

             if (response && response.responseXML) {

                 // erase the previous results

                 result.removeFeatures(result.features);

                 // parse the features

                 var edges =
response.responseXML.getElementsByTagName('edge');

                 var features = ;

                 for (var i = 0; i < edges.length; i++) {

                     var g =
parser.read(edges[i].getElementsByTagName('wkt')[0].textContent);

                     features.push(new OpenLayers.Feature.Vector(g));

                 }

                 result.addFeatures(features);

             }

         }

</script>

<ul>

<li>

<input type="radio" name="control" id="noneToggle"

onclick="toggleControl(this);" checked="checked" />

<label for="noneToggle">navigate</label>

</li>

<li>

<input type="radio" name="control" value="start" id="startToggle"

onclick="toggleControl(this);" />

<label for="startToggle">set start point</label>

</li>

<li>

<input type="radio" name="control" value="stop" id="stopToggle"

onclick="toggleControl(this);" />

<label for="stopToggle">set stop point</label>

</li>

</ul>

<select id="method">

<option value="SPD">Shortest Path Dijkstra - undirected (BBox)</option>

<option value="SPA">Shortest Path A Star - undirected</option>

<option value="SPS">Shortest Path Shooting Star</option>

</select>

<button onclick="compute()">Calculate Route</button>

</body>

</html>

On Jan 4, 2014 3:45 AM, "Paragon Corporation" <lr@pcorp.us
<mailto:lr@pcorp.us>> wrote:

    __
    Emmanuel,
    That PHP code looks like it was written for pgRouting 1.0. Which
    workshop did you get that from?
    Most of the pgRouting 2.0 functions are prefixed with pgr_. There
    should be a file in your install called
      In C:/Program
    Files/PostgreSQL/9.2/share/extensions/pgrouting_legacy.sql which
    installs the 1.0 function names. You could try using that though I
    haven't personally had a need to.
    One other thing I did notice about this code which I think is a bug
    is that although PG_PORT is defined, it doesn't seem to be used for
    pg_connect, so will not work without modification if you are
    runnning postgres on non-default port (5432).
    Hope that helps,
    Regina
    http://www.postgis.us
    http://www.bostongis.com
    http://www.paragoncorporation.com

    ------------------------------------------------------------------------
    *From:* pgrouting-users-bounces@lists.osgeo.org
    <mailto:pgrouting-users-bounces@lists.osgeo.org>
    [mailto:pgrouting-users-bounces@lists.osgeo.org
    <mailto:pgrouting-users-bounces@lists.osgeo.org>] *On Behalf Of
    *Emmanuel Adegboye
    *Sent:* Friday, January 03, 2014 4:42 PM
    *To:* pgrouting-users@lists.osgeo.org
    <mailto:pgrouting-users@lists.osgeo.org>
    *Subject:* [pgrouting-users] Issues with pgrouting workshop code in
    postgis2.11/pgrouting 2.0

    I'm having issues getting the pgrouting workshop to work on
    Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

    How can I rewrite the following php/sql code and make it compatible
    with my version:

    |<?php

       // Database connection settings
       define("PG_DB" , "routing");
       define("PG_HOST", "localhost");
       define("PG_USER", "postgres");
       define("PG_PORT", "5432");
        define("PG_PASSWD", "*******");
       define("TABLE", "eastlegon");

       $counter= $pathlength= 0;

       // Retrieve start point
       $start= split('',$_REQUEST['startpoint']);
       $startPoint= array($start[0], $start[1]);

       // 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." password=".PG_PASSWD);

         $sql= "SELECT gid, source, target, the_geom,
                  distance(the_geom, GeometryFromText(
                       'POINT(".$lonlat[0]."".$lonlat[1].")', 4326)) AS dist
                 FROM ".TABLE."
                 WHERE the_geom && setsrid(
                       'BOX3D(".($lonlat[0]-200)."
                              ".($lonlat[1]-200).",
                              ".($lonlat[0]+200)."
                              ".($lonlat[1]+200).")'::box3d, 4326)
                 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);

         // Close database connection
         pg_close($con);

         return $edge;
       }

       // Select the routing algorithm
       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)
                          ) as rt
                     WHERE ".TABLE.".gid=rt.gid;";
           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;";
           |

    _______________________________________________
    Pgrouting-users mailing list
    Pgrouting-users@lists.osgeo.org <mailto:Pgrouting-users@lists.osgeo.org>
    http://lists.osgeo.org/mailman/listinfo/pgrouting-users
    ...

_______________________________________________
Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users

Thank you so much for your help and prompt response.

I will work with the new workshop and ask questions as advised.

Regards,

Emmanuel Adegboye

···

On 4 January 2014 05:59, Stephen Woodbridge <woodbri@swoodbridge.com> wrote:

Emmanuel,

I wrote the legacy.sql more as an example to document how things changed, but it was never tested as we did not plan on supporting it. The idea behind it was to provide and an example to help people convert their existing applications to use the new functions.

Part of the problem with the legacy code is that it had not test suite and the code was very buggy. It also was haphazard because of its evolution and random things being added that people thought might be nice to have.

The best thing to do is use the new workshop and if you have questions or get stuck to ask the list and we will try to help you sort them out.

Best regards,
-Steve

On 1/3/2014 11:28 PM, Emmanuel Adegboye wrote:

Regina.

It was from the foss4g 2007 workshop. The most recent worshops include
wrapper functions which I am not familiar with so I also get stuck at
some point.

What I am trying to do is to create a simple application that allows
users to set a start and end point and calculate the route using any one
of the major algorithms like the workshop describes.

So far, the user interface (based on openlayers 2.10) works well and
displays both points. I get an error in firebug when I click the
‘calculate route’ button and the php script is called, and this was
after I installed legacy.sql. I get “ERROR: type “geoms” does not exist”
when installing pgrouting.sql.

Here’s the error from firebug:

|

||Warning: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: "POINT( )" <– parse error at position 9 within geometry in C:\ms4w\Apache\htdocs||\hgt\routing.php on line 42

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 44

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 45

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 46

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 47

||

||Warning: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: "POINT( )" <– parse error at position 9 within geometry in C:\ms4w\Apache\htdocs||\hgt\routing.php on line 42

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 44

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 45

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 46

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 47

||

||Warning: pg_query(): Query failed: in C:\ms4w\Apache\htdocs\hgt\routing.php on line||108

||

||Warning: pg_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 115

||<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
||
|||

And the html document:

pgRouting Demo #map-id { width: 100%; height: 512px; border: 1px solid black; }
  • <input type=“radio” name=“control” id=“noneToggle”

    onclick=“toggleControl(this);” checked=“checked” />

    navigate

  • <input type=“radio” name=“control” value=“start” id=“startToggle”

    onclick=“toggleControl(this);” />

    set start point

  • <input type=“radio” name=“control” value=“stop” id=“stopToggle”

    onclick=“toggleControl(this);” />

    set stop point

Shortest Path Dijkstra - undirected (BBox) Shortest Path A Star - undirected Shortest Path Shooting Star

Calculate Route

On Jan 4, 2014 3:45 AM, “Paragon Corporation” <lr@pcorp.us

mailto:[lr@pcorp.us](mailto:lr@pcorp.us)> wrote:

__

Emmanuel,
That PHP code looks like it was written for pgRouting 1.0. Which
workshop did you get that from?
Most of the pgRouting 2.0 functions are prefixed with pgr_. There
should be a file in your install called
In C:/Program
Files/PostgreSQL/9.2/share/extensions/pgrouting_legacy.sql which
installs the 1.0 function names. You could try using that though I
haven’t personally had a need to.
One other thing I did notice about this code which I think is a bug
is that although PG_PORT is defined, it doesn’t seem to be used for
pg_connect, so will not work without modification if you are
runnning postgres on non-default port (5432).
Hope that helps,
Regina
http://www.postgis.us
http://www.bostongis.com
http://www.paragoncorporation.com


From: pgrouting-users-bounces@lists.osgeo.org
mailto:[pgrouting-users-bounces@lists.osgeo.org](mailto:pgrouting-users-bounces@lists.osgeo.org)
[mailto:pgrouting-users-bounces@lists.osgeo.org
mailto:[pgrouting-users-bounces@lists.osgeo.org](mailto:pgrouting-users-bounces@lists.osgeo.org)] *On Behalf Of
*Emmanuel Adegboye
Sent: Friday, January 03, 2014 4:42 PM
To: pgrouting-users@lists.osgeo.org
mailto:[pgrouting-users@lists.osgeo.org](mailto:pgrouting-users@lists.osgeo.org)
Subject: [pgrouting-users] Issues with pgrouting workshop code in

postgis2.11/pgrouting 2.0

I’m having issues getting the pgrouting workshop to work on
Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

How can I rewrite the following php/sql code and make it compatible
with my version:

|<?php

// Database connection settings
define(“PG_DB” , “routing”);
define(“PG_HOST”, “localhost”);
define(“PG_USER”, “postgres”);
define(“PG_PORT”, “5432”);
define(“PG_PASSWD”, “*******”);
define(“TABLE”, “eastlegon”);

$counter= $pathlength= 0;

// Retrieve start point
$start= split(‘’,$_REQUEST[‘startpoint’]);

$startPoint= array($start[0], $start[1]);

// 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.” password=".PG_PASSWD);

$sql= "SELECT gid, source, target, the_geom,

distance(the_geom, GeometryFromText(
‘POINT(“.$lonlat[0].”“.$lonlat[1].”)’, 4326)) AS dist
FROM “.TABLE.”
WHERE the_geom && setsrid(
‘BOX3D(“.($lonlat[0]-200).”
“.($lonlat[1]-200).”,
“.($lonlat[0]+200).”
“.($lonlat[1]+200).”)’::box3d, 4326)
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);

// Close database connection
pg_close($con);

return $edge;
}

// Select the routing algorithm
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)
) as rt
WHERE “.TABLE.”.gid=rt.gid;”;
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;”;
|


Pgrouting-users mailing list

Pgrouting-users@lists.osgeo.org mailto:[Pgrouting-users@lists.osgeo.org](mailto:Pgrouting-users@lists.osgeo.org)
http://lists.osgeo.org/mailman/listinfo/pgrouting-users


Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users


Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users

Hello.

I’m now working with the 2013 workshop now and I have my tables structured as follows:

routing=# \d
List of relations
Schema | Name | Type | Owner

···

On 4 January 2014 05:59, Stephen Woodbridge <woodbri@swoodbridge.com> wrote:

Emmanuel,

I wrote the legacy.sql more as an example to document how things changed, but it was never tested as we did not plan on supporting it. The idea behind it was to provide and an example to help people convert their existing applications to use the new functions.

Part of the problem with the legacy code is that it had not test suite and the code was very buggy. It also was haphazard because of its evolution and random things being added that people thought might be nice to have.

The best thing to do is use the new workshop and if you have questions or get stuck to ask the list and we will try to help you sort them out.

Best regards,
-Steve

On 1/3/2014 11:28 PM, Emmanuel Adegboye wrote:

Regina.

It was from the foss4g 2007 workshop. The most recent worshops include
wrapper functions which I am not familiar with so I also get stuck at
some point.

What I am trying to do is to create a simple application that allows
users to set a start and end point and calculate the route using any one
of the major algorithms like the workshop describes.

So far, the user interface (based on openlayers 2.10) works well and
displays both points. I get an error in firebug when I click the
‘calculate route’ button and the php script is called, and this was
after I installed legacy.sql. I get “ERROR: type “geoms” does not exist”
when installing pgrouting.sql.

Here’s the error from firebug:

|

||Warning: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: "POINT( )" <– parse error at position 9 within geometry in C:\ms4w\Apache\htdocs||\hgt\routing.php on line 42

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 44

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 45

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 46

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 47

||

||Warning: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: "POINT( )" <– parse error at position 9 within geometry in C:\ms4w\Apache\htdocs||\hgt\routing.php on line 42

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 44

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 45

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 46

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 47

||

||Warning: pg_query(): Query failed: in C:\ms4w\Apache\htdocs\hgt\routing.php on line||108

||

||Warning: pg_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 115

||<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
||
|||

And the html document:

pgRouting Demo #map-id { width: 100%; height: 512px; border: 1px solid black; }
  • <input type=“radio” name=“control” id=“noneToggle”

    onclick=“toggleControl(this);” checked=“checked” />

    navigate

  • <input type=“radio” name=“control” value=“start” id=“startToggle”

    onclick=“toggleControl(this);” />

    set start point

  • <input type=“radio” name=“control” value=“stop” id=“stopToggle”

    onclick=“toggleControl(this);” />

    set stop point

Shortest Path Dijkstra - undirected (BBox) Shortest Path A Star - undirected Shortest Path Shooting Star

Calculate Route

On Jan 4, 2014 3:45 AM, “Paragon Corporation” <lr@pcorp.us

mailto:[lr@pcorp.us](mailto:lr@pcorp.us)> wrote:

__

Emmanuel,
That PHP code looks like it was written for pgRouting 1.0. Which
workshop did you get that from?
Most of the pgRouting 2.0 functions are prefixed with pgr_. There
should be a file in your install called
In C:/Program
Files/PostgreSQL/9.2/share/extensions/pgrouting_legacy.sql which
installs the 1.0 function names. You could try using that though I
haven’t personally had a need to.
One other thing I did notice about this code which I think is a bug
is that although PG_PORT is defined, it doesn’t seem to be used for
pg_connect, so will not work without modification if you are
runnning postgres on non-default port (5432).
Hope that helps,
Regina
http://www.postgis.us
http://www.bostongis.com
http://www.paragoncorporation.com


From: pgrouting-users-bounces@lists.osgeo.org
mailto:[pgrouting-users-bounces@lists.osgeo.org](mailto:pgrouting-users-bounces@lists.osgeo.org)
[mailto:pgrouting-users-bounces@lists.osgeo.org
mailto:[pgrouting-users-bounces@lists.osgeo.org](mailto:pgrouting-users-bounces@lists.osgeo.org)] *On Behalf Of
*Emmanuel Adegboye
Sent: Friday, January 03, 2014 4:42 PM
To: pgrouting-users@lists.osgeo.org
mailto:[pgrouting-users@lists.osgeo.org](mailto:pgrouting-users@lists.osgeo.org)
Subject: [pgrouting-users] Issues with pgrouting workshop code in

postgis2.11/pgrouting 2.0

I’m having issues getting the pgrouting workshop to work on
Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

How can I rewrite the following php/sql code and make it compatible
with my version:

|<?php

// Database connection settings
define(“PG_DB” , “routing”);
define(“PG_HOST”, “localhost”);
define(“PG_USER”, “postgres”);
define(“PG_PORT”, “5432”);
define(“PG_PASSWD”, “*******”);
define(“TABLE”, “eastlegon”);

$counter= $pathlength= 0;

// Retrieve start point
$start= split(‘’,$_REQUEST[‘startpoint’]);

$startPoint= array($start[0], $start[1]);

// 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.” password=".PG_PASSWD);

$sql= "SELECT gid, source, target, the_geom,

distance(the_geom, GeometryFromText(
‘POINT(“.$lonlat[0].”“.$lonlat[1].”)’, 4326)) AS dist
FROM “.TABLE.”
WHERE the_geom && setsrid(
‘BOX3D(“.($lonlat[0]-200).”
“.($lonlat[1]-200).”,
“.($lonlat[0]+200).”
“.($lonlat[1]+200).”)’::box3d, 4326)
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);

// Close database connection
pg_close($con);

return $edge;
}

// Select the routing algorithm
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)
) as rt
WHERE “.TABLE.”.gid=rt.gid;”;
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;”;
|


Pgrouting-users mailing list

Pgrouting-users@lists.osgeo.org mailto:[Pgrouting-users@lists.osgeo.org](mailto:Pgrouting-users@lists.osgeo.org)
http://lists.osgeo.org/mailman/listinfo/pgrouting-users


Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users


Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users

By the way, I followed Sittichai’s code but I still got the same errors I got earlier.

···

On 9 January 2014 10:48, Emmanuel Adegboye <eaadegboye@googlemail.com> wrote:

Hello.

I’m now working with the 2013 workshop now and I have my tables structured as follows:

routing=# \d
List of relations
Schema | Name | Type | Owner
--------±------------------------------±---------±---------
public | eastlegon | table | postgres
public | eastlegon_gid_seq | sequence | postgres
public | eastlegon_vertices_pgr | table | postgres
public | eastlegon_vertices_pgr_id_seq | sequence | postgres
public | eastlegonboundary | table | postgres
public | eastlegonboundary_gid_seq | sequence | postgres
public | geography_columns | view | postgres
public | geometry_columns | view | postgres
public | raster_columns | view | postgres
public | raster_overviews | view | postgres
public | route | table | postgres
public | spatial_ref_sys | table | postgres
(12 rows)

routing=# \d eastlegon
Table “public.eastlegon”
Column | Type | Modifiers

--------------±--------------------------±------------------------------------

gid | integer | not null default nextval(‘eastlegon_
gid_seq’::regclass)
length | double precision |
class_id | integer | not null
postcode | character varying(254) |
name | character varying(100) |
the_geom | geometry(LineString,4326) |
source | integer |
target | integer |
cost_len | double precision |
cost_time | double precision |
rcost_len | double precision |
rcost_time | double precision |
x1 | double precision |
y1 | double precision |
x2 | double precision |
y2 | double precision |
to_cost | double precision |
rule | text |
isolated | integer |
reverse_cost | double precision |
Indexes:
“eastlegon_pkey” PRIMARY KEY, btree (gid)
“eastlegon_source_idx” btree (source)
“eastlegon_target_idx” btree (target)
“eastlegon_the_geom_gidx” gist (the_geom)
“source_idx” btree (source)
“target_idx” btree (target)

My aim is simply to follow the workshop and display my routes using at least dijkstra algorithm in openlayers 2 (or 3 if it’s not too complicated). I try installing the wrappers in the workshop but I get syntax errors.

I’m sure my routing is properly set up since I can display routes using the pgRouting layer plugin for QGIS. I also have the layer stored properly in Geoserver. I can already display the layers as a WMS layer using openlayers. My only challenge is to display the route dynamically in a web browser.

I need pointers in the right direction. My skills are still basic though, but I’m willing to learn.

Thanks a lot for your help.

Emmanuel

On 4 January 2014 05:59, Stephen Woodbridge <woodbri@swoodbridge.com> wrote:

Emmanuel,

I wrote the legacy.sql more as an example to document how things changed, but it was never tested as we did not plan on supporting it. The idea behind it was to provide and an example to help people convert their existing applications to use the new functions.

Part of the problem with the legacy code is that it had not test suite and the code was very buggy. It also was haphazard because of its evolution and random things being added that people thought might be nice to have.

The best thing to do is use the new workshop and if you have questions or get stuck to ask the list and we will try to help you sort them out.

Best regards,
-Steve

On 1/3/2014 11:28 PM, Emmanuel Adegboye wrote:

Regina.

It was from the foss4g 2007 workshop. The most recent worshops include
wrapper functions which I am not familiar with so I also get stuck at
some point.

What I am trying to do is to create a simple application that allows
users to set a start and end point and calculate the route using any one
of the major algorithms like the workshop describes.

So far, the user interface (based on openlayers 2.10) works well and
displays both points. I get an error in firebug when I click the
‘calculate route’ button and the php script is called, and this was
after I installed legacy.sql. I get “ERROR: type “geoms” does not exist”
when installing pgrouting.sql.

Here’s the error from firebug:

|

||Warning: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: "POINT( )" <– parse error at position 9 within geometry in C:\ms4w\Apache\htdocs||\hgt\routing.php on line 42

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 44

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 45

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 46

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 47

||

||Warning: pg_query(): Query failed: ERROR: parse error - invalid geometry
||HINT: "POINT( )" <– parse error at position 9 within geometry in C:\ms4w\Apache\htdocs||\hgt\routing.php on line 42

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 44

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 45

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 46

||

||Warning: pg_fetch_result() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 47

||

||Warning: pg_query(): Query failed: in C:\ms4w\Apache\htdocs\hgt\routing.php on line||108

||

||Warning: pg_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\ms4w\Apache||\htdocs\hgt\routing.php on line 115

||<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
||
|||

And the html document:

pgRouting Demo #map-id { width: 100%; height: 512px; border: 1px solid black; }
  • <input type=“radio” name=“control” id=“noneToggle”

    onclick=“toggleControl(this);” checked=“checked” />

    navigate

  • <input type=“radio” name=“control” value=“start” id=“startToggle”

    onclick=“toggleControl(this);” />

    set start point

  • <input type=“radio” name=“control” value=“stop” id=“stopToggle”

    onclick=“toggleControl(this);” />

    set stop point

Shortest Path Dijkstra - undirected (BBox) Shortest Path A Star - undirected Shortest Path Shooting Star

Calculate Route

On Jan 4, 2014 3:45 AM, “Paragon Corporation” <lr@pcorp.us

mailto:[lr@pcorp.us](mailto:lr@pcorp.us)> wrote:

__

Emmanuel,
That PHP code looks like it was written for pgRouting 1.0. Which
workshop did you get that from?
Most of the pgRouting 2.0 functions are prefixed with pgr_. There
should be a file in your install called
In C:/Program
Files/PostgreSQL/9.2/share/extensions/pgrouting_legacy.sql which
installs the 1.0 function names. You could try using that though I
haven’t personally had a need to.
One other thing I did notice about this code which I think is a bug
is that although PG_PORT is defined, it doesn’t seem to be used for
pg_connect, so will not work without modification if you are
runnning postgres on non-default port (5432).
Hope that helps,
Regina
http://www.postgis.us
http://www.bostongis.com
http://www.paragoncorporation.com


From: pgrouting-users-bounces@lists.osgeo.org
mailto:[pgrouting-users-bounces@lists.osgeo.org](mailto:pgrouting-users-bounces@lists.osgeo.org)
[mailto:pgrouting-users-bounces@lists.osgeo.org
mailto:[pgrouting-users-bounces@lists.osgeo.org](mailto:pgrouting-users-bounces@lists.osgeo.org)] *On Behalf Of
*Emmanuel Adegboye
Sent: Friday, January 03, 2014 4:42 PM
To: pgrouting-users@lists.osgeo.org
mailto:[pgrouting-users@lists.osgeo.org](mailto:pgrouting-users@lists.osgeo.org)
Subject: [pgrouting-users] Issues with pgrouting workshop code in

postgis2.11/pgrouting 2.0

I’m having issues getting the pgrouting workshop to work on
Postgresql 9.2/PostGIS 2.11 and pgrouting 2.0 on windows.

How can I rewrite the following php/sql code and make it compatible
with my version:

|<?php

// Database connection settings
define(“PG_DB” , “routing”);
define(“PG_HOST”, “localhost”);
define(“PG_USER”, “postgres”);
define(“PG_PORT”, “5432”);
define(“PG_PASSWD”, “*******”);
define(“TABLE”, “eastlegon”);

$counter= $pathlength= 0;

// Retrieve start point
$start= split(‘’,$_REQUEST[‘startpoint’]);

$startPoint= array($start[0], $start[1]);

// 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.” password=".PG_PASSWD);

$sql= "SELECT gid, source, target, the_geom,

distance(the_geom, GeometryFromText(
‘POINT(“.$lonlat[0].”“.$lonlat[1].”)’, 4326)) AS dist
FROM “.TABLE.”
WHERE the_geom && setsrid(
‘BOX3D(“.($lonlat[0]-200).”
“.($lonlat[1]-200).”,
“.($lonlat[0]+200).”
“.($lonlat[1]+200).”)’::box3d, 4326)
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);

// Close database connection
pg_close($con);

return $edge;
}

// Select the routing algorithm
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)
) as rt
WHERE “.TABLE.”.gid=rt.gid;”;
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;”;
|


Pgrouting-users mailing list

Pgrouting-users@lists.osgeo.org mailto:[Pgrouting-users@lists.osgeo.org](mailto:Pgrouting-users@lists.osgeo.org)
http://lists.osgeo.org/mailman/listinfo/pgrouting-users


Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users


Pgrouting-users mailing list
Pgrouting-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/pgrouting-users