Таких описаний - уйма. Вот например про tilecache-сервер: http://openlayers.org/dev/examples/tilecache.html
Все они сводятся к простому - у вас есть html-страничка и вот теперь мы на неё с помощью подключаемого OpenLayers.js-скрипта выведем карту, которую будем брать по таким-то ссылкам…
Но в моём случае - есть rails-сервер, в котором всё как-то внутри генериться и отдаётся пользователю. При этом есть настройки OpenLayers, которые не влияют на отдаваемую рельсами пользователю страничку. Не влияет добавление нового слоя, а вот изменение ссылки в описании для Mapnik - да, влияет… Но мне надо добавить свои слои. И вот вопрос, как добавлять свои слои в rails-сервере?
Может быть я чего упорно не могу понять и сложить 2+2? Прошу тогда не гневаться на недогадливость
Как я понимаю: в случае простой html-странички: создаём html, подцепляем к ней OpenLayers.js, пишем мелкий код из примера со ссылкой на наш tilecache-сервер и всё.
В случае же рельсов: rails-сервер берёт конфиги из openlayes (который установлен как часть rails-сервера), создаёт на лету html, который и отдаёт пользователю, подключившемуся на 3000-й порт, который слушает rails-сервер.
В конфиге openlayers (OpenStreetMap.js) должен быть прописан нужный слой, который ссылается на соответствующий tilecache сервер, запущенный по соседству и отдающий тайлы по схеме нумерации Google, сгенерированные Mapnik-ом в EPSG:3857.
Так?
Ок, пишите что да как… интересно…
Могу описать свой опыт - хау-ту создать и поддерживать актуальность базы для рендеринга данных локального osm-сервера? Ничего нового в этом нет опусе не будет, переработанные статьи из вики…
Спасибо! Надеюсь поможет потом.
Сейчас база есть, мапник рендерится.
Поковырялся, наваял страничку по документации из OpenLayer. Базовую карту (http://labs.metacarta.com/wms/vmap0) через локальный tilecache показывает (basic в конфиге tilecache-a).
Со своей (osm в конфиге tilecache-a) проблемы - показывает только воду. “Мир воды”…
openstreetmap - основная - в неё загружаются пользовательские данные редактирования.
osm_test - тестовая, говорят, что она перезатирается при инициализации - для внутренних нужд?
osm - production - зачем она?
Проинициализировал пустую базу openstreetmap, добавил туда парочку объектов (через josm, который подключается к локальным рельсам).
Теперь задача срендерить с неё слой mapnik-ом. Но мапник хочет базу postgis.
Т.е. данные нужно перегонять из одной базы (openstreetmap) в базу postgis (gis) и потом уже натравливать на неё mapnik?
Я нигде не видел четкого описания для чего она, но было бы логично иметь отдельную базу для резервного копирования, выгрузок дампов и прочих задач, несвязанных с наполнением первичными данными.
О! Большое спасибо за картинку (и за документацию ещё раз ). После надо будет наваять полную инструкцию по поднятию своего rails-сервера… Со всеми возможными подводными камнями.
Почему-то generate_tyles.py валились с ошибкой:
render_tiles( (131.980255, 43.098925999999999, 131.985131, 43.102438999999997) osm2.xml tiles/ 10 16 Vladivostok )
Postgis Plugin: SRID warning, using srid=-1
Traceback (most recent call last):
File "./generate_tiles_vlad.py", line 218, in <module>
render_tiles(bbox, mapfile, tile_dir, minZoom, maxZoom, "Vladivostok")
File "./generate_tiles_vlad.py", line 135, in render_tiles
renderer = RenderThread(tile_dir, mapfile, queue, printLock, maxZoom)
File "./generate_tiles_vlad.py", line 64, in __init__
mapnik.load_map(self.m, mapfile, True)
RuntimeError: :
ERROR: relation "planet_osm_polygon" does not exist
LINE 4: from planet_osm_polygon
^
Full sql was: 'SELECT * FROM
(select way,aeroway,amenity,landuse,leisure,man_made,military,"natural",power,tourism,name,highway,
case when religion in ('christian','jewish') then religion else 'INT-generic'::text end as religion
from planet_osm_polygon
where landuse is not null
or leisure is not null
or aeroway in ('apron','aerodrome')
or amenity in ('parking','university','college','school','hospital','kindergarten','grave_yard')
or military in ('barracks','danger_area')
or "natural" in ('field','beach','desert','heath','mud','wood','sand','scrub')
or power in ('station','sub_station','generator')
or tourism in ('attraction','camp_site','caravan_site','picnic_site','zoo')
or highway in ('services','rest_area')
order by z_order,way_area desc
) as leisure
LIMIT 0'
(encountered during parsing of layer 'landcover' in map 'osm2.xml')
Оказалось, что данные нужно заливать в gis-базу не командой:
Сейчас осталось разобраться как правильно туда прописать отображение моего отрендеренного слоя, чтобы по галочке он включался и отключался в rails-сервере…
An error occurred: can't find resolution index for 0.000343. Available resolutions are:
[156543.03390000001, 78271.516950000005, 39135.758475000002, 19567.879237500001, 9783.9396187500006, 4891.9698093750003, 2445.9849046875001, 1222.9924523437501, 611.49622617187504, 305.74811308593752, 152.87405654296876, 76.43702827148438, 38.21851413574219, 19.109257067871095, 9.5546285339355475, 4.7773142669677737, 2.3886571334838869, 1.1943285667419434, 0.59716428337097172, 0.29858214168548586]
Кусок карты примерно один и тот же. Обращался к wms из тестового примера на OpenLayers.js, при подстановке туда другого слоя (base, который в конфиге tilecache-а ссылается на http://labs.metacarta.com/wms/vmap0 ) - карта отображается.
В гугле (http://osgeo-org.1803224.n2.nabble.com/Configuration-of-TileCache-and-OpenLayers-td1837117.html) нашёл решение:
Нужно вычесть от одной координаты слоя другую (брать из bbox в generate_tiles.py), поделить это на 512 и получим maxResolution. Прописываем bbox и maxResolution в html-ку из которой обращаемся к tilecache-у, а так же прописываем bbox слоя в конфиг tilecache-а для этого слоя.
Попробовал - не получилось.
Вопрос - правильное ли это решение, если да - где я ошибся, если нет - то какое правильное?
Пробовал сгенерить “базовую карту”: