HOWTO: Как выкачать снимки гугля под Linu

0 голосов
спросил 17 Фев, 07 от verylowbandwidt (120 баллов) в категории Цифровые материалы
Свершилось! Мой дом появился в гугле, и с хорошим качеством!!! Но счастье было недолгим... Местный провайдер предоставляет отвратительную связь, в результате чего Опера при обрыве падала и приходилось переподключаться к инету, заново открывать браузер, и заново искать свой город :(, а так как связь часто рвалась, то разглядывание карт было не очень веселым занятием... Что делать? Осталось только выкачать нужный мне регион, да смотреть в оффлайне, других решений я не нашел... Да еще и оказалось, что я не один такой с отвратительной связью, поэтому и решил выложить этот хавту.

ВНИМАНИЕ!!! Задача этого хавту сделать доступным просмотра гугля на слабых линиях, и если у вас гугль открывается нормально, то ПОЖАЛУЙСТА, не надо ничего выкачивать!!! Дело в том, что сами снимки гуглю не принадлежат, а только предоставляются ему, и только на том условии, что он их не будет распространять (давать свободно скачивать). Именно поэтому в самом гугле нет средств для сохранения. И если контент будет выкачиваться в огромном количестве, то лавочку могут прикрыть, или сам гугль может лишиться прав на эти снимки, а как результат - пострадают все. И не надо думать "я успел, на остальных наплевать", да, выкачанную картинку не отнимут, но и обновлений не будет. Вы будете до пенсии любоваться выкачанной картинкой? Используйте это ТОЛЬКО если нет другого способа для просмотра!

Нашел знакомого в другом городе, который согласился выкачать и переслать карту на болванке, благо ихние каналы хорошие, осталось только найти чем качать. Побродив по инету нашел несколько прог для "выкачивания гугля", но увы, все они были под винду, а мой комп, как и комп знакомого был под Linux...

0. Теория: как и чего устроено, подготовка

четать сцылко:
http://geofaq.narod.ru/2google_geo.htm (ВЗГЛЯД ИЗ-ЗА ГУГЛА)
http://mapbuilder.by.ru/gm.htm (Как устроен Google Maps)
Если ничего непонятно - дальше можно не читать.
Задание: побродите "руками", как описано в ссылках, или воспользуйтесь:

Сохраните этот текст в файле как *.html, и откройте его в браузере
В этот-же каталог желательно положить картинку-пустышку с именем pixel.gif, дабы небыло глюков на несуществующих картинках, когда продолжает висеть прежняя картинка

<html><head><title>Google's Map Explorer (for low bandwidth)</title><style>
a{color:blue;text-decoration:none;}
a:hover{color:red;text-decoration:underline;}
body{background-color: white;}
img{width:256px;height:256px;
border:1px solid black;border-right-width:0px;border-bottom-width:0px;
background-color:seashell;cursor:crosshair}
#imageContainer{text-align:right;}
table{width:100%;}
td{vertical-align:top;font-size:24px;}
</style></head><body>
<table border=0 cellpadding=0 cellspacing=0><tr>
<td><form onsubmit="return(jumpTo(this.elements.jump.value));">Level: <span id="levelNavigation"></span><br>
<div id="textarea"></div><br>Move:<br>
<a href="javascript:move(-1,0);">Left</a><br>
<a href="javascript:move(1,0);">Right</a><br>
<a href="javascript:move(0,-1);">Up</a><br>
<a href="javascript:move(0,1);">Down</a><br>
(or just press arrows on keyboard)<br><br>Jump:<br>
<input type="text" size=20 name="jump"><input type="submit" value="Go"></form></td>
<td id="imageContainer" nowrap><img><img><br><img><img><br></td></tr></table>

<script>

/////////////////////////////////////////////////////////////////////////////

urlPrefix="http://kh.g**gle.com/kh?n=404&v=14&t="; // change it to local path when offline
urlSuffix=""; // change it to ".jpg" for local version
flyTo="t"; //default position

/////////////////////////////////////////////////////////////////////////////

function getLonLatbyLevelXY(LXY){
var center=Math.pow(2,LXY[0]-1)*128;
var Lon=(LXY[1]-center)/(center*2/360);
var Lat=(2*Math.atan(Math.exp((LXY[2]-center)/-(center*2/(2*Math.PI))))-Math.PI/2)*180/Math.PI;
return("Lon: "+Lon.toFixed(5)+", Lat: "+Lat.toFixed(5));/* fixme: return value */
/* based on http://great-zopuh.chat.ru/Programs/MapBuilder/gm.htm, thank! */
}

function getLevelXYbyQRST(a){
var x=0;
var y=0;
var level=a.length;
var ll,cc;
for(ll=1;ll<level;ll++){
cc=a.charAt(ll);
x+=Math.pow(2,level-ll-1)*((cc=="q" || cc=="t")?0:1);
y+=Math.pow(2,level-ll-1)*((cc=="q" || cc=="r")?0:1);
}
return([level,x,y]);
}

function getQRSTbyLevelXY(LXY){
var qrst="t";
var add="qrts";
var mapSize=Math.pow(2,LXY[0]-1);
for(var ll=1;ll<LXY[0];ll++){
qrst+=add.charAt((Math.floor((LXY[1])/(mapSize/Math.pow(2,ll)))%2==0?0:1)+(Math.floor((LXY[2])/(mapSize/Math.pow(2,ll)))%2==0?0:1)*2);
}
return(qrst);
}

function getQRSTbyURL(x){
return(x.substring(x.length-urlSuffix.length-getLevelXYbyQRST(position)[0]-1,x.length-urlSuffix.length));
}

function move(nx,ny){
var LXY=getLevelXYbyQRST(position);
LXY[1]+=nx;
LXY[2]+=ny;
show(getQRSTbyLevelXY(LXY));
}

function jumpTo(jump){
var err=0,cp=0,add="qrts";
for(cp=0;cp<jump.length;cp++){
err+=(add.indexOf(jump.charAt(cp))<0?1:0);
}
if(err>0){alert("Wrong location ("+err+" errors)");} else {show(jump);}
return(false);
}

function viewTileInfo(ev){
var lx,ly;
if(!ev){lx=event.offsetX;ly=event.offsetY;}
else
{
var oo=ev.target;
lx=ly=0;
while(oo.tagName.toLowerCase()!="html"){
lx+=oo.offsetLeft;
ly+=oo.offsetTop;
oo=oo.parentNode;
}
lx=ev.pageX-lx;
ly=ev.pageY-ly;
}
var LXY=getLevelXYbyQRST(getQRSTbyURL(this.src));
document.getElementById("textarea").innerHTML="Tile: "+getQRSTbyURL(this.src)+" ("+LXY[1]+"x"+LXY[2]+" at "+LXY[0]+" level)<br>"+getLonLatbyLevelXY([LXY[0],LXY[1]*256+lx,LXY[2]*256+ly]);
}

function viewAllScreenInfo(){
var LXY=getLevelXYbyQRST(position);
document.getElementById("textarea").innerHTML="Screen: "+LXY[1]+"x"+LXY[2]+" (at "+LXY[0]+" level)<br>Fly on image...";
}

function zoomByClick(){
show(getQRSTbyURL(this.src));
}

function show(pos){
position=pos;
add="qrts";
for(ii=0;ii<4;ii++){
viewPortImages[ii].src="pixel.gif";
viewPortImages[ii].src=urlPrefix+pos+add.charAt(ii)+urlSuffix;
viewPortImages[ii].alt=pos+add.charAt(ii);
}

levelNav="";
for(ll=0;ll<position.length;ll++){
link="javascript:show('"+position.substr(0,ll+1)+"');";
levelNav+="<a href=\""+link+"\">"+position.charAt(ll)+"</a>";
}
document.getElementById("levelNavigation").innerHTML=levelNav;
}

viewPortImages=document.getElementById("imageContainer").getElementsByTagName("IMG");
for(ii=0;ii<viewPortImages.length;ii++){
viewPortImages[ii].onmousemove=viewTileInfo;
viewPortImages[ii].onmouseout=viewAllScreenInfo;
viewPortImages[ii].onclick=zoomByClick;
}

function keymover(ev){
var sc;
if(ev){sc=ev.keyCode;} else {sc=event.keyCode;}
if(sc==38){move(0,-1);}
if(sc==40){move(0,1);}
if(sc==37){move(-1,0);}
if(sc==39){move(1,0);}
}

if((typeof(event)).toLowerCase()!="object" && navigator.appName!="Konqueror"){
document.addEventListener("keypress",keymover,true);
} else {
document.onkeyup=keymover;
}

show(flyTo);

</script>
</body></html>



для понимания устройства гугля.

Обратите внимание на строки между комментариями - это настроки здесь и далее.


1. Часть первая: выкачивание.

Побродив по инету нашел несколько прог для "выкачивания гугля",

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...