Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-routing-foss4g/web/php/pgrouting.php @ 76

Revision 76, 4.4 KB checked in by djay, 13 years ago (diff)

Ajout du répertoire web

  • Property svn:executable set to *
RevLine 
[76]1<?php
2
3   // Database connection settings
4   define("PG_DB"  , "routing");
5   define("PG_HOST", "localhost"); 
6   define("PG_USER", "postgres");
7   define("PG_PORT", "5432"); 
8   define("TABLE",   "ways");
9
10   // Retrieve start point
11   $start = split(' ',$_REQUEST['startpoint']);
12   $startPoint = array($start[0], $start[1]);
13
14   // Retrieve end point
15   $end = split(' ',$_REQUEST['finalpoint']);
16   $endPoint = array($end[0], $end[1]);
17   
18?>
19
20<?php
21
22   // Find the nearest edge
23   $startEdge = findNearestEdge($startPoint);
24   $endEdge   = findNearestEdge($endPoint);
25
26   // FUNCTION findNearestEdge
27   function findNearestEdge($lonlat) {
28
29      // Connect to database
30      $con = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER);
31
32      $sql = "SELECT gid, source, target, the_geom,
33                          distance(the_geom, GeometryFromText(
34                           'POINT(".$lonlat[0]." ".$lonlat[1].")', 4326)) AS dist
35                     FROM ".TABLE.
36                     WHERE the_geom && setsrid(
37                           'BOX3D(".($lonlat[0]-0.1)."
38                                  ".($lonlat[1]-0.1).",
39                                  ".($lonlat[0]+0.1)."
40                                  ".($lonlat[1]+0.1).")'::box3d, 4326)
41                     ORDER BY dist LIMIT 1";
42
43      $query = pg_query($con,$sql); 
44
45      $edge['gid']      = pg_fetch_result($query, 0, 0); 
46      $edge['source']   = pg_fetch_result($query, 0, 1); 
47      $edge['target']   = pg_fetch_result($query, 0, 2); 
48      $edge['the_geom'] = pg_fetch_result($query, 0, 3); 
49
50      // Close database connection
51      pg_close($con);
52
53      return $edge;
54   }
55   
56?>
57
58<?php
59
60   // Select the routing algorithm
61   switch($_REQUEST['method']) {
62
63      case 'SPD' : // Shortest Path Dijkstra
64
65        $sql = "SELECT rt.gid, ST_AsGeoJSON(rt.the_geom) AS geojson,
66                         length(rt.the_geom) AS length, ".TABLE.".gid
67                      FROM ".TABLE.",
68                          (SELECT gid, the_geom
69                              FROM dijkstra_sp_delta(
70                                  '".TABLE."',
71                                  ".$startEdge['source'].",
72                                  ".$endEdge['target'].",
73                                  0.1)
74                           ) as rt
75                      WHERE ".TABLE.".gid=rt.gid;";
76        break;
77       
78      case 'SPA' : // Shortest Path A*
79
80        $sql = "SELECT rt.gid, ST_AsGeoJSON(rt.the_geom) AS geojson,
81                           length(rt.the_geom) AS length, ".TABLE.".gid
82                        FROM ".TABLE.",
83                            (SELECT gid, the_geom
84                                FROM astar_sp_delta(
85                                    '".TABLE."',
86                                    ".$startEdge['source'].",
87                                    ".$endEdge['target'].",
88                                    0.1)
89                             ) as rt
90                        WHERE ".TABLE.".gid=rt.gid;"; 
91        break;
92
93      case 'SPS' : // Shortest Path Shooting*
94
95        $sql = "SELECT rt.gid, ST_AsGeoJSON(rt.the_geom) AS geojson,
96                           length(rt.the_geom) AS length, ".TABLE.".gid
97                        FROM ".TABLE.",
98                            (SELECT gid, the_geom
99                                FROM shootingstar_sp(
100                                    '".TABLE."',
101                                    ".$startEdge['gid'].",
102                                    ".$endEdge['gid'].",
103                                    0.1, 'length', true, true)
104                             ) as rt
105                        WHERE ".TABLE.".gid=rt.gid;";
106        break;   
107
108   } // close switch
109
110   // Connect to database
111   $dbcon = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER);
112
113   // Perform database query
114   $query = pg_query($dbcon,$sql); 
115   
116?>
117
118<?php
119
120   // Return route as GeoJSON
121   $geojson = array(
122      'type'      => 'FeatureCollection',
123      'features'  => array()
124   ); 
125 
126   // Add edges to GeoJSON array
127   while($edge=pg_fetch_assoc($query)) { 
128
129      $feature = array(
130         'type' => 'Feature',
131         'geometry' => json_decode($edge['geojson'], true),
132         'crs' => array(
133            'type' => 'EPSG',
134            'properties' => array('code' => '4326')
135         ),
136         'properties' => array(
137            'id' => $edge['id'],
138            'length' => $edge['length']
139         )
140      );
141     
142      // Add feature array to feature collection array
143      array_push($geojson['features'], $feature);
144   }
145
146       
147   // Close database connection
148   pg_close($dbcon);
149
150   // Return routing result
151   header('Content-type: application/json',true);
152   echo json_encode($geojson);
153   
154?>
155
Note: See TracBrowser for help on using the repository browser.