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

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

various changes to Freemap/Osmajax?

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