В грядущем релизе NOC 0.7(3) появилась новая подсистема GIS, которая, в дальнейшем, будет активно использоваться в inventory и fault management'е для аналитики и визуализвации данных.
Географическая подсистема NOC базируется на PostGIS - spatial-расширении для PostgreSQL , для хранения и обработки векторных данных, javascript-библиотеки OpenLayers для визуализации данных и web-сервера NOC, реализующего бизнес-логику.
Карты в NOC состоят из растровых подложек (в любой момент времени может быть активна только одна подложка), поверх которой накладываются векторные слои (например, схемы кабельных трасс, показатели проникновения, и так далее), которые могут быть включены или отключены в любой момент. Выглядит все так, как будто мы взяли реальную топографическую карту или снимок аэрофотосъемки и повер него накладываем прозрачную пленку с дополнительными чертежами.
Важная разница между подложкой и векторными слоями заключается в том что подложка отображает реальную местность, то есть факт, свершившийся вне зависимости от наших деяний, в то время как наполнение наложенных векторных слоев, как правило, следы нашего творчества.
Правильный выбор подложки - один из самых ответственных шагов при начале работы с GIS, и GIS NOC не является исключением. Вся сложность ситуации заключается в том, что карта - плоская, а земля имеет форму не шара и даже не эллипсоида, а капитально побитого и покусанного со всех сторон яблока, примерно как на картинке:
Соответсвенно, существует множество различных упрощенных моделей Земли (в виде сфер и эллипсоидов разных размеров) и огромное количество способов отображения участков на поверхности эллипсоидов на плоскость, называемых проекциями. Для нас, в первую очередь, важен факт, что точка на карте не отображает реального положения на местности, так как любая проекция по определению имеет погрешность, а координаты, полученные с модных GPS и ГЛОНАСС приемников, помимо того, что сами по себе имеют погрешность, так еще и отображают координаты не на реальной поверхности земли, а на некотором виртуальном эллипсоиде. Пока мы работаем с одной подложкой - это практически незаметно, но если мы захотим поменять подложку, то с удивлением можем увидеть, что наши колодцы внезапно попали на крыши домов.
Общая мораль - подложку без особой необходимости лучше не менять.
Где взять данные для подложки? Конечно, можно использовать широко распространенные сервисы вроде Google Maps и OpenStreetmap, но зависимость от внешних сервисов не всегда допустима. Гораздо удобнее хранить карты в векторном формате у себя и работать с ними локально. Существует большое количество организаций, распространяющих векторные карты для отдельных регионов, кроме того, подобные карты ведут и местные БТИ. Вопросы приобретения карт лежат за пределами нашей статьи, поэтому не будем расписывать их подробнее. Вместо этого посмотрим, как open-source проект NOC может использовать данные open-source проекта OpenStreetMap
Нам понадобится: PostGIS 1.5, hstore (дополнительное расширение для PostgreSQL), osm2pgsql и mapnik2
Загружаем в базу стили OpenStreetMap, которые мы будем использовать для отрисовки наших карт. Сначала вытаскиваем xml со стилями из репозитория OSM:
$ cd tmp $ svn co http://svn.openstreetmap.org/applications/rendering/mapnik/
Нам также понадобятся дополнительные векторные данные с береговыми линиями и границами
$ cd mapnik $ ./get-coastlines.sh
Теперь заливаем все в нашу базу
noc@/opt/noc$ ./noc init-mapnik-map -n "My Map" -p osm ~/tmp/mapnik/osm.xml .....
Мы инициализировали стили для нашей растровой подложки "My Map"
Берем векторные данные OpenStreetMap в формате OSM XML. Их можно получить либо экспортом области из web-интерфейса, либо воспользовавшись готовыми выгрузками GIS Lab (нам нужен *.osm.bz2). Распаковываем и сохраняем результат как map.xml. Загружаем векторные данные в базу:
noc@/opt/noc$ ./noc import-osm-data -f <путь к map.xml> -a "My Area"
Запускаем процесс рендеринга картинок. картинки имеют размер 256x256 и организованы в виде слоев. 0-й уровень содержит изображение земного шара на одной картинке. 1-й уровень содержит 4 (2x2) картинки. Каждый следующий уровень разбивает картинку предыдущего уровня на 4 (увеличивает масштаб вдвое). Используются уровни детализации с 0 по 18. Запускаем процесс рендеринга:
noc@/opt/noc$ ./noc update-tilecache -a
и ждем завершения.
- Заходим в web-интерфейс NOC, выбираем GIS > Map, смотрим, что у нас получилось и сравниваем с OpenStreetMap
2 Comments
Теймур
Ubuntu 14.04 x64
NOC 15.05.1
На шаге "
./noc init-mapnik-map -n
"My Map"
-p osm ~/tmp/mapnik/osm.xml
" получаю ошибку:Unknown User (alfku)
Та же ошибка:
CentOS 6.7 x64
NOC 15.05.1