<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>GoogleEarth Map</title></head> <body><h1>Google Map</h1>snip ------------ copy the following to ~/.fldigi/scripts/map.pl<br><br>#!/usr/bin/perl<br><br># Author: Stelios Bounanos, M0GLD<br># Date: 20080625<br><br>use warnings;<br>use strict;<br>use Getopt::Std;<br><br>our $VERSION = "0.3141";<br>our %opts = ( "e" => 0, "m" => 1, "z" => 4);<br><br>cmdline();<br>open(STDOUT, '>', "/dev/null");<br><br>my $loc = exists($opts{'l'}) ? $opts{'l'} : $ENV{'FLDIGI_LOG_LOCATOR'};<br>die "Invalid locator\n" unless ((defined($loc) && length($loc) =~ /[2-6]/));<br><br>my $label = exists($opts{'t'}) ? $opts{'t'} : $ENV{'FLDIGI_LOG_CALL'};<br>$label = $loc if (!defined($label) || $label eq "");<br><br>my ($lon, $lat) = map { sprintf("%+.6f", $_) } mtoll($loc);<br>if ($opts{'m'}) {<br> my $url = "http://maps.google.com/maps?q=${lat},${lon}(${label})&t=p&z=$opts{'z'}";<br># $url =~ s/([(),])/sprintf("%%%02X", ord($1))/ge; # encode some chars<br> exec("xdg-open", $url);<br> die "Could not exec xdg-open: $!\n";<br>}<br><br>exit(0) unless ($opts{'e'});<br>my $kml = (exists($ENV{'TMPDIR'}) ? $ENV{'TMPDIR'} : "/tmp") .<br> "/" . $loc . ".kml";<br>open(KML, '>', $kml) or die "Could not write $kml: $!\n";<br>print KML <<EOF<br><?xml version="1.0" encoding="UTF-8"?><br><kml xmlns="http://earth.google.com/kml/2.2"><br> <Placemark><br> <name>$label</name><br> <description><br> $label<br> $loc<br> </description><br> <Point><br> <coordinates>$lon,$lat,0</coordinates><br> </Point><br> </Placemark><br></kml><br>EOF<br> ;<br>close(KML);<br><br>########################################################################<br><br>sub cmdline<br>{<br> $Getopt::Std::STANDARD_HELP_VERSION = 1;<br> my $old_warn_handler = $SIG{__WARN__};<br> $SIG{__WARN__} = sub { die $_[0]; };<br> getopts('t:l:mz:e', \%opts);<br> $SIG{__WARN__} = $old_warn_handler;<br>}<br><br><br># Convert a 2, 4, or 6-character Maidenhead locator string<br># to decimal degrees. Return a (longitude, latitude) pair.<br>sub mtoll<br>{<br> my $len = length($_[0]);<br> $_[0] .= join("", ("A", "A", "0", "0", "A", "A")[$len .. 5]) if ($len < 6);<br> $_[0] = uc($_[0]);<br> die "Invalid locator\n" unless ($_[0] =~ /[A-R]{2}\d{2}[A-X]{2}/);<br><br> my @digits = split(//, $_[0]);<br> my ($lon, $lat) = (-180, -90);<br><br> $lon += (ord($digits[0]) - ord('A')) * 20 +<br> (ord($digits[2]) - ord('0')) * 2 +<br> (ord($digits[4]) - ord('A') + 0.5) / 12;<br> $lat += (ord($digits[1]) - ord('A')) * 10 +<br> (ord($digits[3]) - ord('0')) +<br> (ord($digits[5]) - ord('A') + 0.5) / 24;<br><br> return ($lon, $lat);<br>}<br><br>sub HELP_MESSAGE<br>{<br>print <<EOF<br><br>Usage: $0 [-OPTIONS [-MORE_OPTIONS]] [--] [PROGRAM_ARG1 ...]<br><br>The following single-character options are accepted:<br><br> -t LABEL Use LABEL as the marker label<br> The default is \$FLDIGI_LOG_CALL<br><br> -l LOC Place marker at IARU locator LOC<br> The default is \$FLDIGI_LOG_LOCATOR<br><br> -m Show in Google Maps (default)<br> -z Zoom level (Google Maps only)<br><br> -e Write a Google Earth kml file in<br> \$TMPDIR/LOC.kml<br>EOF<br>;<br>}<br><br>snip------------------------------------------------<br></body></html>