создание своего OSM-сервера, как прокси

Здравствуйте!

Товарищи, подскажите пожалуйста, в какую сторону копать (какие инструменты есть и как их примерно соединить), чтобы реализовать следующую задачу:

Внутри компании должен быть установлен сервер со своей базой данных и со своим рендером OSM. На этот сервер с помощью, допустим Potlach или josm добавляются секретные данные.

Сервер отрисовывает эти данные как OSM-слой и накладывает его поверх подгружаемого из интернета Mapnik-а. В результате на локальном внутреннем сервере сотрудникам доступна базовая OSM-карта + отрисованные поверх неё секретные объекты, добавленные сотрудниками на локальный сервер.

Данные секретные (служба безопасности запретила их в общий доступ выдавать, к сожалению).

Заранее спасибо! :slight_smile:

Хм… А зачем делать секретные данные именно как осм-слой?

Для начала нужно поставить:
http://wiki.openstreetmap.org/wiki/Rails_port
http://wiki.openstreetmap.org/wiki/Mapnik
http://wiki.openstreetmap.org/wiki/Minutely_Mapnik

А как иначе?
Может конечно есть более простой вариант, который я не знаю…

Ага…
Правильно ли я понимаю, что будет стоять сервер (Rails_Port), отрисовкой занимается Mapnik, а Minutely_Mapnik ежечастно приводит базу в соответствие с мировой?

Не будут ли тогда “секретные данные” (для внутреннего использования), заливаемые пользователями компании в эту базу конфликтовать с данными, импортируемыми с мировой базы?

Ведь по хорошему, эти “секретные данные” должны быть как отдельная база, с которой генерируется слой. Хотя с другой стороны, ридактируя, пользователи не будут видеть OSM данных из общей базы…

Как правильно реализовать этот подход?

Да, именно так. При этом можно настроить потлатч и жосм на внутренню базу.

Нет, вы будете рисовать отдельный слой, который можно сделать отключаемым и/или полупрозрачным для накладывания на данные OSM (то есть, рисовать только добавленные «секретные» объекты). Разумеется, для лицензионной чистоты никакие данные из основной базы OSM не должны включаться в ваш набор.

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

Более простой метод решения данной проблемы — взять любую подходящую ГИС, импортировать в неё данные OSM (взяв готовые SHP с Gis-Lab или сконвертировав самостоятельно).
Меня этот способ при решении такой же задачи вполне устроил.

,

в которой осм-рендер (глобальный или локальный) может выступать в качестве подложки.

Практика показала, что так лучше не делать.
Преимуществ растровая подложка над векторной особо не имеет, а вот недостатков полно:
— Плохое качество картинки на масштабах, неравных тем, что рендерит Мапник (это проявляется и в JOSM при включении подложки OSM)
— Меньшая скорость работы (тормоза), особенно если рендер глобальный и сеть небыстрая
— Невозможность просматривать свойства объектов, которые не рендерятся (addr:street, например)
— Меньшая гибкость: нужно поменять цвет дорог, в интуитивно понятном GUI хорошей ГИС взял и поменял; у глобального Мапника это никак не сделаешь
— Для локального Мапника нужен сервер, желательно с Линуксом. Если на остальных компьютерах Windows, то это лишние затраты на железо и на администрирование этого единственного сервера.

Ну, линукс у нас есть, он, как говориться, не может не есть :slight_smile:

Вариант с ГИС, как я понимаю - не подойдёт, т.к. рисовать эти секретные объекты будут пользователи, не сильно искушённые в картографии - это раз и второе - нужна централизация и отрисовка тайлов через браузер - как сервис.

Нет, вы будете рисовать отдельный слой, который можно сделать отключаемым и/или полупрозрачным для накладывания на данные OSM (то есть, рисовать только добавленные «секретные» объекты). Разумеется, для лицензионной чистоты никакие данные из основной базы OSM не должны включаться в ваш набор.

Т.е. будет две базы - одна - регулярно обновляемая с OSM, вторая - содержащая только секретные данные. Соответственно сервер будет рендерить первую как основной слой и вторую, как полупрозрачный слой и совмещать эти слои на выходе, который будет отображаться пользователям в их браузерах.
Если я правильно понял, то тогда пошёл разбираться :slight_smile:

Мы подобную вещь сделали просто - карта отдельно (в постгис, рендерится mapserver-ом), свои данные отдельно (интерфейс редактирования сделан свой, на базе OpenLayers). Объединяется при показе, в OpenLayers.

Гм, попробовал залить Приморский край, Россию - вываливается с ошибкой, что какой-то точки (идентификатора) нет в таблице. Почитал - видать действительно нужно заливать весь мир.
Скачал, начал заливать - вывалилось с ошибкой о том, что места не хватает. Оставшиеся 100 Гб из доступных 134Гб скушало и вывалилось…

Хм, а сколько же на загрузку мира в БД нужно места на сервере?

Возможно стоит clipIncompleteEntities сделать перед заливкой.

Хочется понять состояние вашей системы.
Правильно ли я понимаю, что:

  1. на вашем “локальной осм-сервер” (Rails Port, Mapnik …) можно зарегистрировать “локальный осм-аккаунт”
  2. создать под ним с помощью встроенного редактора Potlatch и\или локального Josm-а новый объект и сохранить его в локальной базе.
  3. увидеть его в мапниковской подложке локальной осм-карты
  4. отредактировать и увидеть изменения в подложке.

Ну примерно так. С той лишь разницей, что база мира и база вносимых изменений локальными пользователями будет разниться. И из изменений локальных пользователей будет генериться дополнительный слой, который будет накладываться на “отрендеренный” локальным сервером мир.

Спасибо!
Ну а пока мир лью :slight_smile: Увеличили место до 500 Гб на сервере и пытаюсь мир залить…

progserega,
секретные объекты будут отдельны от объектов в основной базе, или будут уточняться секретными данными объекты существующие в основной?

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

И еще не понятно, что значит “из изменений локальных пользователей будет генериться дополнительный слой” ? В базовый слой OpenLayers на карте с результатими рендернга изменений в “локальной осм-сервере” также как переключение между мапник-ом и осмарендер-ом на карте openstreetmap.org?

Ну, сейчас заливается мир из xml в postgres, чтобы его локально “рендерить”. На этапе заливки в прошлый раз и вывалилось из-за отсутствия места на диске.

Я думаю локальный слой “секретных данных” будет прозрачным. И будет “довключаться”. Как оверлей космоснимков вот тут:
http://latlon.org/maxi?zoom=17&lat=56.33594&lon=30.51639&layers=0000000000000FF0000FBT

Но пока я до этого ещё не дошёл в процессе установки и настройки :slight_smile: Пока только мир заливается в postgres.

progserega, не понимаю зачем тебе “заливается мир из xml в postgres”, бери тайлы с osm.org, а свои рендери как прозрачный слой. Зачем это лишнее действие?