summaryrefslogtreecommitdiff
path: root/misc/gpsdrive
diff options
context:
space:
mode:
authortsarna <tsarna>2003-01-08 17:29:06 +0000
committertsarna <tsarna>2003-01-08 17:29:06 +0000
commitd72cfacf6cf594b56b66e51f2a2c218a92a2a464 (patch)
treeb11435a0ba3933aff7199fe413b73eefbc0dd675 /misc/gpsdrive
parent3d7bdfcec980bb63662e9815bdc20a3b1e4ddfb4 (diff)
downloadpkgsrc-d72cfacf6cf594b56b66e51f2a2c218a92a2a464.tar.gz
Bump to 1.31nb2 with addition of
Drew Einhorn's gpsfetchmap.pl enhancements, including: - tred rather than flat map directory - grid-snapped images and checking to see if images are already available before downloading - support for US Census TIGER Line map server and terraserver as image sources.
Diffstat (limited to 'misc/gpsdrive')
-rw-r--r--misc/gpsdrive/Makefile4
-rw-r--r--misc/gpsdrive/distinfo4
-rw-r--r--misc/gpsdrive/patches/patch-ab56
-rw-r--r--misc/gpsdrive/patches/patch-ac313
4 files changed, 374 insertions, 3 deletions
diff --git a/misc/gpsdrive/Makefile b/misc/gpsdrive/Makefile
index 9781797a051..4f9b8a4c74d 100644
--- a/misc/gpsdrive/Makefile
+++ b/misc/gpsdrive/Makefile
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.2 2003/01/05 17:26:00 tsarna Exp $
+# $NetBSD: Makefile,v 1.3 2003/01/08 17:29:06 tsarna Exp $
DISTNAME= gpsdrive-1.31
-PKGREVISION= 1
+PKGREVISION= 2
CATEGORIES= misc
MASTER_SITES= http://gpsdrive.kraftvoll.at/
diff --git a/misc/gpsdrive/distinfo b/misc/gpsdrive/distinfo
index 332c2b15d29..99233fc9441 100644
--- a/misc/gpsdrive/distinfo
+++ b/misc/gpsdrive/distinfo
@@ -1,5 +1,7 @@
-$NetBSD: distinfo,v 1.2 2003/01/05 17:26:01 tsarna Exp $
+$NetBSD: distinfo,v 1.3 2003/01/08 17:29:06 tsarna Exp $
SHA1 (gpsdrive-1.31.tar.gz) = 296a06d264c5fbb077c91f3529b4e6f122423f05
Size (gpsdrive-1.31.tar.gz) = 784379 bytes
SHA1 (patch-aa) = cc5dd44020ffc5f22dc958c938b9f98ff6e01810
+SHA1 (patch-ab) = 240901fe52e41db1a41299f66ac61c06898f1881
+SHA1 (patch-ac) = 86f67ad04378f14a95e5b9fc806b2054ef4be127
diff --git a/misc/gpsdrive/patches/patch-ab b/misc/gpsdrive/patches/patch-ab
new file mode 100644
index 00000000000..b8d23091515
--- /dev/null
+++ b/misc/gpsdrive/patches/patch-ab
@@ -0,0 +1,56 @@
+$NetBSD: patch-ab,v 1.1 2003/01/08 17:29:06 tsarna Exp $
+
+Drew Einhorn's gpsfetchmap.pl enhancements from:
+
+http://s2.selwerd.nl/~dirk-jan/gpsdrive/archive/msg01772.html
+
+also require this patch to support tree'd rather than flap map
+driectories.
+
+--- src/gpsdrive.c.orig Sun Dec 8 09:43:33 2002
++++ src/gpsdrive.c Wed Jan 8 12:20:48 2003
+@@ -2926,12 +2926,22 @@
+ }
+ for (i = 0; i < nrmaps; i++)
+ {
++ /* strip off the path, we just want to check the filename */
++ char *fullname;
++ char *rslash;
++ char *filename;
++
+ skip = TRUE;
++
++ fullname = (maps + i)->filename;
++ rslash = strrchr(fullname, '/');
++ filename = rslash == NULL ? fullname : rslash + 1;
++
+ if (displaymap_map)
+- if (!(strncmp ((maps + i)->filename, "map_", 4)))
++ if (!(strncmp (filename, "map_", 4)))
+ skip = FALSE;
+ if (displaymap_top)
+- if (!(strncmp ((maps + i)->filename, "top_", 4)))
++ if (!(strncmp (filename, "top_", 4)))
+ skip = FALSE;
+
+ if (skip)
+@@ -3101,8 +3111,17 @@
+
+ for (i = 0; i < nrmaps; i++)
+ {
+- if ((strncmp ((maps + i)->filename, "map_", 4)))
+- if ((strncmp ((maps + i)->filename, "top_", 4)))
++ /* strip off the path, we just want to check the filename */
++ char *fullname;
++ char *rslash;
++ char *filename;
++
++ fullname = (maps + i)->filename;
++ rslash = strrchr(fullname, '/');
++ filename = rslash == NULL ? fullname : rslash + 1;
++
++ if ((strncmp (filename, "map_", 4)))
++ if ((strncmp (filename, "top_", 4)))
+ {
+ GString *error;
+ error = g_string_new (NULL);
diff --git a/misc/gpsdrive/patches/patch-ac b/misc/gpsdrive/patches/patch-ac
new file mode 100644
index 00000000000..9230d4c0b3c
--- /dev/null
+++ b/misc/gpsdrive/patches/patch-ac
@@ -0,0 +1,313 @@
+$NetBSD: patch-ac,v 1.1 2003/01/08 17:29:06 tsarna Exp $
+
+Drew Einhorn's gpsfetchmap.pl enhancements from:
+
+http://s2.selwerd.nl/~dirk-jan/gpsdrive/archive/msg01772.html
+
+--- src/gpsfetchmap.pl.orig Sun Nov 24 11:04:38 2002
++++ src/gpsfetchmap.pl Wed Jan 8 12:13:17 2003
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl
++#!/usr/bin/env perl
+
+ # gpsfetchmap
+ #
+@@ -9,38 +9,71 @@
+ gpsfetchmap (c) 2002 Kevin Stephens <gps\@suburbialost.com>
+ modified (Sept 06, 2002) by Sven Fichtner <sven.fichtner\@flugfunk.de>
+ modified (Sept 18, 2002) by Sven Fichtner <sven.fichtner\@flugfunk.de>
+-modified (Nov 21, 2002) by Magnus Månsson <ganja\@0x63.nu>
+-Version 1.04
++modified (Nov 21, 2002) by Magnus MÃ¥nsson <ganja\@0x63.nu>
++modified (Dec 24, 2002) by Drew Einhorn <drew.einhorn\@starband.net>
++Version 1.05
+ EOP
+
+ use strict;
+ use Getopt::Long;
+ use Pod::Usage;
+-
+-# Setup possible scales
+-my @SCALES = (1000,1500,2000,3000,5000,7500,10000,15000,20000,30000,50000,75000,
+- 100000,150000,200000,300000,500000,750000,1000000,1500000,2000000,3000000,
+- 5000000,7500000,10000000,15000000,20000000,30000000,50000000,75000000);
++use POSIX qw(floor ceil);
++use File::Temp qw/ tempfile tempdir /;
+
+ # Set defaults and get options from command line
+ Getopt::Long::Configure('no_ignore_case');
+-my ($lat,$lon,$slat,$endlat,$slon,$endlon,$waypoint,$area,$unit,$mapdir,$debug,$force,$version,$man,$help);
+-my $failcount = 0;
++my (@SCALES,$lat,$lon,$slat,$endlat,$slon,$endlon,$waypoint,$area,$unit,$debug,$force,$version,$man,$help);
++
++my $failcount;
++my $writecount;
++my $cachecount;
+ my $polite = 'no';
+ my $scale = '50000';
+ my $CONFIG_DIR = "$ENV{'HOME'}/.gpsdrive"; # Should we allow config of this?
+ my $CONFIG_FILE = "$CONFIG_DIR/gpsdriverc";
+ my $WAYPT_FILE = "$CONFIG_DIR/way.txt";
+-my $KOORD_FILE = 'map_koord.txt'; # Should we allow config of this?
+ my $FILEPREFIX = 'map_';
+ my $mapserver = 'mapblast';
++my $replace = '0';
++my $mapdir = "";
+
+ GetOptions ('lat=f' => \$lat, 'lon=f' => \$lon, 'start-lat=f' => \$slat, 'end-lat=f' => \$endlat, 'start-lon=f' => \$slon, 'end-lon=f' => \$endlon, 'scale=s' => \$scale, 'mapserver=s' => \$mapserver,
+ 'waypoint=s' =>, \$waypoint, 'area=s' => \$area, 'unit=s' => \$unit,'mapdir=s' => \$mapdir, 'polite:i' => \$polite,
+ 'WAYPOINT=s' => \$WAYPT_FILE, 'CONFIG=s' => \$CONFIG_FILE, 'PREFIX=s' => \$FILEPREFIX,
+- 'FORCE' => \$force, 'debug' => \$debug, 'MAN' => \$man, 'help|x' => \$help, 'version' => \$version)
++ 'FORCE' => \$force, 'debug' => \$debug, 'MAN' => \$man, 'help|x' => \$help, 'version' => \$version, 'replace' => \$replace)
+ or pod2usage(1);
+
++if ($mapdir eq "") {
++ $mapdir = $CONFIG_DIR;
++} else {
++ $mapdir = $CONFIG_DIR/$mapdir;
++}
++my $LOCK_SH = 1;
++my $LOCK_EX = 2;
++my $LOCK_NB = 4;
++my $LOCK_UN = 8;
++
++my $KOORD_FILE = "$mapdir/map_koord.txt"; # Should we allow config of this?
++open(KOORD,">>$KOORD_FILE") || die "Can't open: $KOORD_FILE";
++
++# Setup possible scales
++my %ts1;
++if ($mapserver eq "terraserver") {
++ my ($s, $ts);
++
++ @SCALES = ();
++ $s = 2757;
++ for ($ts = 10; $ts <= 16; $ts++) {
++ @SCALES = (@SCALES, $s);
++ $ts1{$s} = $ts;
++ $s *= 2;
++ }
++} else {
++ @SCALES = (1000,1500,2000,3000,5000,7500,10000,15000,20000,30000,50000,75000,
++ 100000,150000,200000,300000,500000,750000,1000000,1500000,2000000,3000000,
++ 5000000,7500000,10000000,15000000,20000000,30000000,50000000,75000000);
++}
++
+ pod2usage(1) if $help;
+ pod2usage(-verbose=>2) if $man;
+
+@@ -55,7 +88,6 @@
+
+
+ # Setup up some constants
+-my $EXPEDIAFACT = 1378.6;
+ my $DIFF = 0.0000028;
+ my $RADIUS_KM = 6371.01;
+ my $LAT_DIST_KM = 110.87;
+@@ -64,7 +96,7 @@
+
+ # Get the list of scales we need
+ my $SCALES_TO_GET_ref = get_scales(\$scale);
+-print "Scale to download: ", join(",",sort {$a <=> $b} @{$SCALES_TO_GET_ref}), "\n" if ($debug);
++print "Scales to download: ", join(",",sort {$a <=> $b} @{$SCALES_TO_GET_ref}), "\n" if ($debug);
+
+ # Get the center waypoint if they want one
+ if ($waypoint) {
+@@ -82,7 +114,7 @@
+ unless ($slat && $slon && $endlat && $endlon) {
+ ($slat,$slon,$endlat,$endlon) = get_coords(\$lat,\$lon,\$area,\$unit);
+ }
+-print "Upper left: $slat $slon, Lower Right: $endlat, $endlon\n" if ($debug);
++print "Lower left: $slat $slon, Upper Right: $endlat, $endlon\n" if ($debug);
+
+ unless ($force) {
+ my $count = file_count(\($slat,$slon,$endlat,$endlon));
+@@ -93,67 +125,136 @@
+
+ print "\nDownloading files:\n";
+
+-# Change into the gpsdrive maps directory
+-chdir($CONFIG_DIR);
+-chdir($mapdir);
+-
+ # Ok start getting the maps
+ foreach my $scale (@{$SCALES_TO_GET_ref}) {
+- # Setup k
+- my $k = $DIFF * $scale;
+- my $lati = $slat;
+- while ($lati < $endlat) {
+- my $long = $slon;
+- while ($long < $endlon) {
+- my $filename = "$FILEPREFIX$scale-$lati-$long.gif";
+- if (! -s $filename) {
+- LOOP: {
+- if ($mapserver eq 'expedia') {
+- next LOOP if ($scale <=1000);
+- my $expediascale= sprintf("%d",$scale / $EXPEDIAFACT);
+- my $where;
+- if ($lon < -30) {
+- $where = 'USA0409';
+- } else {
+- $where = 'EUR0809';
+- }
+- print "http://msrvmaps.mappoint.net/isapi/MSMap.dll?ID=3XNsF.\&C=$lati,$long\&L=$where\&CV=1\&A=$expediascale\&S=1280,1024\&O=0.000000,0.000000\&MS=0\&P=\n"
+- if ($debug);
+- `wget -nd -q -O tmpmap.gif "http://msrvmaps.mappoint.net/isapi/MSMap.dll?ID=3XNsF.\&C=$lati,$long\&L=$where\&CV=1\&A=$expediascale\&S=1280,1024\&O=0.000000,0.000000\&MS=0\&P="`;
+- $scale = $expediascale * $EXPEDIAFACT;
+- } elsif ($mapserver eq 'mapblast') {
+- print "http://www.mapblast.com/myblastd/MakeMap.d?\&CT=$lati:$long:$scale\&IC=\&W=1280\&H=1024\&LB=\n"
+- if ($debug);
+- `wget -nd -q -O tmpmap.gif "http://www.mapblast.com/myblastd/MakeMap.d?\&CT=$lati:$long:$scale\&IC=\&W=1280\&H=1024\&LB="`;
+- }
+- if (-s 'tmpmap.gif') {
+- open(KOORD,">>$KOORD_FILE") || die "Can't open: $KOORD_FILE";
+- print KOORD "$filename $lati $long $scale\n";
+- rename('tmpmap.gif',$filename);
+- print ".";
+- print "\nWrote $filename\n" if ($debug);
+- } else {
+- $failcount++;
+- print ",";
+- }
+- }
+- # sleep if polite is turned on to be nice to the webserver of the mapserver
+- sleep($polite) if ($polite =~ /\d+/);
+- sleep(1) if (!$polite);
+- }
+- $long += $k;
+- }
+- $lati += $k;
+- }
+-}
+-print "Failcount: $failcount\n";
+-print "\n";
++ # Setup k
++ my $k = sprintf("%.4f", $DIFF * $scale);
++ getmaps($scale, $slat, $endlat, $slon, $endlon, $k);
++}
+
+ ################################################################################
+ #
+ # Subroutines
+ #
+ ################################################################################
++
++sub getmaps {
++ my ($scale, $slat, $endlat, $slon, $endlon, $k) = @_;
++
++ print "Getting maps for scale: $scale\n";
++
++ my $l = floor($slat / $k);
++ my $lati = $k * $l;
++
++ $l = ceil($endlat / $k);
++ my $elat = $k * $l;
++
++ while ($lati <= $elat) {
++ $l = floor($slon / $k);
++ my $long = $k * $l;
++
++ $l = ceil($endlon / $k);
++ my $elon = $k * $l;
++
++ while ($long <= $elon) {
++ getmap($scale, $lati, $long);
++ $long += $k;
++ }
++ $lati += $k;
++ }
++ print "\n";
++ print "Failcount: $failcount\n";
++ print "Cachecount: $cachecount\n";
++ print "Writecount: $writecount\n";
++}
++
++sub lock {
++ flock KOORD, $LOCK_EX;
++ # Move past addtions by other processes
++ seek KOORD, 0, 2;
++}
++
++sub unlock {
++ flock KOORD, $LOCK_UN;
++}
++
++sub getmap {
++ my ($scale, $lati, $long) = @_;
++ my $filename;
++ my $url;
++ my $la;
++ my $lo;
++
++ $la = sprintf("%.4f", $lati);
++ $lo = sprintf("%.4f", $long);
++
++ my $EXPEDIAFACT = 1378.6;
++ $filename = mapfilename("$FILEPREFIX", $scale, $la, $lo);
++ $url = "";
++ if (! $replace && -e "$mapdir/$filename") {
++ $cachecount++;
++ print "=";
++ print "\nCached $filename\n" if ($debug);
++ } else {
++ if ($mapserver eq 'expedia' && $scale > 1000) {
++ my $expediascale= sprintf("%d",$scale / $EXPEDIAFACT);
++ my $where;
++ if ($lon < -30) {
++ $where = 'USA0409';
++ } else {
++ $where = 'EUR0809';
++ }
++ $url = "http://msrvmaps.mappoint.net/isapi/MSMap.dll?ID=3XNsF.\\&C=$la,$lo\\&L=$where\\&CV=1\\&A=$expediascale\\&S=1280,1024\\&O=0.000000,0.000000\\&MS=0\\&P=";
++ } elsif ($mapserver eq 'mapblast') {
++ $url = "http://www.mapblast.com/myblastd/MakeMap.d?\\&CT=$la:$lo:$scale\\&IC=\\&W=1280\\&H=1024\\&LB=";
++ } elsif ($mapserver eq 'terraserver') {
++ my $sc = $ts1{$scale};
++ $url = "http://terraservice.net/GetImageArea.ashx?t=1\\&lat=$la\\&lon=$lo\\&s=$sc\\&w=1280\\&h=1024";
++ } elsif ($mapserver eq 'tiger') {
++ my $s = $scale / 300000.0;
++ $url = "http://tiger.census.gov/cgi-bin/mapper/map.gif?lat=$la\\&lon=$lo\\&wid=0.001\\&ht=$s\\&iwd=1280\\&iht=1024\\&on=majroads\\&on=places\\&on=shorelin\\&on=streets\\&on=interstate\\&on=statehwy\\&on=ushwy\\&on=water\\&tlevel=-\\&tvar=-\\&tmeth=i";
++ }
++ if ($url ne "") {
++ my $p = "--wait=$polite --random-wait" if (!$polite);
++ my ($fh, $tempfile) = tempfile( "temp_XXXXXX", DIR => "$mapdir" );
++
++ `wget $p -nd -q -O $tempfile $url`;
++ print $url if ($debug);
++
++ if (-s $tempfile) {
++ lock();
++ print KOORD "$filename $la $lo $scale\n";
++ unlock();
++ rename($tempfile, "$mapdir/$filename");
++ print ".";
++ print "\nWrote $filename\n" if ($debug);
++ $writecount++;
++ } else {
++ $failcount++;
++ print "\nFailed $filename\n";
++ }
++ # NEED convert to greyscale
++ # and draw grid lines?
++ # using ImageMaqick?
++ }
++ }
++}
++
++sub mapfilename {
++ my ($prefix, $scale, $lati, $long) = @_;
++ my $pathname;
++ my $filename;
++
++ if ($mapserver eq 'terraserver') {
++ $scale = $ts1{$scale};
++ }
++ $pathname=sprintf("%s/%s/%03d/%08.4f/%d/", $mapserver, $scale, $lati, $lati, $long);
++ `mkdir -p "$mapdir/$pathname"`;
++ # I know there's a builtin mkdir, but last time I fussed with it
++ # there was no -p, and using it was tedious
++ $filename = sprintf("%s%d-%08.4f-%09.4f.gif", $prefix, $scale, $lati, $long);
++ return "$pathname$filename";
++}
+
+ sub error_check {
+ my $status;