#!/usr/bin/perl -w # -*- perl -*- # # $Id: bbbikegooglemap.cgi,v 1.22 2005/12/10 23:47:01 eserte Exp $ # Author: Slaven Rezic # # Copyright (C) 2005 Slaven Rezic. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # Mail: slaven@rezic.de # WWW: http://www.rezic.de/eserte/ # package BBBikeGooglemap; use strict; use FindBin; use lib ("$FindBin::RealBin/..", "$FindBin::RealBin/../lib", # für Radzeit: "$FindBin::RealBin/../BBBike", "$FindBin::RealBin/../BBBike/lib", ); use CGI qw(:standard); use Karte; use Karte::Polar; sub new { bless {}, shift } sub run { my($self) = @_; local $CGI::POST_MAX = 2_000_000; my @polylines_polar; my @wpt; my $coordsystem = param("coordsystem") || "standard"; my $converter; if ($coordsystem eq 'polar') { $converter = \&polar_converter; } else { $converter = \&standard_converter; } if (param("wpt_or_trk")) { if (param("wpt_or_trk") =~ / /) { param("coords", join("!", param("coords"), split(/ /, param("wpt_or_trk"))) ); } else { param("wpt", param("wpt_or_trk")); } } my $filename = param("gpxfile"); if (defined $filename) { (my $ext = $filename) =~ s{^.*\.}{.}; require Strassen::Core; require File::Temp; my $fh = upload("gpxfile"); my($tmpfh,$tmpfile) = File::Temp::tempfile(UNLINK => 1, SUFFIX => $ext); while(<$fh>) { print $tmpfh $_; } close $fh; close $tmpfh; my $gpx = Strassen->new($tmpfile); $gpx->init; while(1) { my $r = $gpx->next; last if !@{ $r->[Strassen::COORDS()] }; # XXX hack --- should append recognise self_or_default? $CGI::Q->append(-name => 'coords', -values => [join "!", @{ $r->[Strassen::COORDS()] }], ); } } for my $coords (param("coords")) { my(@coords) = split /[!;]/, $coords; my(@coords_polar) = map { my($x,$y) = split /,/, $_; join ",", $converter->($x,$y); } @coords; push @polylines_polar, \@coords_polar; } for my $wpt (param("wpt")) { my($name,$coord); if ($wpt =~ /[!;]/) { ($name,$coord) = split /[!;]/, $wpt; } else { $name = ""; $coord = $wpt; } my($x,$y) = split /,/, $coord; ($x, $y) = $converter->($x,$y); push @wpt, [$x,$y,$name]; } my $zoom = param("zoom"); $zoom = 3 if !defined $zoom; $self->{converter} = $converter; $self->{coordsystem} = $coordsystem; print header; print $self->get_html(\@polylines_polar, \@wpt, $zoom); } sub standard_converter { my($x,$y) = @_; $Karte::Polar::obj->standard2map($x,$y); } sub polar_converter { @_[0,1] } sub get_html { my($self, $paths_polar, $wpts, $zoom) = @_; my $converter = $self->{converter}; my $coordsystem = $self->{coordsystem}; my($centerx,$centery); if ($paths_polar && @$paths_polar) { ($centerx,$centery) = map { sprintf "%.5f", $_ } split /,/, $paths_polar->[0][0]; } elsif ($wpts && @$wpts) { ($centerx,$centery) = map { sprintf "%.5f", $_ } $wpts->[0][0], $wpts->[0][1]; } else { require Geography::Berlin_DE; ($centerx,$centery) = $converter->(split /,/, Geography::Berlin_DE->center()); } my $html = < BBBike data presented with Googlemap
EOF for my $wpt (@$wpts) { my($x,$y,$name) = @$wpt; next if $name eq ''; $html .= qq{$name
\n}; } $html .= <
Koordinatensystem:





Letzten Punkt löschen Route löschen
Upload einer GPX-Datei:

E-Mail | BBBike | Adresssuche | Google Maps

EOF } return 1 if caller; my $o = BBBikeGooglemap->new; $o->run; =head1 NAME bbbikegooglemap.cgi - show BBBike data through Google maps =cut # rsync -e "ssh -2" -a ~/src/bbbike/cgi/bbbikegooglemap.cgi root@www.radzeit.de:/var/www/domains/radzeit.de/www/cgi-bin/bbbikegooglemap2.cgi