--- web/googlemap.cgi 2007/12/03 14:47:08 15 +++ web/googlemap.cgi 2007/12/06 14:03:00 23 @@ -30,7 +30,7 @@ my $html = join('', qq{

Select GPS NMEA dump

}, - $q->start_form, + $q->start_form( -id => 'trace_frm' ), $q->popup_menu( -name => 'trace', -values => [ @@ -41,11 +41,30 @@ (stat("$trace_path/$a"))[10] <=> (stat("$trace_path/$b"))[10] } @traces ], + -onChange => 'trace_frm.submit()', ), $q->submit( -value => 'Show trace' ), + $q->br, + 'Draw as ', + $q->checkbox( + -name => 'line', + -onChange => 'trace_frm.submit()', + ), + ' with every ', + $q->textfield( + -name => 'nth_placemark', + -value => 5, + -size => 2, + -onChange => 'trace_frm.submit()', + ), + 'th placemark', $q->end_form, ); + +my @points; +my $center_point; + if ( my $trace = $q->param('trace') ) { $trace =~ s/\s.+$//; @@ -55,39 +74,67 @@ $trace = "$trace_path/$trace"; my $points = 0; + my $nth_placemark = $q->param('nth_placemark'); open(my $fh, '<', $trace) || die "can't open $trace: $!"; while( <$fh> ) { my $hash = NMEA->line( $_ ) || next; - $map->add_marker( - point => [ $hash->{lon}, $hash->{lat} ], - html => join('
', - map { - ucfirst($_) . ': ' . $hash->{$_} - } ( qw/time lat lon speed course/ ) - ), - ); + my $point = [ $hash->{lon}, $hash->{lat} ]; + $center_point ||= $point; + + + if ( $q->param('line') ) { + push @points, $point; + } + + if ( ! $q->param('line') || + $nth_placemark && $points % $nth_placemark == 0 + ) { + + $map->add_marker( + point => $point, + html => join('
', + map { + ucfirst($_) . ': ' . $hash->{$_} + } ( qw/time lat lon speed course/ ) + ), + ); + + } $points++; + } close($fh); - #$map->zoom(10); - #$map->v2_zoom(0); - $map->controls("large_map_control", "map_type_control"); - $map->map_type('hybrid'); + if ( $points > 0 ) { - my ( $map_div, $map_script ); - ( $head, $map_div, $map_script ) = $map->render; + #$map->zoom(10); + #$map->v2_zoom(0); + $map->controls("large_map_control", "map_type_control"); + $map->map_type('hybrid'); + $map->center( $center_point ) if $q->param('line') && $center_point; + + if ( $q->param('line') ) { + warn "## points = ",dump( @points ); + $map->add_polyline( points => [ @points ] ); + } - $html .= join('', qq{ + my ( $map_div, $map_script ); + ( $head, $map_div, $map_script ) = $map->render; + + $html .= join('', qq{

Plotting $points points from }, $q->param('trace'), qq{

$map_div $map_script GPS - NMEA sentence information - }); + }); + + } else { + $html .= 'No points found for ' . $q->param('trace') . ''; + } }