#!/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=10; #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); }