/[maps]/web/googlemap.cgi
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /web/googlemap.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (show annotations)
Thu Dec 6 14:03:00 2007 UTC (16 years, 4 months ago) by dpavlin
File size: 2841 byte(s)
draw polylines for trace and optionally every nth placemark
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 use HTML::GoogleMaps;
7 use CGI;
8 use CGI::Carp qw/fatalsToBrowser/;
9 use File::Find;
10 use Data::Dump qw/dump/;
11
12 use lib '../';
13 use NMEA;
14
15 my $trace_path = '/home/dpavlin/x/openmoko/gps/';
16
17 # http://localhost/
18 my $map_key = 'ABQIAAAAVQ5szt9Jd8ws6vgfVQOEmhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQ1cKf0DwFJcwtpESJEI0hL8QgtYg';
19
20 my @traces;
21 find({ wanted => sub {
22 push @traces, $_ if -f $_;
23 }}, $trace_path);
24
25 my $q = CGI->new;
26
27 print $q->header;
28
29 my $head = '';
30 my $html = join('', qq{
31 <h1>Select GPS NMEA dump</h1>
32 },
33 $q->start_form( -id => 'trace_frm' ),
34 $q->popup_menu(
35 -name => 'trace',
36 -values => [
37 map {
38 "$_ (" . (stat("$trace_path/$_"))[7] . " bytes)"
39 }
40 sort {
41 (stat("$trace_path/$a"))[10] <=> (stat("$trace_path/$b"))[10]
42 } @traces
43 ],
44 -onChange => 'trace_frm.submit()',
45 ),
46 $q->submit( -value => 'Show trace' ),
47 $q->br,
48 'Draw as ',
49 $q->checkbox(
50 -name => 'line',
51 -onChange => 'trace_frm.submit()',
52 ),
53 ' with every ',
54 $q->textfield(
55 -name => 'nth_placemark',
56 -value => 5,
57 -size => 2,
58 -onChange => 'trace_frm.submit()',
59 ),
60 '<sup>th</sup> placemark',
61 $q->end_form,
62 );
63
64
65 my @points;
66 my $center_point;
67
68 if ( my $trace = $q->param('trace') ) {
69 $trace =~ s/\s.+$//;
70
71 my $map = HTML::GoogleMaps->new(key => $map_key);
72 #$map->center(point => "Zagreb, Hrvatska");
73
74 $trace = "$trace_path/$trace";
75
76 my $points = 0;
77 my $nth_placemark = $q->param('nth_placemark');
78
79 open(my $fh, '<', $trace) || die "can't open $trace: $!";
80 while( <$fh> ) {
81
82 my $hash = NMEA->line( $_ ) || next;
83
84 my $point = [ $hash->{lon}, $hash->{lat} ];
85 $center_point ||= $point;
86
87
88 if ( $q->param('line') ) {
89 push @points, $point;
90 }
91
92 if ( ! $q->param('line') ||
93 $nth_placemark && $points % $nth_placemark == 0
94 ) {
95
96 $map->add_marker(
97 point => $point,
98 html => join('<br/>',
99 map {
100 ucfirst($_) . ': ' . $hash->{$_}
101 } ( qw/time lat lon speed course/ )
102 ),
103 );
104
105 }
106
107 $points++;
108
109 }
110 close($fh);
111
112 if ( $points > 0 ) {
113
114 #$map->zoom(10);
115 #$map->v2_zoom(0);
116 $map->controls("large_map_control", "map_type_control");
117 $map->map_type('hybrid');
118 $map->center( $center_point ) if $q->param('line') && $center_point;
119
120 if ( $q->param('line') ) {
121 warn "## points = ",dump( @points );
122 $map->add_polyline( points => [ @points ] );
123 }
124
125 my ( $map_div, $map_script );
126 ( $head, $map_div, $map_script ) = $map->render;
127
128 $html .= join('', qq{
129 <h1>Plotting $points points from }, $q->param('trace'), qq{</h1>
130 $map_div
131 $map_script
132 <a href="http://aprs.gids.nl/nmea/">GPS - NMEA sentence information</a>
133 });
134
135 } else {
136 $html .= '<em>No points found for ' . $q->param('trace') . '</em>';
137 }
138
139 }
140
141 print qq{
142 <html>
143 <head>
144 <title>Read GPS - NMEA sentence and display it on GoogleMaps</title>
145 $head
146 </head>
147 <body>
148 $html
149 </body>
150 </html>
151 };

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26