source: subversion/applications/utils/osm-error/error.php @ 18676

Last change on this file since 18676 was 18676, checked in by avantman42, 10 years ago

Co-ordinates are stored in cookies

File size: 7.6 KB
Line 
1<?php
2require ("inc_config.php");
3
4// Co-ordinates
5$left = (float) $_GET ['left'];
6$bottom = (float) $_GET ['bottom'];
7$right = (float) $_GET ['right'];
8$top = (float) $_GET ['top'];
9
10// Store co-ordinates in cookies
11$iExpireTime = time()+60*60*24*90;
12setcookie ("left", $left, $iExpireTime);
13setcookie ("bottom", $bottom, $iExpireTime);
14setcookie ("right", $right, $iExpireTime);
15setcookie ("top", $top, $iExpireTime);
16
17// Get OSM data
18$xml = simplexml_load_file ("$osm_xapi_base/map?bbox=$left,$bottom,$right,$top");
19if ($xml === False)
20        die ("There was a problem getting data from OSM");
21
22// Write header to download XML
23header("Content-Type: application/gpx+xml");
24header("Content-Disposition: attachment; filename=osm_error.gpx;");
25
26// Initialise $iCount
27$iCount = 1;
28
29/*
30 * Get the lat/lon for a way
31 * $way: way to get lat/lon for
32 * &$lat: returned latitude
33 * &$lon: returned longitude
34*/
35function GetWayLatLon ($way, &$fWayLat, &$fWayLon) {
36        global $xml;
37
38        // Get lat/lon of first node
39        $nodeid = $way->nd [0]["ref"];
40        // Loop through nodes in XML
41        foreach ($xml->node as $node) {
42                // If node is part of the way, get lat & lon
43                if ((int) $node ["id"] == $nodeid) {
44                        $fWayLat += (float) $node ["lat"];
45                        $fWayLon += (float) $node ["lon"];
46                        // Found node - return from function
47                        return;
48                }
49        }
50}
51
52/*
53 * Check a node or way has a given tag
54 * $node: the node or way to be checked
55 * $checkfor: the key to check for
56 * Returns true if the key exists, false if not
57*/
58function TagCheck ($node, $checkfor) {
59        foreach ($node->tag as $tag)
60                if ($tag ["k"] == $checkfor)
61                        return True;
62        return False;
63}
64
65/*
66 * Check a node or way does *not* have a tag.
67 * If tag does exist, writes a waypoint
68 * $node: node/way to be checked
69 * $tag: tag in $node to be checked for
70 * $k/$v: define type of node to check (eg $k == "source", $v == "extrapolation")
71 * Either $k or $v can be a wildcard (*)
72 * $waynode - "way" or "node" to indicate whether $node is a way or a node
73*/
74function NoTagCheck ($node, $tag, $k, $v, $waynode) {
75        global $iCount;
76
77        if (($tag ["k"] == $k && $tag ["v"] == $v) ||
78                        ($tag ["k"] == $k && $v == "*") ||
79                        ($k == "*" && $tag ["v"] == $v)) {
80                if ($waynode == "way") {
81                        $fWayLat = 0;
82                        $fWayLon = 0;
83                        GetWayLatLon ($node, $fWayLat, $fWayLon);
84                        $sOut = "<wpt lat='$fWayLat' lon='$fWayLon'>\n";
85                }
86                else
87                        $sOut = "<wpt lat='" . $node ["lat"] . "' lon='" . $node ["lon"] . "'>\n";
88                $sOut .= "<name>" . $iCount++ . " $k - {$tag ["v"]}</name>\n</wpt>\n";
89                echo $sOut;
90        }
91}
92
93/*
94 * Check a node has a tag.
95 * If tag does not exist, writes a waypoint
96 * $node: node to be checked
97 * $tag: tag in $node to be checked
98 * $k/$v: define type of node to check (eg $k == "shop", $v == "supermarket")
99 * Either $k or $v can be a wildcard (*)
100 * $checkfor: tag to check for existence of (eg "opening_hours")
101*/
102function NodeCheck ($node, $tag, $k, $v, $checkfor) {
103        global $iCount;
104
105        if (($tag ["k"] == $k && $tag ["v"] == $v) ||
106                        ($tag ["k"] == $k && $v == "*") ||
107                        ($k == "*" && $tag ["v"] == $v))
108                if (TagCheck ($node, $checkfor) === False) {
109                        $sOut = "<wpt lat='" . $node ["lat"] . "' lon='" . $node ["lon"] . "'>\n";
110                        if ($v == "*")
111                                $sOut .= "<name>" . $iCount++ . " $k - $checkfor</name>\n</wpt>\n";
112                        else
113                                $sOut .= "<name>" . $iCount++ . " $v - $checkfor</name>\n</wpt>\n";
114                        echo $sOut;
115                }
116}
117
118/*
119 * Check a way has a tag.
120 * If tag does not exist, writes a waypoint
121 * $node: node to be checked
122 * $tag: tag in $way to be checked
123 * $k/$v: define type of way to check (eg $k == "highway", $v == "residential")
124 * Either $k or $v can be a wildcard (*)
125 * $checkfor: tag to check for existence of (eg "name")
126*/
127function WayCheck ($way, $tag, $k, $v, $checkfor) {
128        global $iCount;
129
130        if (($tag ["k"] == $k && $tag ["v"] == $v) ||
131                        ($tag ["k"] == $k && $v == "*") ||
132                        ($k == "*" && $tag ["v"] == $v))
133                if (TagCheck ($way, $checkfor) === False) {
134                        $lat = 0;
135                        $lon = 0;
136                        GetWayLatLon ($way, $lat, $lon);
137                        $sOut = "<wpt lat='$lat' lon='$lon'>\n";
138                        if ($v == "*")
139                                $sOut .= "<name>" . $iCount++ . " $k - $checkfor</name>\n</wpt>\n";
140                        else
141                                $sOut .= "<name>" . $iCount++ . " $v - $checkfor</name>\n</wpt>\n";
142                        echo $sOut;
143                }
144}
145
146//Write file header
147echo "<?xml version='1.0' encoding='UTF-8'?>\n";
148echo <<<END
149<gpx
150  version="1.0"
151  creator="OSM-Error - http://www.mappage.org/osmerror/"
152  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
153  xmlns="http://www.topografix.com/GPX/1/0"
154  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
155END;
156echo "\n";
157
158// Check nodes
159foreach ($xml->node as $node) {
160        if ($DEBUG)
161                file_put_contents ($LOG_FILE, "Checking node {$node ["id"]}\n", FILE_APPEND);
162        foreach ($node->tag as $tag) {
163                // Post box reference
164                TagCheck ($node, $tag, "amenity", "post_box", "ref");
165
166                // Name
167                NodeCheck ($node, $tag, "*", "cafe", "name");
168                NodeCheck ($node, $tag, "*", "restaurant", "name");
169                NodeCheck ($node, $tag, "*", "pub", "name");
170
171                NodeCheck ($node, $tag, "*", "school", "name");
172                NodeCheck ($node, $tag, "*", "college", "name");
173                NodeCheck ($node, $tag, "*", "library", "name");
174                NodeCheck ($node, $tag, "*", "university", "name");
175
176                NodeCheck ($node, $tag, "shop", "*", "name");
177                NodeCheck ($node, $tag, "*", "post_office", "name");
178                NodeCheck ($node, $tag, "amenity", "cinema", "name");
179
180                // Opening hours
181                NodeCheck ($node, $tag, "*", "cafe", "opening_hours");
182                NodeCheck ($node, $tag, "shop", "*", "opening_hours");
183                NodeCheck ($node, $tag, "*", "post_office", "opening_hours");
184                NodeCheck ($node, $tag, "*", "fast_food", "opening_hours");
185                NodeCheck ($node, $tag, "*", "pharmacy", "opening_hours");
186                NodeCheck ($node, $tag, "*", "restaurant", "opening_hours");
187                NodeCheck ($node, $tag, "*", "library", "opening_hours");
188
189                // Source
190                NoTagCheck ($node, $tag, "source", "extrapolation");
191                NoTagCheck ($node, $tag, "source", "NPE");
192                NoTagCheck ($node, $tag, "source", "historical");
193
194                // FIXME tags
195                NoTagCheck ($node, $tag, "FIXME", "*");
196
197                // NAPTAN import
198                NoTagCheck ($node, $tag, "naptan:verified", "no");
199        }
200}
201
202// Check ways
203foreach ($xml->way as $way) {
204        if ($DEBUG)
205                file_put_contents ($LOG_FILE, "Checking way {$way ["id"]}\n", FILE_APPEND);
206        foreach ($way->tag as $tag) {
207
208                // Ref
209                WayCheck ($way, $tag, "highway", "motorway", "ref");
210                WayCheck ($way, $tag, "highway", "trunk", "ref");
211                WayCheck ($way, $tag, "highway", "primary", "ref");
212                WayCheck ($way, $tag, "highway", "secondary", "ref");
213
214                // Name
215                WayCheck ($way, $tag, "highway", "residential", "name");
216
217                WayCheck ($way, $tag, "*", "cafe", "name");
218                WayCheck ($way, $tag, "*", "restaurant", "name");
219                WayCheck ($way, $tag, "*", "pub", "name");
220
221                WayCheck ($way, $tag, "*", "school", "name");
222                WayCheck ($way, $tag, "*", "college", "name");
223                WayCheck ($way, $tag, "*", "library", "name");
224                WayCheck ($way, $tag, "*", "university", "name");
225
226                WayCheck ($way, $tag, "shop", "*", "name");
227                WayCheck ($way, $tag, "*", "post_office", "name");
228                WayCheck ($way, $tag, "amenity", "cinema", "name");
229
230                // Opening hours
231                WayCheck ($way, $tag, "*", "cafe", "opening_hours");
232                WayCheck ($way, $tag, "shop", "*", "opening_hours");
233                WayCheck ($way, $tag, "*", "post_office", "opening_hours");
234                WayCheck ($way, $tag, "*", "fast_food", "opening_hours");
235                WayCheck ($way, $tag, "*", "pharmacy", "opening_hours");
236                WayCheck ($way, $tag, "*", "restaurant", "opening_hours");
237                WayCheck ($way, $tag, "*", "library", "opening_hours");
238
239                // Source
240                NoTagCheck ($way, $tag, "source", "extrapolation");
241                NoTagCheck ($way, $tag, "source", "NPE");
242                NoTagCheck ($way, $tag, "source", "historical");
243
244                // FIXME etc
245                NoTagCheck ($way, $tag, "FIXME", "*");
246
247                // Unknown road classification
248                NoTagCheck ($way, $tag, "highway", "road");
249        }
250}
251
252echo "</gpx>\n";
253?>
Note: See TracBrowser for help on using the repository browser.