Скачиваем дистрибутив модуля mod_tile для apache2 и его бэкенд - демон renderd. mod_tile работает вместе с renderd. Когда браузер пользователя запрашивает тайл у веб-сервера apache2, запрос перенаправляется модулю mod_tile. Если mod_tile находит в кэше нужный тайл, и судя по метаинформации и настройкам кэширования, он не просрочен, mod_tile просто передаёт его apache2. Если же необходимый тайл отсутствует или просрочен, тогда mod_tile обращается по UNIX-сокету к renderd, чтобы тот отрисовал необходимый тайл, разместил его в файловой ситсеме и доложил о готовности тайла.
Скачиваем исходники модуля и демона:
$ svn co http://svn.openstreetmap.org/applications/utils/mod_tile/Устанавливаем всё необходимое для его сборки:
# apt-get install debhelper apache2-mpm-prefork apache2-threaded-dev libmapnik2-dev autoconf automake m4 libtoolСобираем модуль и демон, и устанавливаем их:
$ cd mod_tile $ dpkg-buildpackage -B -rfakeroot -us -uc $ cd .. # dpkg -i renderd_0.4-10~oneiric1_amd64.deb # dpkg -i libapache2-mod-tile_0.4-10~oneiric1_amd64.debРедактируем файл конфигурации mod_tile /etc/apache2/sites-enabled/tileserver_site: пишем почтовый ящик администратора веб-сервера в опцию ServerAdmin, комментируем опции ServerName, ServerAlias.
Я также поменял порт с 80 на 8080 в опции VirtualHost, поскольку у меня Apache2 будет выступать в роли бэкэнда для более лёгкого сервера Lighttpd. Для этого я поменял порт Apache2 в файле /etc/ports.conf, в опциях NameVirtualHost и Listen.
Теперь нужно настроить renderd. Для этого откроем файл /etc/renderd.conf и поменяем значение опции plugins_dir в секции [mapnik] с /usr/lib/mapnik/0.7/input на /usr/lib/mapnik/2.0/input
Теперь можно перезапустить apache2 и renderd, чтобы их настройки вступили в силу:
# /etc/init.d/apache2 restart # /etc/init.d/renderd restartЯ также подключил модуль mod_proxy в файле конфигурации Lighttpd /etc/lighttpd/lighttpd.conf:
server.modules += ( "mod_proxy" ) proxy.server = ( "/osm/" => ( ( "host" => "127.0.0.1", "port" => 8080 ) ) )И перезапустил веб-сервер:
# /etc/init.d/lighttpd restartТеперь, если всё сделано правильно, система должна заработать. Для того, чтобы убедиться в правильности настроек, поправим адрес сервера на тестовой странице /var/www/osm/slippymap.html - заменим с localhost на внешнее имя сервера servername.tld. Теперь в браузере переходим на страницу http://servername.tld/osm/slippymap.html и видим карту прямо из недр базы данных:
На этом настройка тайлового сервера закончена.
8 комментариев:
Здравствуйте! Собрал все по инструкции. Открываю карту по: http://192.168.0.7/osm/slippymap.html. Все вроде загружается, кроме тайлов!
GET http://localhost/osm/11/1255/619.png 404 (Not Found) OpenLayers.js:446
Cross-origin image load denied by Cross-Origin Resource Sharing policy.
Каким образом можно решить эту проблему!?
Кстати, можете подсказать, где взять:
http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/10m-populated-places.zip http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m-admin-0-boundary-lines.zip !
Под данным путям таких файлов уже нет. Я нашел похожие на них файлы:
http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/
http://www.naturalearthdata.com/downloads/110m-cultural-vectors/110m-admin-0-boundary-lines/ !?
Но они ли это?
Спасибо.
1. В исходном коде slippymap нужно найти ссылки на localhost и заменить их на 192.168.0.7.
2. Это те самые файлы. Если посмотрите ссылки на скачивание файлов, то увидите, что они точно такие же. Видимо на этом сайте проверяют referrer, то есть откуда пришёл пользователь, и не дают скачивать тем, кто пришёл с другого сайта.
Здравствуйте! Делал по вашей инструкции. Почему то получилось вот так - http://5.187.4.15/osm/slippymap.html
Егор, проверьте правильность настройки mapnik - у вас не отрисовываются даже береговые линии. Проверьте, что границы мира и береговые линии скачаны, в файле settings.xml прописана настройка world_boundaries, а веб-сервер имеет право читать файлы из указанного в настройке каталога.
Все сделал по вашей схеме, но тайлы не отрисовываются((Пишет, что не может найти ....404 (Not found). localhost я изменил на адрес своего сервера.При перезагрузке apache пишет : Could not determinate host name of server to configure tile-json request....
>При перезагрузке apache пишет : Could not determinate host name of server to configure tile-json request....
Директиву ServerName в настройках mod_tile закоментировали?
Здравствуйте, подскажите пожалуйста, что делать если я загружаю карту в БД не при помощи утилиты osm2pgsql, а при помощи imposm. Эта утилита создает другую структуру БД отличную от osm2pgsql. Я так понимаю, чтобы все работало нужно изменить файл стиля для mapnik (osm.xml) или как-то его сгенерировать...как? заранее благодарен.
imposm никогда не пробовал, плучасовое гугление на тему как подружить imposm и mapnik результатов не принесло. Подсказать ничего не могу. Попробуйте сделать так, как написано в статье.
Отправить комментарий