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

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

Started on 6/14-character waypoint names

File size: 11.7 KB
Line 
1<?php
2/*
3Code to get co-ordinates from map taken from http://maposmatic.org/ and
4copyright (c) 2009 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
5Other code copyright (c) Russ Phillips <russ AT phillipsuk DOT org>
6
7This file is part of OSM Error.
8
9OSM Error is free software: you can redistribute it and/or modify
10it under the terms of the GNU General Public License as
11published by the Free Software Foundation, either version 3 of the
12License, or (at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program.  If not, see <http://www.gnu.org/licenses/>.
21*/
22
23require ("inc_config.php");
24
25// Co-ordinates
26$left = (float) $_GET ['lon_upper_left'];
27$bottom = (float) $_GET ['lat_bottom_right'];
28$right = (float) $_GET ['lon_bottom_right'];
29$top = (float) $_GET ['lat_upper_left'];
30
31// Checkbox values
32$ref = (bool) $_GET ['ref'];
33$name = (bool) $_GET ['name'];
34$hours = (bool) $_GET ['hours'];
35$source = (bool) $_GET ['source'];
36$fixme = (bool) $_GET ['fixme'];
37$naptan = (bool) $_GET ['naptan'];
38$road = (bool) $_GET ['road'];
39$pbref = (bool) $_GET ['pbref'];
40
41// Store co-ordinates & checkbox values in cookies
42$iExpireTime = time ()+60*60*24*90;
43setcookie ("left", $left, $iExpireTime);
44setcookie ("bottom", $bottom, $iExpireTime);
45setcookie ("right", $right, $iExpireTime);
46setcookie ("top", $top, $iExpireTime);
47
48setcookie ("ref", $ref, $iExpireTime);
49setcookie ("name", $name, $iExpireTime);
50setcookie ("hours", $hours, $iExpireTime);
51setcookie ("source", $source, $iExpireTime);
52setcookie ("fixme", $fixme, $iExpireTime);
53setcookie ("naptan", $naptan, $iExpireTime);
54setcookie ("road", $road, $iExpireTime);
55setcookie ("pbref", $pbref, $iExpireTime);
56
57// Get OSM data
58$xml = simplexml_load_file ($osm_api_base . "?bbox=$left,$bottom,$right,$top");
59if ($xml === False)
60        die ("There was a problem getting data from OSM. Go back and try a smaller area.");
61
62// Write header to download XML
63header("Content-Type: application/gpx+xml");
64header("Content-Disposition: attachment; filename=osm_error.gpx;");
65
66// Initialise $iCount
67$iCount = 1;
68
69/*
70 * Get the lat/lon for a way
71 * $way: way to get lat/lon for
72 * &$lat: returned latitude
73 * &$lon: returned longitude
74*/
75function GetWayLatLon ($way, &$fWayLat, &$fWayLon) {
76        global $xml;
77        // Get lat/lon of first node
78        $nodeid = $way->nd [0]["ref"];
79
80        // Loop through nodes in XML
81        foreach ($xml->node as $node) {
82                // If node is part of the way, get lat & lon
83                if ((int) $node ["id"] == $nodeid) {
84                        $fWayLat += (float) $node ["lat"];
85                        $fWayLon += (float) $node ["lon"];
86                        // Found node - return from function
87                        return;
88                }
89        }
90}
91
92/*
93 * Check a node or way has a given tag
94 * $node: the node or way to be checked
95 * $checkfor: the key to check for
96 * Returns true if the key exists, false if not
97*/
98function TagCheck ($node, $checkfor) {
99        foreach ($node->tag as $tag)
100                if (strtolower ($tag ["k"]) == strtolower ($checkfor))
101                        return True;
102        return False;
103}
104
105/*
106 * Check a node or way does *not* have a tag.
107 * If tag does exist, writes a waypoint
108 * $node: node/way to be checked
109 * $tag: tag in $node to be checked for
110 * $k/$v: define type of node to check (eg $k == "source", $v == "extrapolation")
111 * Either $k or $v can be a wildcard (*)
112 * $waynode - "way" or "node" to indicate whether $node is a way or a node
113*/
114function NoTagCheck ($node, $tag, $k, $v, $waynode, $name, $shortname) {
115        global $iCount, $DEBUG, $LOG_FILE;
116        //Make check case-insensitive
117        $k = strtolower ($k);
118        $v = strtolower ($v);
119        $tagk = strtolower ($tag ["k"]);
120        $tagv = strtolower ($tag ["v"]);
121
122        if (($tagk == $k && $tagv == $v) ||
123                        ($tagk == $k && $v == "*") ||
124                        ($k == "*" && $tagv == $v)) {
125                if ($waynode == "way") {
126                        $fWayLat = 0;
127                        $fWayLon = 0;
128                        GetWayLatLon ($node, $fWayLat, $fWayLon);
129                        $sOut = "<wpt lat='$fWayLat' lon='$fWayLon'>\n";
130                }
131                else
132                        $sOut = "<wpt lat='" . $node ["lat"] . "' lon='" . $node ["lon"] . "'>\n";
133                $sErrText =  "$k - " . $tag ["v"];
134                $sOut .= "<name>$name" . $iCount++ . "</name>\n";
135                $sOut .= "<desc>$sErrText</desc>\n";
136                $sOut .= "</wpt>\n";
137                echo $sOut;
138                if ($DEBUG)
139                        file_put_contents ($LOG_FILE, "\t$sErrText\n\tLat/Lon: {$node ['lat']}, {$node ['lon']}\n", FILE_APPEND);
140
141        }
142}
143
144/*
145 * Check a node has a tag.
146 * If tag does not exist, writes a waypoint
147 * $node: node to be checked
148 * $tag: tag in $node to be checked
149 * $k/$v: define type of node to check (eg $k == "shop", $v == "supermarket")
150 * Either $k or $v can be a wildcard (*)
151 * $checkfor: tag to check for existence of (eg "opening_hours")
152*/
153function NodeCheck ($node, $tag, $k, $v, $checkfor, $name, $shortname) {
154        global $iCount, $DEBUG, $LOG_FILE;
155        //Make check case-insensitive
156        $k = strtolower ($k);
157        $v = strtolower ($v);
158        $tagk = strtolower ($tag ["k"]);
159        $tagv = strtolower ($tag ["v"]);
160
161        if (($tagk == $k && $tagv == $v) ||
162                        ($tagk == $k && $v == "*") ||
163                        ($k == "*" && $tagv == $v))
164                if (TagCheck ($node, $checkfor) === False) {
165                        $sOut = "<wpt lat='" . $node ["lat"] . "' lon='" . $node ["lon"] . "'>\n";
166                        if ($v == "*")
167                                $sErrText = "$k - $checkfor";
168                        else
169                                $sErrText = "$v - $checkfor";
170                        $sOut .= "<name>$name" . $iCount++ . "</name>\n";
171                        $sOut .= "<desc>$sErrText</desc>\n";
172                        $sOut .= "</wpt>\n";
173                        echo $sOut;
174                        if ($DEBUG)
175                                file_put_contents ($LOG_FILE, "\t$sErrText\n\tLat/Lon: {$node ['lat']}, {$node ['lon']}\n", FILE_APPEND);
176                }
177}
178
179/*
180 * Check a way has a tag.
181 * If tag does not exist, writes a waypoint
182 * $node: node to be checked
183 * $tag: tag in $way to be checked
184 * $k/$v: define type of way to check (eg $k == "highway", $v == "residential")
185 * Either $k or $v can be a wildcard (*)
186 * $checkfor: tag to check for existence of (eg "name")
187*/
188function WayCheck ($way, $tag, $k, $v, $checkfor, $name, $shortname) {
189        global $iCount, $DEBUG, $LOG_FILE;
190        //Make check case-insensitive
191        $k = strtolower ($k);
192        $v = strtolower ($v);
193        $tagk = strtolower ($tag ["k"]);
194        $tagv = strtolower ($tag ["v"]);
195
196        if (($tagk == $k && $tagv == $v) ||
197                        ($tagk == $k && $v == "*") ||
198                        ($k == "*" && $tagv == $v))
199                if (TagCheck ($way, $checkfor) === False) {
200                        $lat = 0;
201                        $lon = 0;
202                        GetWayLatLon ($way, $lat, $lon);
203                        $sOut = "<wpt lat='$lat' lon='$lon'>\n";
204                        if ($v == "*")
205                                $sErrText = "$k - $checkfor";
206                        else
207                                $sErrText = "$v - $checkfor";
208                        $sOut .= "<name>$name" . $iCount++ . "</name>\n";
209                        $sOut .= "<desc>$sErrText</desc>\n";
210                        $sOut .= "</wpt>\n";
211                        echo $sOut;
212                        if ($DEBUG)
213                                file_put_contents ($LOG_FILE, "\t$sErrText\n\tLat/Lon: {$node ['lat']}, {$node ['lon']}\n", FILE_APPEND);
214                }
215}
216
217//Write file header
218echo "<?xml version='1.0' encoding='UTF-8'?>\n";
219echo <<<END
220<gpx
221  version="1.0"
222  creator="OSM-Error - http://www.mappage.org/osmerror/"
223  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
224  xmlns="http://www.topografix.com/GPX/1/0"
225  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
226END;
227echo "\n";
228
229// Check nodes
230foreach ($xml->node as $node) {
231        if ($DEBUG)
232                file_put_contents ($LOG_FILE, "Checking node {$node ["id"]}\n", FILE_APPEND);
233        foreach ($node->tag as $tag) {
234                // Post box reference
235                if ($pbref === True)
236                        TagCheck ($node, $tag, "amenity", "post_box", "ref", "Postbox ref", "pb ref");
237
238                // Name
239                if ($name === True) {
240                        NodeCheck ($node, $tag, "*", "cafe", "name", "Cafe name ", "Name");
241                        NodeCheck ($node, $tag, "*", "restaurant", "name", "Restnt name", "Name");
242                        NodeCheck ($node, $tag, "*", "pub", "name", "Pub name ", "Name");
243
244                        NodeCheck ($node, $tag, "*", "school", "name", "School name", "Name");
245                        NodeCheck ($node, $tag, "*", "college", "name", "Coll name ", "Name");
246                        NodeCheck ($node, $tag, "*", "library", "name", "Liby name ", "Name");
247                        NodeCheck ($node, $tag, "*", "university", "name", "Uni name ", "Name");
248
249                        NodeCheck ($node, $tag, "shop", "*", "name", "Shop name ", "Name");
250                        NodeCheck ($node, $tag, "*", "post_office", "name", "POffice nme", "Name");
251                        NodeCheck ($node, $tag, "amenity", "cinema", "name", "Cinema name", "Name");
252                }
253
254                // Opening hours
255                if ($hours === True) {
256                        NodeCheck ($node, $tag, "*", "cafe", "opening_hours", "Open hours ", "OHours");
257                        NodeCheck ($node, $tag, "shop", "*", "opening_hours", "Open hours ", "OHours");
258                        NodeCheck ($node, $tag, "*", "post_office", "opening_hours", "Open hours ", "OHours");
259                        NodeCheck ($node, $tag, "*", "fast_food", "opening_hours", "Open hours ", "OHours");
260                        NodeCheck ($node, $tag, "*", "pharmacy", "opening_hours", "Open hours ", "OHours");
261                        NodeCheck ($node, $tag, "*", "restaurant", "opening_hours", "Open hours ", "OHours");
262                        NodeCheck ($node, $tag, "*", "library", "opening_hours", "Open hours ", "OHours");
263                }
264
265                // Source
266                if ($source === True) {
267                        NoTagCheck ($node, $tag, "source", "extrapolation", "node", "Src extrap", "Source");
268                        NoTagCheck ($node, $tag, "source", "NPE", "node", "Src NPE ", "SrcNPE");
269                        NoTagCheck ($node, $tag, "source", "historical", "node", "Src Hist ", "SrcHis");
270                }
271
272                // FIXME tags
273                if ($fixme === True)
274                        NoTagCheck ($node, $tag, "FIXME", "*", "node", "Fixme ", "Fixme");
275
276                // NAPTAN import
277                if ($naptan === True)
278                        NoTagCheck ($node, $tag, "naptan:verified", "no", "node", "Naptan vrfy", "Naptan");
279        }
280}
281
282// Check ways
283foreach ($xml->way as $way) {
284        if ($DEBUG)
285                file_put_contents ($LOG_FILE, "Checking way {$way ["id"]}\n", FILE_APPEND);
286        foreach ($way->tag as $tag) {
287
288                // Ref
289                if ($ref === True) {
290                        WayCheck ($way, $tag, "highway", "motorway", "ref", "Motrway ref", "Ref");
291                        WayCheck ($way, $tag, "highway", "trunk", "ref", "Trunk ref", "Ref");
292                        WayCheck ($way, $tag, "highway", "primary", "ref", "Primry ref ", "Ref");
293                        WayCheck ($way, $tag, "highway", "secondary", "ref", "Secndry ref", "Ref");
294                }
295
296                // Name
297                if ($name === True) {
298                        WayCheck ($way, $tag, "highway", "residential", "name", "Resid name ", "Name");
299
300                        WayCheck ($way, $tag, "*", "cafe", "name", "Cafe name ", "Name");
301                        WayCheck ($way, $tag, "*", "restaurant", "name", "Restnt name", "Name");
302                        WayCheck ($way, $tag, "*", "pub", "name", "Pub name ", "Name");
303
304                        WayCheck ($way, $tag, "*", "school", "name", "School name", "Name");
305                        WayCheck ($way, $tag, "*", "college", "name", "Coll name ", "Name");
306                        WayCheck ($way, $tag, "*", "library", "name", "Liby name ", "Name");
307                        WayCheck ($way, $tag, "*", "university", "name", "Uni name ", "Name");
308
309                        WayCheck ($way, $tag, "shop", "*", "name", "Shop name ", "Name");
310                        WayCheck ($way, $tag, "*", "post_office", "name", "POffice nme", "Name");
311                        WayCheck ($way, $tag, "amenity", "cinema", "name", "Cinema name", "Name");
312                }
313
314                // Opening hours
315                if ($hours === True) {
316                        WayCheck ($way, $tag, "*", "cafe", "opening_hours", "Open hours ", "OHours");
317                        WayCheck ($way, $tag, "shop", "*", "opening_hours", "Open hours ", "OHours");
318                        WayCheck ($way, $tag, "*", "post_office", "opening_hours", "Open hours ", "OHours");
319                        WayCheck ($way, $tag, "*", "fast_food", "opening_hours", "Open hours ", "OHours");
320                        WayCheck ($way, $tag, "*", "pharmacy", "opening_hours", "Open hours ", "OHours");
321                        WayCheck ($way, $tag, "*", "restaurant", "opening_hours", "Open hours ", "OHours");
322                        WayCheck ($way, $tag, "*", "library", "opening_hours", "Open hours ", "OHours");
323                }
324
325                // Source
326                if ($source === True) {
327                        NoTagCheck ($way, $tag, "source", "extrapolation", "way", "Src extrap", "Source");
328                        NoTagCheck ($way, $tag, "source", "NPE", "way", "Src NPE ", "SrcNPE");
329                        NoTagCheck ($way, $tag, "source", "historical", "way", "Src Hist ", "SrcHis");
330                }
331
332                // FIXME etc
333                if ($fixme === True)
334                        NoTagCheck ($way, $tag, "FIXME", "*", "way", "Fixme ", "Fixme");
335
336                // Unknown road classification
337                if ($road === True)
338                        NoTagCheck ($way, $tag, "highway", "road", "way", "Road type ", "Road");
339        }
340}
341
342echo "</gpx>\n";
343?>
Note: See TracBrowser for help on using the repository browser.