Принцип хранения кеша

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модераторы: Tolik, zed

Принцип хранения кеша

Сообщение Kostyan » 12 фев 2009, 12:41

Подскажите плиз по принципу хранения кеша.
Хочу отдавать его в сеть через HTTP сервер, набрасал простенький php скриптик для отдачи картинок
Код: Выделить всё
<?php
$zoom= isset($_GET['z']) ? $_GET['z'] : "";
$x= isset($_GET['x']) ? $_GET['x'] : "";
$y= isset($_GET['y']) ? $_GET['y'] : "";
$folder= isset($_GET['fold']) ? $_GET['fold'] : "sat"; //Тип кеша
$tx=$x/1000;
$ty=$y/1000;
if ($tx>1){$t=intval($x/1000);}else{$tx=0;}
if ($ty>1){$ty=intval($y/1000);}else{$ty=0;}
$img="./cache/".$folder."/z".$zoom."/".$tx."/x".$x."/".$ty."/y".$y.".jpg";
header("Location: http://СЕРВЕР/map/$img");
exit();
?>

При зуме до 16-ти все отлично работает, при большем все куда-то съезжает (/z16/18/x19342/7/y7982.jpg) или (/z17/37/x38824/...)
Это на Спутнике Гугла, На DGsat при большем зуме эти расхождение еще больше.
Последний раз редактировалось Kostyan 12 фев 2009, 13:39, всего редактировалось 1 раз.
Kostyan
Новичок
 
Сообщения: 3
Зарегистрирован: 12 фев 2009, 10:18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Принцип хранения кеша

Сообщение svp » 12 фев 2009, 13:05

Не проверял ещё, но что-то мне подсказывает что здесь:
$tx=$x/1000;
$ty=$y/1000;

и здесь
if ($tx>1){$t=intval($x/1000);}else{$tx=0;}
if ($ty>1){$ty=intval($y/1000);}else{$ty=0;}

надо делить на 1024=)
Аватара пользователя
svp
Советчик
 
Сообщения: 446
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Принцип хранения кеша

Сообщение svp » 12 фев 2009, 13:37

Точно там 1024.
Почитайте здесь viewtopic.php?f=2&t=23&start=0#p470
Аватара пользователя
svp
Советчик
 
Сообщения: 446
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Принцип хранения кеша

Сообщение Kostyan » 12 фев 2009, 13:39

спс, именно на 1024 и надо делить. Итого получаем:
Код: Выделить всё
<?php
$zoom= isset($_GET['z']) ? $_GET['z'] : "";
$x= isset($_GET['x']) ? $_GET['x'] : "";
$y= isset($_GET['y']) ? $_GET['y'] : "";
$folder= isset($_GET['fold']) ? $_GET['fold'] : "sat"; //Тип кеша
$tx=$x/1024;
$ty=$y/1024;
if ($tx>1){$tx=intval($tx);}else{$tx=0;}
if ($ty>1){$ty=intval($ty);}else{$ty=0;}
$img="./cache/".$folder."/z".$zoom."/".$tx."/x".$x."/".$ty."/y".$y.".jpg";
header("Location: http://ВАШ_СЕРВЕР/map/$img");
exit();
?>
Kostyan
Новичок
 
Сообщения: 3
Зарегистрирован: 12 фев 2009, 10:18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Принцип хранения кеша

Сообщение svp » 12 фев 2009, 13:44

А вот здесь:
$tx=$x/1024;
$ty=$y/1024;
if ($tx>1){$tx=intval($tx);}else{$tx=0;}
if ($ty>1){$ty=intval($ty);}else{$ty=0;}

разве нельзя проще? Вот так:
Код: Выделить всё
$tx=intval($x/1024);
$ty=intval($y/1024);
Аватара пользователя
svp
Советчик
 
Сообщения: 446
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Принцип хранения кеша

Сообщение Kostyan » 12 фев 2009, 14:46

можно, ток зачем выполнять ф-ю при tx,ty < 1, это в данном примере эта ф-я нересурсоемкая, а если она будет есть кучу ресурсов?
да и правильней тоди будет:
Код: Выделить всё
if ($tx>1024){$tx=intval($x/1024);}else{$tx=0;}
if ($ty>1024){$ty=intval($y/1024);}else{$ty=0;}
Kostyan
Новичок
 
Сообщения: 3
Зарегистрирован: 12 фев 2009, 10:18
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Принцип хранения кеша

Сообщение svp » 12 фев 2009, 15:16

Правильнее будет так:
Код: Выделить всё
$tx=$x % 1024;
$ty=$y % 1024;

И на таких вещах ресурсы экономить в ущерб читабельности, прозрачности и простоте -- это не правильно.
Из-за таких неоправданных стремлений экономить на спичках получаются ошибка, как в этом вашем приведённом примере. Он абсурден, коллега:
Kostyan писал(а):
Код: Выделить всё
if ($tx>1024){$tx=intval($x/1024);}else{$tx=0;}
if ($ty>1024){$ty=intval($y/1024);}else{$ty=0;}

Ну сами подумайте=).
Аватара пользователя
svp
Советчик
 
Сообщения: 446
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Принцип хранения кеша

Сообщение Parasite » 13 фев 2009, 11:56

svp писал(а):ресурсы экономить в ущерб читабельности, прозрачности и простоте -- это не правильно.

Вам (без привязки к именно вышеописанной ошибке предыдущего оратора), извините - чтобы сорцы прозрачно читались, или чтоб маленькое и работало быстро? :)
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Аватара пользователя
Parasite
Администратор
 
Сообщения: 4532
ICQ: 15819243
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 57 раз.
Поблагодарили: 214 раз.

Re: Принцип хранения кеша

Сообщение svp » 13 фев 2009, 15:42

Parasite писал(а):Вам (без привязки к именно вышеописанной ошибке предыдущего оратора), извините - чтобы сорцы прозрачно читались, или чтоб маленькое и работало быстро?

Разности в скорости работы в данном случае не будет никакой. PHP - это скриптовый язык. Программа на нём не компилируется в машинный код , а следовательно вариант предложенный автором будет и менее читабельным, и больше (по объёму), и медленнее (лишние проверки и строчки -- лишняя работа транслятора), а если предположить, что, возможно, этот код когда-нибудь частью чего-то большего, то непрозрачность его (с повышением вероятности ошибки) может и вовсе привести к неработоспособности.
Всё должно быть сообразно. Как пример: в данном случае имеет место оптимизация автомобиля для сверхзвуковых скоростей, коих он не достигнет ввиду своих конструктивных особенностей и в назначения.
Аватара пользователя
svp
Советчик
 
Сообщения: 446
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.

Re: Принцип хранения кеша

Сообщение Parasite » 26 фев 2009, 13:57

Господа, пока вы ломаете копья - небольшая приблуда под названием SatMap уже умеет качать тайлы и класть в базу SQLlite, а также работать с оззевскими файлами .wpt... Проверил - работает довольно шустро, и даже в гуглебан не залетело... но экспорта\импорта с САСом напрямую - нет. Намекнул автору, автор обещался прикрутить формат САС-кэша вскорости.

http://forum.ru-board.com/topic.cgi?for ... 70&start=0

PS: дизайн интерфейса и главного окна тулзы мне неуловимо что-то напоминает, да.... ;)
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Аватара пользователя
Parasite
Администратор
 
Сообщения: 4532
ICQ: 15819243
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 57 раз.
Поблагодарили: 214 раз.

След.

Вернуться в SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron