Страница 2 из 12

Re: Google Earth

СообщениеДобавлено: 28 авг 2008, 13:53
zed
Да, есть и такие (распаковать оба архива в одну папку, пришлось разрезать т.к. на сайте ограничение на max размер вложения в 256КБ). Правда, получает файлы по-одному. Сайт автора проги http://google-earth.narod.ru/, спросите, может он уже и пачками качает

Re: Google Earth

СообщениеДобавлено: 02 сен 2008, 14:28
ciberhunter
Что-то у меня не работает программа. Или я не понимаю как она работает.

Re: Google Earth

СообщениеДобавлено: 03 сен 2008, 16:41
zed
жмём кнопочку Get SessionKey (происходит авторизация на сервере), затем GetData. И если такой файл существует - то он появиться в папке с программой (+ его распакованная и расшифрованная версии)

Re: Google Earth

СообщениеДобавлено: 09 сен 2008, 06:44
ciberhunter
zed Можно надеяться что Доунлоадер полноценный скоро появится?
Для просмотра можно тот же SASGIS использовать. Но тут же видно необходимо преобразование проекций. Видеокарты современные умножением матриц на вектор на раз занимаются.

Re: Google Earth

СообщениеДобавлено: 09 сен 2008, 13:35
zed
ciberhunter писал(а):Можно надеяться что Доунлоадер полноценный скоро появится?

Это наврят ли. Автор заморозил все свои разработки по GE из-за нехватки времени, а может, просто надоело.
Что бы сделать качалку, нужно разобраться с файлами q2 (в них зашита инфа по версиям всех типов данных для данной области), чтоб знать, какую версию файлов запрашивать с сервера. Структура q2 известна, но неизвестно назначение той или иной версии (для какого она именно типа данных и для какого уровня зума) В общем, не то чтоб уж очень сложно - просто нужно время и желание. Как только появиться доброволец - так и появиться качалка.
А насчёт того, чем это всё можно просматривать - мне понравился NASA World Wide. У него открытый кэш (россыпь картинок в папке) и очень легко можно экспортировать в кэш NASA любой другой кэш (проекция аналогичная GoogleMaps, поэтому кэш GE нужно перепроецировать, наверное). Да и NASA поудобнее будет, чем SASGIS, но топорнее чем GE.

Re: Google Earth

СообщениеДобавлено: 18 окт 2008, 12:47
zed
CacheMaster - программа, при помощи которй можно:
1.Распаковать кэш GoogleEarth (можно извлекать не только картинки, а и все данные);
2.Экспортировать распакованный кэш GoogleEarth в KML.

Используя CacheMaster, можно создать свой kml-кэш, который затем можно просматривать в самом гугле. Без лимита на кэш в 2Гб.

Re: Google Earth

СообщениеДобавлено: 20 окт 2008, 21:47
Cowa
aleksey писал(а):zed
Разобрался с проекциями GoogleEarth и GoogleMaps на программном уровне, т.е. могу тайлы GE разжимать чтоб картинка не казалась сжатой (тайлы извлечённые GE_JPG_extractor-ом), если кто заинтересован, могу подкинуть подробную инфу.

Был бы очень признателен, а то очень давно пытаюсь одно преобразовать в другое.

Re: Google Earth

СообщениеДобавлено: 21 окт 2008, 09:40
zed
Думаю, в исходниках будет всё понятно, если что - спрашивайте.
Единственное замечание: не нашёл (плохо или не там искал?) точной формулы для расчёта параметра метр/градус для широты. Приближённая формула начинает давать ошибку в 1 и более пиксель начиная с 1 до примерно 8-го уровня зума, но на более высоких уровнях - всё точняк. Если вам вдруг попадётся на глаза точная формула - покажите её и мне.

Re: Google Earth

СообщениеДобавлено: 21 окт 2008, 20:59
Cowa
Спасибо за исходник. В принципе, все понятно. Я думал, что в GoogleEarth проекция немного посложнее. Все просто.
А тебе, я так понимаю, нужно получить соотношение метр/градус для GoogleMaps. Я у себя рассчитываю метр/пиксель (из чего можно получить и метр/градус если нужно). В этом случае, мне кажется будет проще сканировать(в твоей проге) картинку не по градусам, а по пикселям. Но это мое мнение :) . Меньше будет округлений.
Если интересно, то у меня соотношение метр/пиксель для широты считается так:
// Размер половины мировой карты в пикселях на уровне детализации Z (начиная от 1 до ... как в SAS.Планет)
size := 128*Ldexp(1,Z-1);
// метров на пиксель на широте Y градусов (от экватора от 0 до ~85 градусов в обе стороны).
MetrPics:=20016332.8/size*Cos(Y*PI/180); // 20016332.8 - не помню откуда взял, но тоже не точно

Поможет - буду рад.

P.S. Мне больше было бы интересно как пересчитываются градусы из проекции GoogleMaps в проекцию Яндекс-карт(уж не знаю, че там за проекция).

Re: Google Earth

СообщениеДобавлено: 21 окт 2008, 22:44
feya
P.S. Мне больше было бы интересно как пересчитываются градусы из проекции GoogleMaps в проекцию Яндекс-карт(уж не знаю, че там за проекция).

проекция та же меркатор, токо на элиипсоиде вот здесь есть описание функции - http://mapnav.spb.ru/site/e107_plugins/ ... p?13518.50
У мя подругому:
вот функции использующиеся в программе (2: какраз меркатор на элиипсоиде):
Код: Выделить всё
function GPos2LonLat(XY:TPoint;Azoom:byte;MT:PMapType):TExtendedPoint;
var zu,zum1,yy:extended;
begin
result.X:=((XY.x)-zoom[Azoom]/2)/(zoom[Azoom]/360);
case MT.projection of
  1: begin
      result.Y:=((XY.y)-zoom[Azoom]/2)/-(zoom[Azoom]/(2*PI));
      result.Y:=(2*arctan(exp(result.Y))-PI/2)*180/PI;
     end;
  2: begin
      result.Y:=((XY.y)-zoom[Azoom]/2)/-(zoom[Azoom]/(2*PI));
      result.Y:=(2*arctan(exp(result.Y))-PI/2)*180/PI;
      Zu:=result.y/(180/Pi);
      yy:=((XY.y)-zoom[Azoom]/2);
      repeat
       Zum1:=Zu;
       Zu:=arcsin(1-((1+Sin(Zum1))*power(1-MT.exct*sin(Zum1),MT.exct))/(exp((2*yy)/-(zoom[Azoom]/(2*Pi)))*power(1+MT.exct*sin(Zum1),MT.exct)));
      until (abs(Zum1-Zu)<MerkElipsK)or(isNAN(Zu));
      if not(isNAN(Zu)) then result.Y:=zu*180/Pi;
     end;
  3: begin
      result.y:=-((XY.y)-zoom[Azoom]/2)/(zoom[Azoom]/360);
     end;
end;
end;

function GLonLat2Pos(Ll:TExtendedPoint;Azoom:byte;MT:PMapType):Tpoint;
var z,c:real;
begin
result.x:=round(zoom[Azoom]/2+ll.x*(zoom[Azoom]/360));
case MT.projection of
  1: begin
      z:=sin(Ll.y*deg);
      c:=(zoom[Azoom]/(2*Pi));
      result.y:=round(zoom[Azoom]/2-0.5*ln((1+z)/(1-z))*c);
     end;
  2: begin
      z:=sin(Ll.y*deg);
      c:=(zoom[Azoom]/(2*Pi));
      result.y:=round(zoom[Azoom]/2-c*(ArcTanh(sin(ll.y*deg))-MT.exct*ArcTanh(MT.exct*sin(ll.y*deg))) )
     end;
  3: result.y:=round(zoom[Azoom]/2-ll.y*(zoom[Azoom]/360));
end;
end;