SASGIS

Веб-картография и навигация

HTTP-сервер-обменник для тайлового кеша

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

Модератор: Tolik

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение zed » 17 дек 2008, 10:53

Это ж полумеры, и дополнительный сторонний закрытый софт.
Не лучше ли научить SAS работать с локальным веб-сервером (а дальше каждый сможет научить его делать то или иное в силу только своей фантазии и особенностей того или иного языка-обработчика, а не ограничений того или иного закрытого софта)?

HC - такая же "полумера" как и локальный веб-сервер (Апач). Всему, касаемо наших задач, чему можно научить Апач - можно научить и HC (скрипты LUA + сторонние dll). Какие вам видятся "ограничения" закрытого софта - HC?
Мне же, наоборот, видятся плюсы:
-не нужно править SAS;
-даже если SAS "научить" работать с веб-сервером, то и в этом случае, HC без проблем обработает и эти "чужие" запросы :)
А вообще, что лучше использовать - решает, конечно, каждый сам для себя. Но пока что выбора нет - и пока не появится глубоко заинтересованный в Апаче юзер, и пока он не возьмёт всё в свои руки - выбора не будет...
Дак за чем дело встало?

Дело встало за тем КТО будет "учить" сервер и КТО будет готовить соответствующий код для SAS. А бросать ссылки и давать "умные" советы всегда найдутся...
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение Vasya » 17 дек 2008, 11:06

Ну дык, давай те нарисуем примерное ТЗ, а то забабахаем лебедя, рака и щуку, и потом будем холиварить по этому поводу.
Аватара пользователя
Vasya
Советчик
 
Сообщения: 266
ICQ: 137791
Зарегистрирован: 14 июл 2008, 13:06
Откуда: Одесса
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение vdemidov » 17 дек 2008, 11:29

А кто-то представляет какой набор фунций должен поддерживать сервер? Ну то что должен быть метод получения одного конкретного тайла это понятно. А еще какие? Просто пока не понятен каой интерфейс реализовывать, даже не зацикливаясь БерклиДБ или что-то другое использовать.
Вообще стоит подумать какой интерфейс должен быть у модуля, который будет отвечать за хранение тайлов вынести эту функциональность в отдельную ДЛЛ и там уже прикручивать как плагины такие длл-ки с разными способами хранения.

Нужно:
1. Добавление тайла
2. Получение конкретного тайла
3. Проверка наличия группы тайлов (что бы не запрашивать каждый отдельно)

Что еще?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение svp » 17 дек 2008, 12:48

Кто-то завёл речь о ТЗ.
vdemidov писал(а):Нужно:

    1. Запрос с сервера тайла по типу карты, зуму и координатам.
    2. Поддержка урл с параметрами вида t=1&z=14&x=1241&y=843&v=13&f=19
    где:
      t -- тип карты;
      v -- версия тайла* (если версия опущена, то берётся максимальная, если указана, то берутся тайлы с версией не большей указанной);
      f -- масштаб, для которого запрашивается карта заполнения. Если параметр отсутствует, то возвращается тайл указанного параметром t слоя, если параметр указан, то он определяет масштаб, для которого нужно возвратить тайл карты заполнения.
    3. Аплоадинг тайла на локальный веб сервер.
    4. Поддержка запроса на наличие тайла.
    (Эта функция, думаю, будет редко использоваться: для отрисовки карты заполнения можно пользоваться параметром f, а для определения необходимости загрузки тайла из интернета можно просто пытаться получить его сначала с локального сервера).
    5. Сервер должен уметь возвращать XML со списком и описаниями имеющихся кешей, их УРЛ-ы в интернете.
    6. Желательно, чтобы сервер мог показывать список кешей ещё и в читабельном виде.

Пояснения:
*Версия тайла не связана с версией на сервисе. При обнаружении в интернете тайла, отличного от имеющегося в кеше, новый тайл закачивается и ему назначается инкрементированная версия.

* Карта заполнения должна возвращаться тоже в виде тайлов. Например текущий масштаб Z=12 и нужно построить карту заполнения для масштаба F=19. Размер тайла заполнения будет равен 2^(f-z)*2^(f-z) = 2^7 * 2^7 = 128*128.
Тайлы карты заполнения можно возвращать, например, в сжатых монохромных гифах.

На будущее:
KML-слои (WIKI, Panoramio и т.д.) следует, очевидно, хранить не в тайловой структуре, а в базе данных (например Berkeley XML), в виде отдельных объектов. Такие БД можно проиндексировать по ключевым словам и искать/фильтровать объекты по тегам. С локального сервиса их тоже можно запрашивать не по тайлам, а как они запрашиваются из интернета по баундсам (двум координатным парам).

P.S.
1. Если кто-то возьмётся воплощать, то я с удовольствием детализирую приведённые выше пункты и требования=).
2. Надеюсь никто не будет требовать ТЗ по ГОСТу?=) Оно. конечно, можно было бы, но это пустая трата времени.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение Parasite » 17 дек 2008, 14:24

svp писал(а):v -- версия тайла*
Пояснения:
*Версия тайла не связана с версией на сервисе. При обнаружении в интернете тайла, отличного от имеющегося в кеше, новый тайл закачивается и ему назначается инкрементированная версия.

Как будем отрабатывать некачественные\битые\просто левые тайлы? Например, закачка тайла прошла с ошибкой, размер и соответственно CRC будут отличаться. Либо скрипт у кого-то локально глюкнул и начал качать несколько не те тайлы, что нужно, и у нас начал появляться кусок океана посреди Садового Кольца (у меня так было как-то раз в какой-то из ранних версий САСа). Наши действия?

На Гугле это видно визуально (сорри за тавтологию), и опять же если версия кэша меняется - то она меняется разово на всех относящихся к данной версии тайлах. Присваивать же номер версии каждому отличному от других тайлу - получится веселенький такой зоопарчик, особенно если выйти с локалхоста на просторы многопользовательского режима (в т.ч. и на запись в базу).

Например, та же Москау может быть (у нас) довольно "высоких" версий так как будет пользоваться "повышенным спросом" и соответственно будет иметь "повышенный шанс еррорности", а к примеру Усть-Зажопинск может быть вообще в "единичной" разово укачанной версии - несмотря на то, что по гуглю это будут тайлы ОДНОЙ гуглеверсии. Соответственно при выводе уже нашей карты "последней версии" - мы увидим Москау, но не увидим Зажопинска (а на гугле как раз будет всё ОК).

Предлагаю проработать этот момент. Мысли в студию.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 460 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение svp » 17 дек 2008, 15:17

Parasite писал(а):Как будем отрабатывать некачественные\битые\просто левые тайлы? Например, закачка тайла прошла с ошибкой, размер и соответственно CRC будут отличаться. Либо скрипт у кого-то локально глюкнул и начал качать несколько не те тайлы, что нужно, и у нас начал появляться кусок океана посреди Садового Кольца (у меня так было как-то раз в какой-то из ранних версий САСа). Наши действия?

Битые и несоответствующие CRC файлы в кеш сохранять не следует ни при каких обстоятельствах.
Если косячит алгоритм закачки и неправильно именует тайл, то эта проблема к версии относится слабо. Если версий не учитывать вовсе, то старого варианта не останется и придётся перекачивать ошибочные участки. С версией (по приведённой выше схеме) достаточно удалить тайлы косой версии в локально накосяченом участке.
Опять же можно строить тайлы карты заполнения с учётом версий и быстро находить потенциально битые участки по номеру версии.
По логам следовало бы, конечно, вычислить ещё пользователя писавшего такие тайлы и попросить его не хулиганить. Чтобы лог не достиг эпических размеров определить понятие сессии и запись тайлов производить в пределах этой сессии. Логировать. соответственно, сессию вместе с баундами, в пределах которых аплоадились тайлы в этой сесссии.

Итак, добавляем в ТЗ:
    -- Поддержка сессии записи в кеш. Хранить за сессией IP клиента (в идеале ещё ID зарегистрированного пользователя), ректангл координат загруженных тайлов, даты начала/конца сессии. Определить таймаут на автозакрытие сессии.

Parasite писал(а):На Гугле это видно визуально (сорри за тавтологию), и опять же если версия кэша меняется - то она меняется разово на всех относящихся к данной версии тайлах. Присваивать же номер версии каждому отличному от других тайлу - получится веселенький такой зоопарчик, особенно если выйти с локалхоста на просторы многопользовательского режима (в т.ч. и на запись в базу).

Именно так. Даже если тайлы на гугле не отличаются от старых, версия их уже новая. Хранить много копий одних и тех же данных нерационально. Версии же нужны. Например недавно (в пределах нескольких месяцев) обновились детальные снимки Парижа. Причём старые снимки были качественнее и с лучшей цветопередачей. Они лучше годились для печати. Были просто красивее.
По данным с гугла отличить старые это тайлы или новые, по ходу, никак нельзя.

При отсутствии параметра "v", повторюсь, выдавать тайлы максимальных версий. При указании конкретной версии следует выдавать тайлы с версиями НЕ БОЛЬШИМИ указанной. То есть, если нет тайла с указанной версией, то выдаём тайл с ближайшей меньшей версией.

Parasite писал(а):Например, та же Москау может быть (у нас) довольно "высоких" версий так как будет пользоваться "повышенным спросом" и соответственно будет иметь "повышенный шанс еррорности"

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

Я там выше дважды писал, что при запросе тайла i-ой версии сервер должен возвращать тайл с максимальной версией, но меньшей либо равной i. То есть Зажопинск будет виден наравне с Москвой. А если версия не указана. то по умолчанию считать её равной максимально возможному числу. Вот и всё.

Проблема может возникнуть только для сформированных слоёв. Однако в правилах сервера следует запретить закачку на него сформированных слоёв. Формировать слои должны админы.
При хранении тайла, помимо версии, надо хранить битовый флаг, указывающий на то, сформирован ли он, или закачан, сформированные тайлы от клиентов не принимать. Хотя эту политику, пожалуй, стоит обсудить. В крайнем можно делать приблизительное сравнение распакованных в битмапы тайлов на предмет определения различаются ли их исходники.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение vdemidov » 17 дек 2008, 15:48

svp писал(а):Битые и несоответствующие CRC файлы в кеш сохранять не следует ни при каких обстоятельствах.
Если косячит алгоритм закачки и неправильно именует тайл, то эта проблема к версии относится слабо.

Как вы собираетесь отличать битие тайлы от небитых?
А тем более от тех которые запихнуло неправильное имя?
По поводу версий: Поулчается нужна отдельная функция получения номера последней версии тайла. Но даже в этом случае у соседних тайлов, закачанных одновременно, могут быть разные версии. Смысл версии тайла для внешнего пользователя при штатной работе становиться исчезающе мал.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение svp » 17 дек 2008, 16:05

vdemidov писал(а):Как вы собираетесь отличать битие тайлы от небитых?

При закачке их из интернета нужно грамотно обрабатывать ошибки и проверять CRC. В случае подозрения на проблемы не отправлять такие тайлы на локальный сервер.

vdemidov писал(а):А тем более от тех которые запихнуло неправильное имя?

А как с такими ситуациями удаётся бороться сейчас? Никак, кроме визуального анализа того, что закачано на предмет косяков. Только в сегодняшнем кеше Планеты приходится эти косые тайлы сначала находить и удалять (вручную), а потом в ручную же говорить проге, чтобы она качнула их заново.
При наличии версий тайлов мы просто построим локальную карту заполнения конкретно для той версии, в которой попались косые тайлы, посмотрим, все ли они косые, и удалим единоразово. Перезакачивать ничего не надо.

vdemidov писал(а):По поводу версий: Получается нужна отдельная функция получения номера последней версии тайла.
Пожалуй нужна. Но для каждого тайла её вызывать не надо. Она нужна только для анализа проблем связанных с битыми и неправильно позиционированными тайлами.

vdemidov писал(а): Но даже в этом случае у соседних тайлов, закачанных одновременно, могут быть разные версии.

Это может быть только в случае. когда при ранних закачках были вышеперечисленные косяки. Каждый кто заметит такие косяки, напишет админу и он удалит все тайлы битой версии в локальных окрестностях. Естественно, что тайлы, с версиями выше удалённой понизят свои версии.

vdemidov писал(а):Смысл версии тайла для внешнего пользователя при штатной работе становиться исчезающе мал.

Как это мал?! Можно было бы увидеть старые гугловские снимки и новые по желанию!
Где я не прав?
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение vdemidov » 17 дек 2008, 16:38

svp писал(а):При закачке их из интернета нужно грамотно обрабатывать ошибки и проверять CRC. В случае подозрения на проблемы не отправлять такие тайлы на локальный сервер.

Ну допустим серверу неизвестно как там клиент эти ошибки обрабатывал и, по-хорошему, сервер должен это сам как-то уметь проверять. Но это действительно в далеком будущем, пока не стоит заморачиваться.

svp писал(а):Только в сегодняшнем кеше Планеты приходится эти косые тайлы сначала находить и удалять (вручную), а потом в ручную же говорить проге, чтобы она качнула их заново.
При наличии версий тайлов мы просто построим локальную карту заполнения конкретно для той версии, в которой попались косые тайлы, посмотрим, все ли они косые, и удалим единоразово. Перезакачивать ничего не надо.

Ну в итоге все остается так же вручную, только можно проще получить старую версию тайла. Да и на границах обновленных областей версия будет глючить. Например какая-то область обновляется чаще, чем окружающие ее тайлы. Может лучше тогда уже в запросе просить не конкретную версию, а версию тайла отстоящую от последней на сколько-то версий?

svp писал(а):Пожалуй нужна. Но для каждого тайла её вызывать не надо. Она нужна только для анализа проблем связанных с битыми и неправильно позиционированными тайлами.

Согласен, что каждый раз вызывать не надо, но должна быть возможность вызвать ее для любого конкретного тайла.

Плюс, раз пошел такой разговор, нужна функция для сообщения серверу о преблемах с определенными тайлами.
И нужны функции для удаления определеной версии тайла со сдвигом более новых.

Но мне кажеться, что все-таки необходимость работы с версиями тайлов нужна только для програмного интерфейса администрирования и для внутренней организации сервера, а для обычного клиента это избыточно. Они только добавять сложности в реализации клиента. Редкие случаи когда старые версии лучше новых, IMHO того не стоят.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Использование в Sas.Планета кеша в формате Berkely

Сообщение svp » 17 дек 2008, 16:55

vdemidov писал(а):Плюс, раз пошел такой разговор, нужна функция для сообщения серверу о преблемах с определенными тайлами.
И нужны функции для удаления определеной версии тайла со сдвигом более новых.

Но мне кажеться, что все-таки необходимость работы с версиями тайлов нужна только для програмного интерфейса администрирования и для внутренней организации сервера, а для обычного клиента это избыточно. Они только добавять сложности в реализации клиента. Редкие случаи когда старые версии лучше новых, IMHO того не стоят.


Ничего этого клиенту не нужно. Клиента менять практически не придётся. Только смотреть в ещё одно хранилище между локальным кешем и интернетом. Всё.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.

Пред.След.

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

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

Сейчас этот форум просматривают: TSA и гости: 3