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

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

Initial import of files into osm-error

File size: 5.3 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// Get OSM data
11$xml = simplexml_load_file ("$osm_xapi_base/map?bbox=$left,$bottom,$right,$top");
12if ($xml === False)
13        die ("There was a problem getting data from OSM");
14
15// Write header to download XML
16header("Content-Type: application/gpx+xml");
17header("Content-Disposition: attachment; filename=osm_error.gpx;");
18
19// Initialise $iCount
20$iCount = 1;
21
22/*
23 * Get the lat/lon for a way
24 * $way: way to get lat/lon for
25 * &$lat: returned latitude
26 * &$lon: returned longitude
27*/
28function GetWayLatLon ($way, &$fWayLat, &$fWayLon) {
29        global $xml;
30
31        // Get lat/lon of first node
32        $nodeid = $way->nd [0]["ref"];
33        // Loop through nodes in XML
34        foreach ($xml->node as $node) {
35                // If node is part of the way, get lat & lon
36                if ((int) $node ["id"] == $nodeid) {
37                        $fWayLat += (float) $node ["lat"];
38                        $fWayLon += (float) $node ["lon"];
39                        // Found node - return from function
40                        return;
41                }
42        }
43}
44
45/*
46 * Check a node or way has a given tag
47 * $node: the node or way to be checked
48 * $checkfor: the key to check for
49 * Returns true if the key exists, false if not
50*/
51function TagCheck ($node, $checkfor) {
52        foreach ($node->tag as $tag)
53                if ($tag ["k"] == $checkfor)
54                        return True;
55        return False;
56}
57
58/*
59 * Check a node or way does *not* have a tag.
60 * If tag does exist, writes a waypoint
61 * $node: node to be checked
62 * $tag: tag in $node to be checked for
63 * $k/$v: define type of node to check (eg $k == "source", $v == "extrapolation")
64 * Either $k or $v can be a wildcard (*)
65*/
66function NoTagCheck ($node, $tag, $k, $v) {
67        global $iCount;
68
69        if (($tag ["k"] == $k && $tag ["v"] == $v) ||
70                        ($tag ["k"] == $k && $v == "*") ||
71                        ($k == "*" && $tag ["v"] == $v)) {
72                $sOut = "<wpt lat='" . $node ["lat"] . "' lon='" . $node ["lon"] . "'>\n";
73                $sOut .= "<name>" . $iCount++ . " $k - {$tag ["v"]}</name>\n</wpt>\n";
74                echo $sOut;
75        }
76}
77
78/*
79 * Check a node has a tag.
80 * If tag does not exist, writes a waypoint
81 * $node: node to be checked
82 * $tag: tag in $node to be checked
83 * $k/$v: define type of node to check (eg $k == "shop", $v == "supermarket")
84 * Either $k or $v can be a wildcard (*)
85 * $checkfor: tag to check for existence of (eg "opening_hours")
86*/
87function NodeCheck ($node, $tag, $k, $v, $checkfor) {
88        global $iCount;
89
90        if (($tag ["k"] == $k && $tag ["v"] == $v) ||
91                        ($tag ["k"] == $k && $v == "*") ||
92                        ($k == "*" && $tag ["v"] == $v))
93                if (TagCheck ($node, $checkfor) === False) {
94                        $sOut = "<wpt lat='" . $node ["lat"] . "' lon='" . $node ["lon"] . "'>\n";
95                        if ($v == "*")
96                                $sOut .= "<name>" . $iCount++ . " $k - $checkfor</name>\n</wpt>\n";
97                        else
98                                $sOut .= "<name>" . $iCount++ . " $v - $checkfor</name>\n</wpt>\n";
99                        echo $sOut;
100                }
101}
102
103/*
104 * Check a way has a tag.
105 * If tag does not exist, writes a waypoint
106 * $node: node to be checked
107 * $tag: tag in $way to be checked
108 * $k/$v: define type of way to check (eg $k == "highway", $v == "residential")
109 * Either $k or $v can be a wildcard (*)
110 * $checkfor: tag to check for existence of (eg "name")
111*/
112function WayCheck ($way, $tag, $k, $v, $checkfor) {
113        global $iCount;
114
115        if (($tag ["k"] == $k && $tag ["v"] == $v) ||
116                        ($tag ["k"] == $k && $v == "*") ||
117                        ($k == "*" && $tag ["v"] == $v))
118                if (TagCheck ($way, $checkfor) === False) {
119                        $lat = 0;
120                        $lon = 0;
121                        GetWayLatLon ($way, $lat, $lon);
122                        $sOut = "<wpt lat='$lat' lon='$lon'>\n";
123                        if ($v == "*")
124                                $sOut .= "<name>" . $iCount++ . " $k - $checkfor</name>\n</wpt>\n";
125                        else
126                                $sOut .= "<name>" . $iCount++ . " $v - $checkfor</name>\n</wpt>\n";
127                        echo $sOut;
128                }
129}
130
131//Write file header
132echo "<?xml version='1.0' encoding='UTF-8'?>\n";
133echo <<<END
134<gpx
135  version="1.0"
136  creator="OSM-Error - http://www.mappage.org/osmerror/"
137  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
138  xmlns="http://www.topografix.com/GPX/1/0"
139  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
140END;
141echo "\n";
142
143// Check nodes
144foreach ($xml->node as $node) {
145        if ($DEBUG)
146                file_put_contents ($LOG_FILE, "Checking node {$node ["id"]}\n", FILE_APPEND);
147        foreach ($node->tag as $tag) {
148                // Post boxes
149                TagCheck ($node, $tag, "amenity", "post_box", "ref");
150
151                // Name
152                NodeCheck ($node, $tag, "amenity", "cafe", "name");
153                NodeCheck ($node, $tag, "amenity", "pub", "name");
154                NodeCheck ($node, $tag, "shop", "*", "name");
155
156                // Opening hours
157                NodeCheck ($node, $tag, "amenity", "cafe", "opening_hours");
158                NodeCheck ($node, $tag, "shop", "*", "opening_hours");
159                NodeCheck ($node, $tag, "*", "fast_food", "opening_hours");
160                NodeCheck ($node, $tag, "*", "pharmacy", "opening_hours");
161
162                // Source
163                NoTagCheck ($node, $tag, "source", "extrapolation");
164
165                //FIXME tags
166                NoTagCheck ($node, $tag, "FIXME", "*");
167        }
168}
169
170// Check ways
171foreach ($xml->way as $way) {
172        if ($DEBUG)
173                file_put_contents ($LOG_FILE, "Checking way {$way ["id"]}\n", FILE_APPEND);
174        foreach ($way->tag as $tag) {
175                // Name
176                WayCheck ($way, $tag, "highway", "residential", "name");
177                WayCheck ($way, $tag, "shop", "*", "name");
178
179                // Opening hours
180                WayCheck ($way, $tag, "shop", "*", "opening_hours");
181
182                // Source
183                NoTagCheck ($node, $tag, "source", "extrapolation");
184
185                //FIXME tags
186                NoTagCheck ($node, $tag, "FIXME", "*");
187        }
188}
189
190echo "</gpx>\n";
191?>
Note: See TracBrowser for help on using the repository browser.