source: subversion/sites/other/freemap/common/freemap_functions.php @ 5579

Last change on this file since 5579 was 5579, checked in by nick, 12 years ago

add updated freemap

File size: 9.6 KB
Line 
1<?php
2
3function add_new_marker ($lat, $lon, $type, $description, $userid)
4{
5        $q = 
6                ("INSERT INTO freemap_markers (userid,type,description,lat,lon)".
7                 " VALUES ".
8                 "('$userid','$type','$description','$lat','$lon')");
9        echo "Doing query : $q";
10        mysql_query($q) or die(mysql_error());
11}
12
13function edit_marker($id,$inp,$arr,$userid)
14{
15        $result = mysql_query("SELECT userid FROM freemap_markers WHERE id=$id");
16        if (mysql_num_rows($result)==1)
17        {
18                $row=mysql_fetch_array($result);
19                if($row['userid']==$userid || $row['userid']==0)
20                {
21                        $relevant_inp = filter_array($inp,$arr);
22                        return edit_table("freemap_markers",$id,$relevant_inp,"id");
23                }
24        }
25        return false;
26}
27
28function delete_marker($id, $userid)
29{
30        $result = mysql_query("SELECT userid FROM freemap_markers WHERE id=$id");
31        if (mysql_num_rows($result)==1)
32        {
33                $row=mysql_fetch_array($result);
34                if($row['userid']==$userid || $row['userid']==0)
35                {
36                        delete_from_table("freemap_markers",$id,"id");
37                }
38        }
39}
40
41
42function add_new_walkroute ($lats, $lons, $title, $description, $userid,
43                                                        $private)
44{
45        $latarray = explode("," , $lats);
46        $lonarray = explode("," , $lons);
47       
48        if(count($latarray) == count($lonarray))
49        {
50
51                mysql_query("INSERT INTO walkroutes ".
52                                        "(userid,startlat,startlon,title,description,private)".
53                                        "VALUES ".
54                                        "($userid,$latarray[0],$lonarray[0],'$title',".
55                                        "'$description',$private)")
56                                or die(mysql_error());
57                $wrid = mysql_insert_id();
58
59
60
61                for($count=0; $count<count($latarray); $count++)
62                {
63                        mysql_query
64                                ("INSERT INTO walkroutepoints (walkrouteid,lat,lon) VALUES ".
65                                 "($wrid,$latarray[$count],$lonarray[$count])") or die
66                                        (mysql_error());
67                }
68
69                return $wrid;
70        }
71        return 0;       
72}
73
74function get_walkroute_by_id($id, $userid)
75{
76        $wr = null;
77        $result = mysql_query
78                ("SELECT walkroutepoints.lat,walkroutepoints.lon, ".
79                 "walkroutes.title,walkroutes.description,".
80                 "walkroutes.startlat,walkroutes.startlon, walkroutes.id ".
81                 "FROM walkroutes,walkroutepoints WHERE ".
82                 "walkroutepoints.walkrouteid=walkroutes.id AND walkroutes.id=$id AND ".
83                 "(walkroutes.userid=$userid OR walkroutes.private=0)");
84
85
86        if(mysql_num_rows($result)>0)
87        {
88                while($row=mysql_fetch_assoc($result))
89                {
90                        if($wr === null)
91                        {
92                                $wr = array();
93                                $wr['title'] = stripslashes($row['title']);
94                                $wr['description'] = 
95                                        stripslashes($row['description']);
96                                $wr['startlon'] = $row['startlon'];
97                                $wr['startlat'] = $row['startlat'];
98                                $wr['id'] = $row['id'];
99                                $wr['points'] = array();
100                        }
101
102                        $curpoint = array();
103                        $curpoint['lat'] = $row['lat'];
104                        $curpoint['lon'] = $row['lon'];
105                        $wr['points'][] = $curpoint;
106                }
107
108                $result = mysql_query
109                ("SELECT walkrouteannotations.lat,walkrouteannotations.lon, ".
110                 "walkrouteannotations.annotation ".
111                 "FROM walkroutes,walkrouteannotations WHERE ".
112                 "walkrouteannotations.walkrouteid=walkroutes.id AND ".
113                 "walkroutes.id=$id AND ".
114                 "(walkroutes.userid=$userid OR walkroutes.private=0)".
115                 " ORDER BY walkrouteannotations.id");
116
117                if(mysql_num_rows($result)>0)
118                {
119                        $wr['annotations']=null;
120                        while($row=mysql_fetch_assoc($result))
121                        {
122                                if($wr['annotations']==null)
123                                        $wr['annotations'] = array();
124                                $annotation = array();
125                                $annotation['lon'] = $row['lon'];
126                                $annotation['lat'] = $row['lat'];
127                                $annotation['annotation'] = $row['annotation'];
128                                $wr['annotations'][] = $annotation;
129                        }
130                }
131        }
132        return $wr; 
133}
134       
135function get_user_walkroutes($userid)
136{
137        $routes=array();
138        $result=mysql_query
139                                ("SELECT * FROM walkroutes WHERE userid=$userid");
140        while($row=mysql_fetch_assoc($result))
141        {
142                foreach ($row as $field=>$value)
143                        $row[$field] = stripslashes($row[$field]);
144                $routes[]=$row;
145        }
146        return $routes;
147}
148
149function show_user_walkroutes($walkroutes)
150{
151        $first=true;
152        foreach ($walkroutes as $walkroute)
153        {
154                if(!$first)
155                        echo "<hr/>";
156                else
157                        $first=false;
158                echo "<h2>$walkroute[title]</h2>";
159                echo "<p>$walkroute[description]</p>";
160                echo "<p><a href='/freemap/index.php?lat=$walkroute[startlat]&".
161                         "lon=$walkroute[startlon]>Map</a></p>";
162        }
163}
164
165       
166function annotate_walkroute_point($wrid,$lat,$lon,$annotation,$userid)
167{
168        $result = mysql_query("SELECT userid FROM walkroutes WHERE id=$wrid");
169        if(mysql_num_rows($result)==1)
170        {
171                $row=mysql_fetch_assoc($result);
172                if($row['userid']==$userid || $row['private']==0)
173                {
174                        mysql_query
175                                ("INSERT INTO walkrouteannotations ".
176                                "(walkrouteid,lat,lon,annotation) VALUES ".
177                                "($wrid,$lat,$lon,'$annotation')");
178                }
179        }
180}
181
182function edit_walkroute($id,$inp,$arr,$userid)
183{
184        $result = mysql_query("SELECT userid FROM walkroutes WHERE id=$id");
185        if (mysql_num_rows($result)==1)
186        {
187                $row=mysql_fetch_array($result);
188                if($row['userid']==$userid || $row['private']==0)
189                {
190                        $relevant_inp = filter_array($inp,$arr);
191                        return edit_table("walkroutes",$id,$relevant_inp,"id");
192                }
193        }
194        return false;
195}
196
197function delete_walkroute($id, $userid)
198{
199        $result = mysql_query("SELECT userid FROM walkroutes WHERE id=$id");
200        if (mysql_num_rows($result)==1)
201        {
202                $row=mysql_fetch_array($result);
203                if($row['userid']==$userid || $row['private']==0)
204                {
205                        delete_from_table("walkroutes",$id,"id");
206                        delete_from_table("walkroutepoints",$id,"walkrouteid");
207                }
208        }
209}
210
211function get_markers($w, $s, $e, $n, $userid)
212{
213        $markers=array();
214        $q = "select * from freemap_markers where lat between $s and $n ".
215                 "and lon between $w and $e";
216        $result = mysql_query($q) or die(mysql_error());
217        if(mysql_num_rows($result))
218        {
219                while($row=mysql_fetch_assoc($result))
220                {
221                        if($row['userid']==$userid || $row['userid']==0)
222                                $markers[] = $row;
223                }
224        }
225        return $markers;
226}
227                       
228
229function to_georss($markers)
230{
231        header("Content-type: text/xml");
232        echo "<?xml version='1.0'?>\n";
233        echo "<rss version='2.0' xmlns:georss='http://www.georss.org/georss'>\n";
234        echo "<channel>\n";
235
236        foreach ($markers as $marker)
237        {
238                echo "<item>\n";
239                if(isset($marker['title']) && $marker['title']!=null)
240                        echo "<title>$marker[title]</title>\n";
241                $description=($marker['description']!=null 
242                                                        && $marker['description']!="")
243                                                        ? $marker['description'] : '';
244                echo "<description>$description</description>\n";
245                // according to the rss 2.0 spec the guid is a unique string
246                // identifier for each item. so this is acceptable. it means
247                // that slippy clients can easily tell whether an item has
248                // already been added as a marker.
249                echo "<guid>$marker[id]</guid>\n";
250                echo "<georss:point>$marker[lat] $marker[lon]</georss:point>\n";
251                echo "<georss:featuretypetag>$marker[type]".
252                                 "</georss:featuretypetag>\n";
253                echo "</item>\n";
254        }
255        echo "</channel>\n";
256        echo "</rss>\n";
257}
258
259function get_walkroute_startpoints($w, $s, $e, $n, $userid)
260{
261        $walkroutes=array();
262        $q = "select * from walkroutes where startlat between $s and $n ".
263                 "and startlon between $w and $e";
264        $result = mysql_query($q);
265        if(mysql_num_rows($result))
266        {
267                while($row=mysql_fetch_assoc($result))
268                {
269                        if($row['userid']==$userid || $row['private']==0)
270                        {
271                                $georss = array();
272                                $georss['lat'] =  $row['startlat'];
273                                $georss['lon'] = $row['startlon'];
274                                $georss['title'] = stripslashes($row['title']);
275                                $georss['description'] = 
276                                        stripslashes($row['description']);
277                                $georss['type'] = 'walk';
278                                $georss['id'] =  $row['id'];
279                                $walkroutes[] = $georss;
280                        }
281                }
282        }
283        return $walkroutes;
284}
285
286function walkroute_to_xml ($wr)
287{
288        echo "<walkroute>\n";
289        echo "<id>$wr[id]</id>\n";
290        echo "<title>$wr[title]</title>\n";
291        echo "<description>".stripslashes($wr[description]).
292                "</description>\n";
293        echo "<startlat>$wr[startlat]</startlat>\n";
294        echo "<startlon>$wr[startlon]</startlon>\n";
295        echo "<points>\n";
296        if(is_array($wr['points']))
297                foreach ($wr['points'] as $point)
298                        echo "<point lat='$point[lat]' lon='$point[lon]' />\n";
299        echo "</points>\n";
300
301        if($wr['annotations']!=null)
302        {
303                echo "<annotations>\n";
304                foreach($wr['annotations'] as $annotation)
305                {
306                        echo "<annotation lat='$annotation[lat]' lon='$annotation[lon]'>\n";
307                        echo $annotation['annotation']."\n";
308                        echo "</annotation>\n";
309                }
310                echo "</annotations>\n";
311        }
312
313        echo "</walkroute>\n";
314}
315
316function walkroute_to_gpx($wr)
317{
318        echo "<gpx>\n";
319        echo "<trk>\n";
320        echo "<name>$wr[title]</name>\n";
321        echo "<desc>$wr[description]</desc>\n";
322        echo "<trkseg>\n";
323        if (is_array($wr['points']))
324                foreach ($wr['points'] as $point)
325                        echo "<trkpt lat='$point[lat]' lon='$point[lon]'></trkpt>\n";
326        echo "</trkseg>\n";
327        echo "</trk>\n";
328        if($wr['annotations']!=null)
329        {
330                $count=1;
331                foreach($wr['annotations'] as $annotation)
332                {
333                        echo "<wpt lat='$annotation[lat]' lon='$annotation[lon]'>\n";
334                        echo "<name>".sprintf("%03d",$count++)."</name>\n";
335                        echo "</wpt>\n";
336                }
337        }
338        echo "</gpx>\n";
339}
340       
341function wholly_numeric($input)
342{
343        return preg_match("/^-?[\d\.]+$/",$input);
344}
345
346function get_mapview ($i)
347{
348                $mapviews = array (
349                        1 =>            array("id"=>1, "scale"=>0.3),
350                                        array("id"=>2, "scale"=>0.6),
351                                        array("id"=>3, "scale"=>1.2),
352                                        array("id"=>4, "scale"=>3.125),
353                                        array("id"=>5, "scale"=>6.25),
354                                        array("id"=>6, "scale"=>12.5),
355                                        array("id"=>7, "scale"=>25),
356                                        array("id"=>8, "scale"=>50),
357                                        array("id"=>9, "scale"=>100),
358                                        array("id"=>10, "scale"=>200),
359                                        array("id"=>11, "scale"=>400)
360                                                );
361                return $mapviews[$i];
362}
363# Might be breaking the law with this one. Global Megacorp has patented this
364# algorithm. Well up yours I'm doing it anyway :-)
365function line_length($x1,$y1,$x2,$y2)
366{
367        $dx=$x2-$x1;
368        $dy=$y2-$y1;
369        return sqrt($dx*$dx + $dy*$dy);
370}
371# Returns the slope angle of a contour line;
372# always in the range -90 -> 0 -> +90.
373# 08/02/05 made more generalised by passing parameters as x1,x2,y1,y2
374# rather than the line array.
375function slope_angle($x1,$y1,$x2,$y2)
376{
377        $dy = $y2-$y1;
378        $dx = $x2-$x1;
379        /*
380        $a = rad2deg(atan2($dy,$dx));
381        return round($a-(180*($a>90&&$a<270)));
382        */
383        $a = $dx ? round(rad2deg(atan($dy/$dx))) : 90;
384        return $a; 
385}
386?>
387?>
Note: See TracBrowser for help on using the repository browser.