Сырая информация по теме:
http://wiki.openstreetmap.org/wiki/Tile_usage_policy http://wiki.openstreetmap.org/wiki/Export http://wiki.openstreetmap.org/wiki/Planet.osm http://gis-lab.info/projects/osm_dump/index.html http://tilecache.org/ http://wiki.openstreetmap.org/wiki/Ubuntu_tile_server
Приблизительный план действий
- Скачать данные с OSM
- Изучить какие есть сервера и рендереры
- Поднять это дело на линуксе в виртуалке
Задача номер один - определиться с рендером. Нашла вот что http://switch2osm.org/serving-tiles/manually-building-a-tile-server/ - решила повторить у себя. Немного теории. Тайл-сервер состоит из нескольких компонентов:
1 - mod_tile - модуль апача, служит для кэширования ячеек и решает
надо ли рендерить эту ячейку (в случае если она новая или имеющаяся
устарела) 2 - renderd - обеспечивает приоритет при массовой нагрузке,
ответ при запросе и сглаживание нагрузки при большом количестве
запросов 3 - mapnik - библиотека, которая осуществляет рендеринг и использется renderd-ом. 4 - osm2pgsql - импортирует данные OSM в базу postgreSQL 5 - postgresql/postgis - сервер базы данных Последовательность обращений и взаимосвязи между компонентами такая:
Мы выкачали данные непосредственно с OSM - при помощи osm2pgsql
перегнали скачанные данные (архив bz2 на самом дел) в базу (и сложили
там). Затем при обращении через веб-морду к апачу он обращается к
mod_tile, тот в свою очередь смотрит в свой кэш, смотрит есть ли уже
данные и не устарели ли они. Если данные есть, то апач возвращает их из
кэша, если нет, то лезет к renderd за данными. Renderd при помои
библиотеки mapnik тянет данные из базы (по координатам точки и
масштабу?) и данные из базы превращает в картинку. А теперь все по полочкам, по пунктам, по порядку. Ubuntu 10.04 Tekinsoft_tile_server2
- Установка зависимостей для постгри:
tile@ubtail:~$ sudo apt-get install subversion git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev
libgeos-dev libpq-dev libbz2-dev proj screen munin-node munin htop
- Установка postgresql/postgis из репозитория убунты:
tile@ubtail:~$ sudo apt-get install postgresql-8.4-postgis postgresql-contrib-8.4 postgresql-server-dev-8.4
- создание базы данных, вышли из суперюзера
tile@ubtail:~$ $ sudo -u postgres -i
postgres:~$ createuser <username=tile> !yes for superuser role
postgres:~$ createdb -E UTF8 -O <owner=tile> <dbname=gis>
postgres:~$ createlang plpgsql gis
postgres:~$ exit
- устанавливаем PostGIS на postgresql базу данных.
от обычного пользователя
tile@ubtail:~$ psql -f /usr/share/postgresql/8.4/contrib/postgis.sql -d gis
много сток оканчивающиеся
...
CREATE FUNCTION
COMMIT
...
DROP FUNCTION
- Выдаем права на вновь созданную базу базу нашему пользователю (psql)
tile@ubtail:~$ psql -d gis -c "ALTER TABLE geometry_columns OWNER TO username; ALTER TABLE spatial_ref_sys OWNER TO username;"
*tile$ (не должно быть никаких ошибок)*
- Установка osm2pgsql из исходников
mkdir ~/src
cd ~/src
svn co http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/
cd osm2pgsql
./autogen.sh
./configure
make
sudo make install
psql -f /usr/local/share/osm2pgsql/900913.sql -d gis
- Установка библиотеки Mapnik
tile@ubtail:~$ sudo apt-get install libltdl3-dev libpng12-dev libtiff4-dev libicu-dev libboost-python1.40-dev python-cairo-dev
python-nose libboost1.40-dev libboost-filesystem1.40-dev libboost-iostreams1.40-dev libboost-regex1.40-dev
libboost-thread1.40-dev libboost-program-options1.40-dev libboost-python1.40-dev libfreetype6-dev libcairo2-dev libcairomm-1.0-dev
libgeotiff-dev libtiff4 libtiff4-dev libtiffxx0c2 libsigc++-dev libsigc++0c2 libsigx-2.0-2 libsigx-2.0-dev libgdal1-dev
python-gdal imagemagick ttf-dejavu
tile@ubtail:~/home$ mkdir ~/src
cd ~/src
git clone git://github.com/mapnik/mapnik
cd mapnik
git branch 0.7 origin/0.7.x
git checkout 0.7
python scons/scons.py configure INPUT_PLUGINS=all OPTIMIZATION=3 SYSTEM_FONTS=/usr/share/fonts/truetype/
python scons/scons.py
sudo python scons/scons.py install
sudo ldconfig
Убедитесь что Mapnik стал коректно:
python
>>> import mapnik
>>>
Усли pyton ответил приглашением командной строки >>>>
без ошибок, значит библиотека MApnik найдена питоном. Поздравляем!
- Установка mod_tile и renderd
tile@ubtail:~$ sudo apt-get install apache2 apache2-threaded-dev apache2-mpm-prefork apache2-utils libagg-dev
- собрать mod_tile из исходников
cd ~/src
svn co http://svn.openstreetmap.org/applications/utils/mod_tile
cd mod_tile
./autogen.sh
./configure
make
sudo make install
sudo make install-mod_tile
sudo ldconfig
- Установка стилистической таблицы mapnik
следующее что нам надо сделать - это установить mapnik-tools которые
включают в себя файлы дефолтного стиля и вспомогательные утилиты для
рендерингаданных OSM Мапником
cd ~/src
svn co -r 27279 http://svn.openstreetmap.org/applications/rendering/mapnik mapnik-style
Mapnik uses prepared files to generate coastlines and ocean areas
for small scale maps since it is faster than reading the entire database
for this information. Downloading the coastline data requires about
400Mb of download.
cd ~/src/mapnik-style
sudo ./get-coastlines.sh /usr/local/share
- Конфигурирование установленного ПО
Папка стилей по умолчанию ~/src/mapnik-style, там должна быть папка inc. Несколько файлов надо скапировать:
cd inc
cp fontset-settings.xml.inc.template fontset-settings.xml.inc
cp datasource-settings.xml.inc.template datasource-settings.xml.inc
cp settings.xml.inc.template settings.xml.inc
- изменяем настройки в этих файлах:
заменить
<ENTITY symbols "%(symbols)s">
на
<ENTITY symbols "symbols">
заменить
<!ENTITY osm2pgsql_projection "&srs%(epsg)s;">
на (в случае использования настройки по умолчанию 900913)
<!ENTITY osm2pgsql_projection "&srs900913;">
заменить
<!ENTITY dwithin_node_way "&dwithin_%(epsg)s;">
на (в случае использования настройки по умолчанию 900913)
<!ENTITY dwithin_node_way "&dwithin_900913;">
заменить
<!ENTITY world_boundaries "%(world_boundaries)s">
на (в случае использования настройки по умолчанию 900913)
<!ENTITY world_boundaries "/usr/local/share/world_boundaries">
заменить
<!ENTITY prefix "%(prefix)s">
на (в случае использования настройки по умолчанию 900913)
<!ENTITY prefix "planet_osm">
именно planet даже если только 1-на страна иначе не увидит базу
- файл datasource-settings.xml.inc
В этом файле надо ввести настройки базы данных. Мы запускаем postgresql на той же машине что и рендер, поэтому надо
1 - закоментировать строки с параметрами "password”, "host” и "port”
(стиль HTML <!-- -->). Это разрешит библиотеке mapnik
использовать локального пользователя для аутентификации.
2 - изменить "dbname” с "%(dbname)s” на "gis”, "estimate_extent” на
"false”, и "extent” на "20037508,-19929239,20037508,19929239"
Файл в итоге будет выглядеть приблизительно так:
<!--
Settings for your postgres setup.
Note: feel free to leave password, host, port, or use blank
-->
<Parameter name="type">postgis</Parameter>
<!-- <Parameter name="password">%(password)s</Parameter> -->
<!-- <Parameter name="host">%(host)s</Parameter> -->
<!-- <Parameter name="port">%(port)s</Parameter> -->
<!-- <Parameter name="user">%(user)s</Parameter> -->
<Parameter name="dbname">gis</Parameter>
<!-- this should be 'false' if you are manually providing the 'extent' -->
<Parameter name="estimate_extent">false</Parameter>
<!-- manually provided extent in epsg 900913 for whole globe -->
<!-- providing this speeds up Mapnik database queries -->
<Parameter name="extent">-20037508,-19929239,20037508,19929239</Parameter>
- файл fontset-settings.xml.inc
Этот файл содержит настройки шрифтов и информацию как изменять настройки по умолчанию. Рекомендуется не изменять их сейчас.
Исправляем настройки renderd изменив файл /usr/local/etc/renderd.conf таким образом: (помните что надо заменить username именем вашего пользователя):
socketname=/var/run/renderd/renderd.sock
plugins_dir=/usr/local/lib/mapnik/input
font_dir=/usr/share/fonts/truetype/ttf-dejavu
XML=/home/tile/src/mapnik-style/osm.xml
HOST=localhost
Create the files required for the mod_tile system to run (помните что надо заменить username именем вашего пользователя):
sudo mkdir /var/run/renderd
sudo chown tile /var/run/renderd
sudo mkdir /var/lib/mod_tile
sudo chown tile /var/lib/mod_tile
Теперь мы должны сообщить веб серверу о том что mod_tile установлен,
создав файл /etc/apache2/conf.d/mod_tile следующего содержания:
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
Кроме этого апачевский конфигурационный файл сайта по умолчанию
должен быть изменен для того, чтобы включить туда настройки mod_tile.
Исправляем файл /etc/apache2/sites-available/default, добавляем туда
следующие строки, сразу после e-mailа администратора:
LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
- Усовершенствуем нашу сисстему:
A tile server can put a lot of load on hard- and software. The default settings may therefore not be appropriate and a significant improvement can potentially be achieved through tuning various parameters.
Дефолтная конфигурация для PostgreSQL 8.4 нуждается в усовершенствовании под те данные которые мы собираемся использовать. Исправляем файл /etc/postgresql/8.4/main/postgresql.conf следующим образом:
shared_buffers = 128MB checkpoint_segments = 20 maintenance_work_mem = 256MB autovacuum = off
Эти изменения требуют изменений в настройках ядра, которые войдут в действие после рестарта сисемы. Правим файл под рутом /etc/sysctl.conf добавляем следующие строки в начале файла, после других настроек ядра "kernel”:
# Increase kernel shared memory segments - needed for large databases
kernel.shmmax=268435456
Перезагружаем компьютер, запускаем следующую команду:
sudo sysctl kernel.shmmax
и убедитесь что результат таков: 268435456.
mkdir belarus
cd belarus
wget http://download.geofabrik.de/osm/europe/belarus.osm.bz2
- Импортировать данные в базу
с помощью конвертирующей тулзины. Следующая команда встатвит данные OSM которые мы скачали в базу. Это долго особенно если конвертировать всю планету.
tile@ubtail:~$osm2pgsql --slim -d gis -C 1024 ~/belarus/belarus.osm.bz2
Completed planet_osm_polygon
Completed planet_osm_line
Stopped table: planet_osm_ways
Osm2pgsql took 86400s overall
The number of nodes, ways and relations processed will obviously differ by the size of the data extract you are using and the date of the data dump. The numbers shown here are not reflective of the full planet import, which is substantially larger.
Now that everything is installed, set-up and loaded, you can start
up your tileserver and hopefully everything is working. We’ll run it interctively first, just to make sure that everything’s working properly:
Теперь когда все установлено, настроено и загружено, мы можем
запустить свой тайлсервер и надеятся что все работает. Первый запуск
будет в интерактивном режиме - чтобы видеть все ошибки.
sudo mkdir /var/run/renderd
sudo chown tile /var/run/renderd
renderd -f -c /usr/local/etc/renderd.conf
И в другом сеансе:
sudo /etc/init.d/apache2 restart
Если есть к-л FATAL errors вам надо дважды проверить правильно ли вы делали все то что описано ранее.
Если нет, попробуйте загрузить http://yourserveraddress/osm_tiles2/0/0/0.png для того чтобы увидеть маленькую карту мира.
Если сработает, вы можете остановить интерактивный renderd и настроить его для автоматической загрузки как демона.
sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
sudo chmod u+x /etc/init.d/renderd
Исправте /etc/init.d/renderd от root:
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
Еще вы должны изменить ссылки к www-data здесь должен быть ваш пользователь tile – измените "www-data” так же как вы "username” в других файлах.
do_start()
{
mkdir -p /var/run/renderd
chown tile:tile /var/run/renderd
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid tile --exe$
|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid tile --exe$
$DAEMON_ARGS \
|| return 2 я
Теперь вы можете запустить mapnik следующе командой:
sudo /etc/init.d/renderd start
а остановить:
sudo /etc/init.d/renderd stop
Теперь лог пишется в /var/log/daemon.log вместо терминала.
Добавте ссылку в интерактивную стартовую папку, для того чтобы он стартовал автоматически:
sudo ln -s /etc/init.d/renderd /etc/rc2.d/S20renderd
теперь перезагрузите сервре и заййдите на http://yourserveraddress/osm_tiles2/0/0/0.png все должно заработать! Также вы можете зайти на страницу http://yourserveraddress/mod_tile которая отображает некоторую статистику вашего tileserver.
Для настройки OpenLayers (http://wiki.openstreetmap.org/wiki/HowTo_mod_tile)
Возможно вы хотите настроить дефолтную карту:
sudo nano /var/www/map.html
скрипт для OpenLayers:
<html>
<head>
<title>OpenLayers Demo</title>
<style type="text/css">
html, body, #basicMap {
width: 100%;
height: 100%;
margin: 0;
}
</style>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script>
function init() {
var options = {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
units: "m",
maxResolution: 156543.0339,
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
20037508.34, 20037508.34),
numZoomLevels: 20,
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.Permalink(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.KeyboardDefaults()
]
};
map = new OpenLayers.Map("basicMap",options);
var newL = new OpenLayers.Layer.OSM("Default", "/osm_tiles2/${z}/${x}/${y}.png", {numZoomLevels: 19});
map.addLayer(newL);
map.zoomIn();
}
</script>
</head>
<body onload="init();">
<div id="basicMap"></div>
</body>
</html>
Теперь проверте работате ли она (скрестите пальцы!):
http://YOURSERVER/map.html
Можно скачать скрипт (http://www.openlayers.org/api/OpenLayers.js)
и положить локально рядом с map.html, указать путь <script
src="/var/www/OpenLayers.js"></script> (или просто <script
src="OpenLayers.js"></script>) дополнение:
<osm cache="osm_local"
width="640000" height="640000" maxzoom="18">
<urls>
<url>http://192.168.240.26/osm_tiles2/%d/%d/%d.png</url>
</urls>
</osm>
Источник: http://switch2osm.org/serving-tiles/manually-building-a-tile-server/ |