#!/usr/bin/perl
#
# Download a bunch of Google satellite images and paste them together
#
# Shifty Death Effect done by Noah Vawter 6/1/2005
# Computing Culture Groop, MIT Media Lab.
#
# See w and h for width and height in 256x256 tiles.
# Also see xoff and yoff to translate up/down/left/right from center tile
#
# now examining option of getting jpeg images
# around here is RULIN' http://kh.google.com/kh?v=1&t=tqstqrrqssqqssrt
# zoom 3 http://kh.google.com/kh?v=1&t=tqstqrrqstsrttss
# zoom 2 http://kh.google.com/kh?v=1&t=tqstqrrqstsrtsqrt
# zoom 1 http://kh.google.com/kh?v=1&t=tqstqrrqstsrtsqsqr # 18-digit #
# "t" = top
# qr q=top left r=top right 01 q=0 r=1 t=2 s=3
# ts t=bot left s=bot right 23
# left = 0,2
# right = 1,3
# top = 0,1
# bot = 2,3
# bit 0: 0=left, 1 = right = horizontal bisect
# bit 1: 0=top, 1 = bottom = vertical bisect
# e.g. at maximum zoom,
# tqstqrrqstsrtsqsqr =
# = 203201103231230301
# H 001001101011010101
# V 101100001110110100
# to navigate east, simply increment H then reencode
# H 001001101011010110
# V 101100001110110100
# = 203201103231230310
# = tqstqrrqstsrtsqsrq
$w=11; #default 5 # 11,10 should be good
$h=10; #default 5
$xoff=0; #default 9
$yoff=0; #default 6
$startPoint="tqstqrrqssqqssrt"; # awesome coily spirally
$startPoint="tqstqrrqssqqssrtqq"; # awesome coily spirally
#$startPoint="tqtsqrtsrrrtrss"; # Los Angeles
#$startPoint="tqtsqrtsrrrsstt"; # Los Angeles
open(PEDG,">GiantGoogleSateliteMap.html");
print PEDG "\n";
$_=$startPoint; # qrst language
s/q/0/g;
s/t/0/g;
s/r/1/g;
s/s/1/g;
$hst=$_; # binary
$_=$startPoint;
s/q/0/g;
s/r/0/g;
s/s/1/g;
s/t/1/g;
$vst=$_; # binary
$hval = oct("0b".$hst); # decimal
$vval = oct("0b".$vst); # decimal
$hval+=$xoff;
$vval+=$yoff;
@sp=split(//,$startPoint);
$len=1+$#sp;
print "startPoint = $startPoint\n";
print "hst = $hst ( $hval )\n";
print "vst = $vst ( $vval )\n";
for($yd=0;$yd<$h;$yd++)
{
for($xd=0;$xd<$w;$xd++)
{
$format = "%0$len"."b";
#print "format is $format\n";
$hbin = sprintf($format,int($hval+$xd-$w/2));
$vbin = sprintf($format,int($vval+$yd-$h/2));
$goognem=xy2goog($hbin,$vbin);
$localnem = "sat$goognem.jpg";
# do we already have it locally?
$val = open(CHECK,$localnem);
if($val == 0){
$req="http://kh.google.com/";
$pre = "kh?v=3&t="; #set the zoom level here
$nem = $pre . $goognem;
$url = $req . $nem;
print "$url\n";
$cmd1="wget \"$url\" ";
print "$cmd1\n";
system($cmd1);
$cmd2="mv \"$nem\" $localnem";
print "$cmd2\n";
system($cmd2);
} else { close(CHECK); }
print PEDG "\n";
}
print PEDG "
\n"; } # concatenate horizontal maps # (map gifs) convert tile005000.gif -page +129+0 tile006000.gif -page +258+0 tile007000.gif -mosaic o.gif # (sat jpgs) convert satX.jpg -page etc... for($yd=0;$yd<$h;$yd++) { $cmd3 = "convert "; for($xd=0;$xd<$w;$xd++) { $hbin = sprintf($format,int($hval+$xd-$w/2)); $vbin = sprintf($format,int($vval+$yd-$h/2)); $goognem=xy2goog($hbin,$vbin); $localnem = "sat$goognem.jpg"; $xsh = $xd*256; $ysh = $yd*256; $cmd3 .= "$localnem "; } $cmd3 .= "+append tmp$yd.jpg"; print "$cmd3\n"; system($cmd3); } # concatenate horizontal strips $cmd4 = "convert "; for($yd=0;$yd<$h;$yd++) { $localnem = "tmp$yd.jpg"; $cmd4 .= "$localnem "; } $cmd4 .= "-append output.jpg"; print "$cmd4\n"; system($cmd4); # into google format: q=0 r=1 t=2 s=3 sub xy2goog { my $i; my $hval = shift; my $vval = shift; print "$hval\n$vval\n"; @hstr=split(//,$hval); @vstr=split(//,$vval); $load = ""; for($i=0;$i<$len;$i++){ $_ = 2*$vstr[$i] + $hstr[$i]; print "$_"; s/0/q/g; s/1/r/g; s/2/t/g; s/3/s/g; $load .= "$_"; } print "\n"; print "$load\n"; return($load); }