OfficeLinebacker has asked for the wisdom of the Perl Monks concerning the following question:
I'm embarrassed to admit I'm totally stumped by the problems I'm having so I'm airing it out in the hopes that your help can solve my problem.
So my goal is to take this script that I found on the Geohashing wiki (http://wiki.xkcd.com/geohashing/User:AeroIllini/GeoHistory) that will create a KML file to show the history of Geohash points for a given graticule. I am adapting it so that one can enter data and view the results online.
So I divided it into three steps:
#!/usr/bin/perl -w use strict; use Date::Calc qw(Add_Delta_Days Delta_Days); use Time::Local; use lib '/var/chroot/home/content/17/10541917/html/lib/Geo-Hashing-0.0 +6/lib'; use Geo::Hashing; use CGI qw(warningsToBrowser fatalsToBrowser); $\ = "\n"; my $t = localtime; my @u = split /\s/,$t; $t=join '-',@u; my $filename = "$t.kml"; #can also use $t=time; for number of seconds since the epoch. my $q = CGI->new; # create new CGI object if ((! $q->param('submit')) && (! $q->param('submitToGoogle'))){ print $q->header; print $q->start_html('Geohashing History'), # start the HTML h1('Welcome to the Geohashing History Calculator.'); print $q->start_form(); #Latitude print $q->p("Latitude for the graticule you're interested in:"); print $q->textfield(-name=>'lat', -value=>'39', -size=>3, -maxlength=>3); print $q->br; #Longitude print $q->p("Longitude for the graticule you're interested in:"); print $q->textfield(-name=>'lon', -value=>'-77', -size=>3, -maxlength=>3); print $q->br; #Begin date (must be after XXXX) print $q->p("Begin date of date range (in YYYY-MM-DD format)"); print $q->textfield(-name=>'begindate', -value=>'2013-03-21', -size=>10, -maxlength=>10); print $q->br; #End date # Grab the current date so we can set the default my ($a,$b,$c,$todayday,$todaymonth,$todayyear,$d,$e,$f) = localtim +e(time); # Do some interim math. $todayyear = $todayyear+1900; $todaymonth = $todaymonth+1; print $q->p("End date of date range (in YYYY-MM-DD format)"); print $q->textfield(-name=>'enddate', -value=>sprintf("$02d-%02d-%04d",$todayyear,$t +odaymonth,$todayday), -size=>10, -maxlength=>10); print $q->br; #Filename? #Submit button print $q->submit(-name=>'submit', -value=>'submit information'); print $q->end_form(); print $q->end_html; # end the HTML }elsif (param('submit')){ #print $q->header, # create the HTTP header # start_html('Geohashing History Results'), # start the HTML # h3('Geohashing History Results'); # level 1 header #Latitude #print $q->start_form; ##print $q->h3("You submitted the form."); #my $startdate=param('begindate'); #my ($year, $month, $day) = split /-/ , $startdate; #my ($startyear, $startmonth, $startday) = split /-/ , $startdate; #my $enddate=param('enddate'); #my ($endyear, $endmonth, $endday) = split /-/ , $enddate; #my $delta = Delta_Days(($startyear, $startmonth, $startday),($end +year,$endmonth,$endday)); # #print $q->h6("You have $delta days in your date range."); # #my $lat = param('lat'); #my $lon=param('lon'); ## Translate months for placemark titles. #my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); ## Output file header xml stuff # #open FH, "> $filename" || die "Can't open $filename: $!"; #print $q->FH "<?xml version=\"1.0\" encoding=\"UTF-8\"?> #<kml xmlns=\"http://www.google.com/earth/kml/2\"> #<Document> #<name>Historical Geohash Points for ",$lat,",",$lon,"</name> #"; # ## Main loop #for (my $i = 0; $i <= $delta; $i++) { # # # format date for Geo::Hashing # my $date = sprintf("%04d-%02d-%02d", $year, $month, $day) +; # # # magic happens! # my $geo = new Geo::Hashing(lat => $lat, lon => $lon, date + => $date); # # # output placemark xml # print $q->FH "<Placemark>"; # print $q->FH "<name>"; # print $q->FH $months[$month-1]," ",$day,", ",$year; # print $q->FH "</name>"; # print $q->FH "<description>",$geo->lat,", ",$geo->lon,"</ +description>"; # print $q->FH "<Point><coordinates>",$geo->lon,",",$geo->l +at,"</coordinates></Point>"; # print $q->FH "</Placemark>","\n"; # # # increment day and loop again! # ($year, $month, $day) = Add_Delta_Days($startyear, $start +month, $startday, $i); #} # ## finish up xml file #print $q->FH "</Document> #</kml>"; # #print $q->submit(-name=>'submitToGoogle', -value=>'View Results i +n Google Maps'); # #print $q->end_html; # end the HTML }elsif(param->('submitToGoogle')){ print $q->header; # create the HTTP header print $q->start_html('Redirect page'), # start the HTML h3('Redirect Page'); # level 1 header #print $q->redirect("https://maps.google.com/maps?q=http:%2F%2Fpqrs +.be%2Fmisc%2F$filename"); print $q->end_html; # end the HTML }else{ print $q->header; # create the HTTP header print $q->start_html("Shouldn't be here"), # start the HTML h3('You are here in error.'); #print $q->redirect("https://maps.google.com/maps?q=http:%2F%2Fpqrs +.be%2Fmisc%2F$filename"); print $q->end_html; # end the HTML }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Flummoxed by CGI problems
by kcott (Archbishop) on Apr 25, 2013 at 06:26 UTC | |
|
Re: Flummoxed by CGI problems
by Anonymous Monk on Apr 25, 2013 at 03:39 UTC |