Теперь карты егойные кешируются.
Стандартная процедура из убунты - редирект из сквида на апач.
Апач вызывает скрипт докачки если не находит нужной картинки.
Плохо, конечно, что не проверяются актуальность карт..
В принципе задача достаточно проста.
Это можно делать в фоне - когда траффик или дешёвый или бесплатный :)
Вроде капчу периодически вылезающую научился правильно обнаруживать и перенаправлять юзера на страницу распознования :)
Теперь со всех сайтов где юзается карта можно брать данные из кеша :)
Здорово. Правда и кеш расположен неоптимально - разбивка только по масштабу.
Зато я научился преобразовывать адрес картинки в формате xyz в формат tXXXX.
Главное было понять суть координат.
Начинается с "t" (z=0). Это понятно.
Каждое приближение увеличивает разрешение в 2 раза.
Итого 4 квадрата на каждое приближение. Квадраты называются по часовой стрелке - q,r,s,t;
Итого первое приближение:
tq, trКоординаты xy такие: (z=1)
tt, ts
tq (x=0, y=0), tr (x=1, y=0), ts (x=1, y=1), tt(x=0,y=1).
Выбираем, например, квадрат tr.
Он разбивается на квадрат:
trq, trrКоординаты xy такие: (z=2)
trt, trs
trq (x=1<<1|0=2, y=0), trr (x=1<<1|1=3, y=0), trs (x=1<<1|1=3, y=1), trt (x=1<<1|0=2,y=1).
И так далее.
Как обычно - процедурки на перле чтобы это делать:
Вот вроде и всё что я хотел сказать :) А теперь домой.. По разведанным местам :)
sub XY2T{my $r='';my ($x,$y,$z)=@_;
for (my $i=0;$i<$z;$i++){my $a=($y&1)<<1|($x&1);$x>>=1;$y>>=1;$_=$a.$_}
tr/0123/qrts/;"t$r"}
sub T2XY{my $r=$_[0];my ($x,$y,$z)=(0,0,length($r)-1);tr/qrts/0123/;
for (my $i=0;$i<$z;$i++){my $a=substr($r,$i+1,1);$x=$x*2+($a&1);$y=$y*2+($a>>1);}}
printf "Str: %s\n", XY2T(20007,10426,15);
printf "Dst: x=%u, y=%u, z=$u\n", T2XY('trtqsrrqtqsttrsr');
Комментариев нет:
Отправить комментарий