Pull to refresh

Создание интерактивной карты офиса, часть 2

Reading time 5 min
Views 46K
Летом прошлого года мы рассказывали о своей попытке облегчить процесс ориентирования в офисе, вылившейся в создание карты, на которой можно посмотреть местонахождение всех сотрудников компании. За прошедшее время мы переехали в новый офис, поэтому (ну и потому что хотелось все сделать еще лучше) было решено перепроектировать карту с учетом накопленного опыта.

Кратко напомним, зачем нам вообще понадобилось создавать карту своего офиса. Наша компания в последние годы достаточно бурно развивается, и количество сотрудников постоянно увеличивается (сейчас нас больше 300 человек). Соответственно, и найти нужного тебе коллегу среди такого количества людей бывает непросто, а с помощью карты легко можно узнать, где именно в офисе он сидит. Часто приходится решать и обратную задачу: бывает, что визуально человек знаком, известно и местонахождение его рабочего места, но вот ни имени, ни адреса электронной почты вспомнить не удается. Эти данные можно получить, кликнув по нужному столу на карте.

Было -> стало


Вообще, карта была переделана чуть более чем полностью. Этому способствовало не только желание разработчиков улучшить те моменты, которые давно хотелось улучшить, но и некоторые технические и юридические аспекты, о которых пойдет речь ниже.

Новый движок

Старая версия карты хорошо масштабировалась и, в принципе, ничто не мешало нам использовать ее после переезда. Однако в комментариях к прошлой статье нам указали на то, что пользовательское соглашение API Яндекс.Карт, на базе которых работала предыдущая версия, нельзя использовать так, как это делали мы. Поддержка Яндекса подтвердила этот факт, и — поскольку мы люди законопослушные — было решено «переехать» с карт Яндекса на опенсорсный движок отображения карт Leaflet.

К слову, в актуальной на тот момент версии Leaflet 0.4.3 не было необходимой нам плоской проекции, и нам пришлось реализовать ее своими силами. В нынешней версии 0.5 эта функциональность присутствует, но координаты вычисляются немного не так, как у нас. Поэтому наша карта пока что работает на более старой версии движка.

В комментариях к предыдущему посту нам также советовали обратить внимание на несколько других вариантов графических движков (вплоть до Planner 5D), но победил все же Leaflet, с небольшим отрывом опередивший OpenLayers.

Главная трудность при разработке новой карты заключалась в экспорте столов (т.е. данных, которые их обозначают) из AutoCAD в базу данных. С одной стороны, это не было обязательным, ведь можно просто расставить столы сразу на карте. Но с другой стороны, поскольку столы стоят не ровно, а повернуты кто куда, то пришлось бы вручную «вертеть» кучу столов, чего делать не хотелось.

В итоге была реализована схема, работающая следующим образом:

  1. В AutoCAD столы сдвигались на отдельный слой.
  2. Этот слой обрабатывался специальным скриптом на Lisp (его мы нашли в интернете; на всякий случай — вот он), который экспортировал данные в своем формате.
  3. Далее эти данные поступали на вход скрипту на питоне (с ним проще было иметь дело), который переводил их в SQL-скрипт вставки в базу. На этом же этапе происходил пересчет координат соответствия столов из терминов AutoCAD, в термины Leaflet.

Если же нужно было «дорисовать» какие-то объекты, которых изначально не было (переговорки и проч.), то схема повторялась: создание объекта в автокаде → перемещение его на отдельный слой → экспорт данных лисповым скриптом → конвертация в SQL → вставка в базу.

В результате изменился и внешний вид карты.

Было:



Стало:


Карта располагается на интранет-портале компании, с которым по расписанию синхронизируются ее данные.

Перемещение сотрудников

В прошлой версии карты для того, чтобы «пересадить» сотрудника, нужно было физически на карте мышкой двигать столы, а возможность переназначения сотрудника определенному столу отсутствовала. Другими словами, невозможно была ситуация, когда стол остается на месте, а меняется лишь сотрудник, который за ним сидит. На том этапе нам было важно лишь выяснить самое главное: нужна ли карта людям, будут ли они ею пользоваться, — поэтому мы делали все как можно проще.

В принципе ничего страшного в этом нет, однако копирование стола мог выполнить только разработчик. Учитывая, что миссию поддержания актуальности карты планировалось возложить на отдел кадров, требовалось максимально упростить процесс работы с картой: в компании работают 300 человек, которые периодически переезжают с места на место, и отслеживать все эти перемещения и без того непросто.

В итоге сейчас сотрудникам отдела кадров нужно лишь кликнуть на стол на карте и выбрать из выпадающего списка сотрудника, который будет за ним сидеть.



Введение пользовательских ролей

Еще одно нововведение — логин при работе с картой. Прошлая версия была статической, что делало использование аутентификации невозможным. Нынешний вариант карты — это MVC-приложение, которое позволяет реализовать функции, характерные для серверного приложения (права доступа, «пересаживание», «найти мой стол» и т. п.).

Для аутентификации мы используем встроенный в ASP.NET механизм NTLM и несложную самописную систему ролей, позволяющую указать группы прямо в конфигурации приложения.



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

Планы


Совсем недавно мы провели опрос среди коллег, в результате которого удалось собрать большое количество идей. Были среди них и оригинальные предложения, например сфотографировать весь офис и сделать из этого панорамы (наподобие Google Street View), чтобы можно было совершать по офису виртуальные прогулки, но пока целесообразность данного нововведения ставится разработчиками карты под сомнение :).

Помимо этого в планах значатся:

  • Реализация возможности бронирования стола сотрудниками отдела кадров для нового сотрудника заранее, пока он еще не вышел на работу и для него еще не заведена учетная запись в Active Directory.
  • Реализация возможности рисования столов на карте (можно сделать с помощью https://github.com/Leaflet/Leaflet.draw).
  • Добавление принтеров, аптечек и прочих потенциально нужных объектов. Первые шаги в этом направлении уже сделаны: на карте появились переговорные комнаты, телефонные будки, библиотека и стены для рисования маркером.

Существуют и другие идеи разной степени проработанности и необходимости: слои на карте (например, с теми же принтерами и прочей офисной техникой) или интеграция с MS Exchange (при клике на переговорку показывать, когда и кем она занята и когда будет свободна, при клике на сотрудника выводить запланированные встречи из календаря). В дальнейшем, возможно, мы реализуем что-нибудь из этого.

Демо


В комментариях к прошлой статье нас просили показать, собственно, саму карту. Нам удалось сделать демо, но учитывая, что это все же внутренний проект компании, расположенный в интранете и не доступный извне, — функционал публичной версии ограничен.

UPD: Выложили исходники.

Будем рады ответить на вопросы в комментариях. Всегда ваши, разработчики карты MikeOzornin и evgekon
Tags:
Hubs:
+38
Comments 24
Comments Comments 24

Articles

Information

Website
www.ptsecurity.com
Registered
Founded
2002
Employees
1,001–5,000 employees
Location
Россия