|
|
|
## Введение
|
|
|
|
За получение из Интернет и хранение карт в комплексе программ GaladrielMap отвечает программа GaladrielCache. В каталоге GaladrielCache находится каталог `mapsources/`, где лежать файлы описания источников карт. В этих файлах содержится вся необходимая информация для получения и использования каждой карты.
|
|
|
|
Файл описания источника карты создаётся пользователем в соответствии с документацией к GaladrielCache. Комплект поставки GaladrielMap не содержит никаких карт (кроме свободной карты береговой линии), также в комплекте поставки нет никаких файлов описания источников карт, кроме файлов для нескольких свободных карт. Все другие файлы описания источников карт, которые могут оказаться вместе с набором программ GaladrielMap, созданы пользователями.
|
|
|
|
|
|
|
|
Идеологически, GaladrielCache является кеширующим прокси-сервером. Это значит, что клиентское веб-приложение GaladrielMap (картплотер) обращается за картой по интернет-адресу, определённому в его конфигурации. Адрес может указывать непосредственно на интернет-ресурс, возвращающий карту, но нормально адрес указывает на GaladrielCache. Уже GaladrielCache обращается к интернет-ресурсу за картой, получает требуемое и отдаёт клиентскому приложению GaladrielMap, одновременно сохраняя полученное на своём сервере для дальнейшего использования. При повторном обращении к этой карте она не будет снова скачиваться из Интернета, а будет показана из локального хранилища. Доступ в Интернет для этого уже не нужен.
|
|
|
|
|
|
|
|
## Формат карт
|
|
|
|
GaladrielMap использует карты в виде мозаики квадратных картинок (тайлов), непрерывно покрывающих мир в соответствии с соглашениями, принятыми для [OpenStreetMap](https://en.wikipedia.org/wiki/Tiled_web_map):
|
|
|
|
|
|
|
|
* Тайлы имеют размер 256х256 точек
|
|
|
|
* На уровне масштабирования 0 весь мир отображается на одном тайле
|
|
|
|
* Каждый следующий уровень масштабирования крупнее предыдущего вдвое, так что кадый тайл предыдущего масштаба покрывается четырьмя тайлами следующего
|
|
|
|
* Начало координат находится в точке −180 +85.0511, нумерация тайлов идёт слева направо, сверху вниз
|
|
|
|
* Проекция -- [WGS 84 / Pseudo-Mercator (Web Mercator)](https://epsg.io/3857) или [WGS 84 / World Mercator](https://epsg.io/3395)
|
|
|
|
|
|
|
|
Тайлы хранятся в файловой структуре в соответствии с соглашением [OSM slippy map](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames):
|
|
|
|
`название_карты/масштаб/x/y.расширение`
|
|
|
|
|
|
|
|
Однако, GaladrielCache позволяет пользователю заменить механизм получения тайла из локального хранилища - своим или имеющимся. В составе GaladrielCache есть средство для работы с (растровыми) картами в формате [MBTiles](https://docs.mapbox.com/help/glossary/mbtiles/). Пользователь может использовать это средство для отображения имеющейся у него карты в формате MBTiles. Детально это описано в документации к файлу описания источника карты GaladrielCache.
|
|
|
|
|
|
|
|
Основной формат тайлов в GaladrielCache -- растровые, т.е., тайл представляет собой просто картинку в одном из обычных графических форматов. Однако, ничего не мешает использовать векторные тайлы -- всё необходимое для их поддержки есть. Однако, большое разнообразие форматов, большой объём и в целом отсутствие стандартов делают применение векторных тайлов нецелесообразным.
|
|
|
|
Что касается не-тайловых векторных форматов -- пока их поддержка отсутствует.
|
|
|
|
|
|
|
|
## Файл описания источника карты
|
|
|
|
В файле описания источника карты содержится информация о способе получения карты из сети Интернет или локального файла, включая не только адрес в Интернет, но и какие-то дополнительные процедуры для обеспечения успешности получения, если надо. Кроме того, в файле содержатся параметры для обхода блокирования скачивания карты, если таковое применяется, и различная дополнительная информация, как то:
|
|
|
|
* срок актуальности тайла. По истечении этого срока тайл будет снова получен из Интернет.
|
|
|
|
* список "мусорных" тайлов: тайлов, которые сохранять не надо. Например, некоторые карты не покрывают весь мир, но для не покрытых территорий их сервер отдаёт картинку - заполнитель. Хранить такую картинку бессмысленно, а место она занимает.
|
|
|
|
* информация для контроля доступности источника карты. Это хеш-сумма определённого тайла. Имеется специальная программа, которая из каждого файла описания источника карты читает эту информацию и пытается получить от источника этот тайл. Если не удаётся -- она заносит сообщение в специальный журнал. Предполагается, что эта программа периодически запускается посредством cron. Однако, пользователь должен сам настроить запуск и сам следить за журналом.
|
|
|
|
* процедура обработки тайла перед показом, если необходимо. Процедура может быть любой, а одно из полезных применений -- замена одного цвета на прозрачный. Если таким образом заменить цвет моря на топокарте на прозрачный, то эту топокарту можно показать поверх морской карты, и получить морскую карту с подробной береговой обстановкой.
|
|
|
|
|
|
|
|
## Обслуживание хранилища
|
|
|
|
В составе GaladrielCache имеется утилита для очистки хранилища от "мусорных" тайлов. Её можно использовать для очистки всего хранилища:
|
|
|
|
`php clearCache.php`
|
|
|
|
или какой-то одной карты:
|
|
|
|
`clearCache.php MapName`
|
|
|
|
Можно также удалить и устаревшие тайлы, срок актуальности которых истёк. Для этого надо добавить в конце параметр `fresh`:
|
|
|
|
`clearCache.php fresh` или `clearCache.php MapName fresh` |