<
  • Главная
Статьи

Використання ПЗ з відкритим кодом для складання карт інтер'єрів, персоналу та взаємозв'язків всередині будівлі

  1. Системні вимоги
  2. Отримання зображення і визначення координат
  3. Завдання областей за допомогою Gimp
  4. Малюнок 1. Карта на основі схеми будівлі
  5. Лістинг 1. Файл зображення карти
  6. Лістинг 2. Приклад файлу координат
  7. Лістинг 3. Приклад: файл списку імен nmLst
  8. Лістинг 4. Приклад: координатно-конфігураційний файл dots
  9. Створення зображення карти внутрішніх приміщень будівлі
  10. Малюнок 2. Приклад схеми будівлі з нанесеними об'єктами
  11. програма renderBasic.pl
  12. Лістинг 5. Програма renderBasic.pl, частина 1
  13. ще приклади
  14. Лістинг 6. Зміни, що вносяться до програми adjust_renderBasic.pl
  15. Малюнок 3. Приклад накладення схеми будівлі з нанесеними місцями розташування на вигляд будівлі зверху
  16. Ресурси для скачування

Створення спеціалізованих картосхем персоналу, місць зборів та інших об'єктів шляхом комбінування текстових покажчиків і схем інтер'єрів будівель

Відомі інтернет-сервіси, що займаються геолокації, надають користувачеві засоби, що дозволяють фіксувати на карті місце розташування великих об'єктів практично по всьому світу. І у Google, і у Yahoo! і у Microsoft® є кошти, безперечно постачають картографічну інформацію щодо земельних ділянок, меж, автомобільних доріг і будівель. Мета цієї статті - переміститися всередину будівлі і чітко зазначити розташування в ньому кімнат, людей та інших відслідковуються об'єктів. Картира плагін до редактора Gimp дозволяє визначити координати в межах відслідковуються областей. За допомогою простого пошуку текстових відповідностей і засоби складання анотацій ImageMagick можна створювати карти інтер'єрів, відображаючи на них корисну інформацію про об'єкти всередині будівлі і взаєминах між ними.

Системні вимоги

Щоб скомпілювати і виконати код, наведений у цій статті, потужності будь-якого сучасного комп'ютера, випущеного після 2000 року, вистачить з головою. Якщо план вашого будинку дуже великий або вам потрібно нанести на карту дуже велика кількість точок, вам може знадобитися найсучасніший багатоядерний процесор і кілька гігабайт оперативної пам'яті. Так чи інакше, типовий комп'ютер розробника, який читає цю статтю, швидше за все забезпечить достатню тактову частоту і об'єм пам'яті для того, щоб скласти карту типового офісного приміщення буквально в одну мить.

Вам буде потрібно пакет ImageMagick, Perl і графічний редактор Gimp. Всі ці продукти мають реалізації під Windows®, Mac OS X і різні різновиди UNIX - зокрема, під Linux® (див. "Ресурси" ). Також вам знадобиться проста і швидка програма перегляду зображень. Як правило, подібні програми поставляються в комплекті робочого середовища настільних комп'ютерів. Для користувачів Linux я рекомендую feh Тома Гілберта. Втім, підійде і будь-який інший переглядач.

Код, який ми наводимо тут в якості прикладу, орієнтований на середу Linux. Після внесення невеликих змін він, однак, цілком може бути виконаний в Mac OS X або Windows. Пристосування його до цих середовищ ми залишаємо читачеві як вправа.

Отримання зображення і визначення координат

Відшукання зображення будівлі

Перший крок в побудові функціональної карти інтер'єру обраного вами будівлі - це визначення координат точок навколо розташованих усередині нього об'єктів. Зробити це простіше за все за допомогою архітектурного плану самої будівлі. Якщо у вас немає можливості звернутися до служби, що забезпечує експлуатацію будівлі, і отримати у неї його зображення в САПР-форматі, спробуйте зняти цифрову копію схем внутрішніх приміщень будівлі, вивішених у його входу. Якщо готову схему будівлі знайти не вдається, можна навіть виконати її начерк вручну і використовувати його в якості базису для системи координат. У разі будівлі, карта якого побудована в наведеному в цій статті прикладі використання програмного коду , Проблем з отриманням САПР-файлу не було, так що для побудови схеми будівлі я завантажив безкоштовну програму перегляду зображень і просто зробив копію екрану.

Завдання областей за допомогою Gimp

Один з найпростіших способів завдання точок або обмежених областей на двовимірному зображенні полягає в використанні плагіна ImageMap до редактора Gimp. Відкрийте своє схематичне зображення в Gimp і виберіть в меню пункт Filters> Web> ImageMap. Щоб за допомогою інструменту ImageMap призначити ідентифікатори окремим пикселам зображення, досить виділити прямокутник в потрібній області і ввести в рядку, що з'явився введення ту чи іншу унікальну послідовність символів. На малюнку 1 ви можете бачити плагін ImageMap в дії. Зверніть увагу, як з його допомогою можна створювати квадрати, багатокутники, кола, призначаючи їм імена на свій вибір в поле URL. Плагін ImageMap - це інструмент, що дозволяє легко вводити дані про окремі пікселах або областях пікселів. Ви просто робите подвійне клацання на зображенні, визначаєте потрібну конфігурацію, вводите ідентифікує текст і натискаєте Enter. Такий підхід дає можливість швидко створювати координатні карти на основі схем вашого будинку.

Малюнок 1. Карта на основі схеми будівлі
Створення спеціалізованих картосхем персоналу, місць зборів та інших об'єктів шляхом комбінування текстових покажчиків і схем інтер'єрів будівель   Відомі інтернет-сервіси, що займаються геолокації, надають користувачеві засоби, що дозволяють фіксувати на карті місце розташування великих об'єктів практично по всьому світу

Витяг координат і ідентифікаторів

Після того як ви збережете створену в вікні плагіна ImageMap карту, буде створений файл, аналогічний показаному нижче.

Лістинг 1. Файл зображення карти

<Img src = "buildingMap1.png" width = "570" height = "666" border = "0" usemap = "# map" /> <map name = "map"> <! - # $ -: Image Map file created by GIMP Imagemap Plugin -> <! - # $ -: GIMP Imagemap Plugin by Maurits Rijk -> <! - # $ -: Please do not edit lines starting with "# $" -> <! - # $ VERSION: 2.0 -> <! - # $ AUTHOR: Unknown -> <area shape = "rect" coords = "506,596,516,606" href = "0a" /> <area shape = "rect" coords = "133,573,143,583" href = "1a" /> <area shape = "rect" coords = "82,203,92,213" href = "2a" /> <area shape = "rect" coords = "490,116,500,126" href = "3a" /> <area shape = "rect" coords = "68,45,78,55" href = "conference_room0" /> <area shape = "rect" coords = "188,131,198,141" href = "conference_room1" /> <area shape = "rect "coords =" 420,16,430,26 "href =" 4b "/> ... </ map>

Для простоти ми винесемо з карти тільки потрібні координати і ідентифікатори за допомогою ось такого рядка:

grep oo map | perl -lane 's / (coords | href | = | ") // g; @ F = split; print" @F [2,3] "'> coords

Ця команда перетворює прийнятий за замовчуванням графічний файл карти в більш зручний у використанні формат і перенаправляє результат цієї процедури в файл координат. Приклад файлу координат приведений в лістингу 2.

Лістинг 2. Приклад файлу координат

506,596,516,606 0a 133,573,143,583 1a 82,203,92,213 2a 490,116,500,126 3a 68,45,78,55 conference_room0 188,131,198,141 conference_room1 420,16,430,26 4b ...

Після того, як ми визначили всередині будівлі різні місця розташування, необхідно сформувати дані, які вказували б, хто або що знаходиться в цих областях. У нашій організації це, по суті, означає, що вам потрібно звернутися до довідника підприємства і по ньому знайти всіх співробітників, що перебувають у певному місці будівлі. Інші дані про використання приміщень можуть бути отримані з систем резервування конференц-залів, а також з баз даних служб експлуатації будівель і аварійних служб. У лістингу 3 наводиться приклад такого файлу даних з індивідуальними найменуваннями і відповідними їм об'єктами всередині будівлі.

Лістинг 3. Приклад: файл списку імен nmLst

Franco 1a Cliff 0a Larry conference_room0 Melanie 2a Michael 4b Paul 7c.1 Chris conference_room1 Jeffrey 5b Lisa 3a Dave 7c.2 ...

Слід мати на увазі, що це спрощений приклад. У файлі списку імен можна вказувати будь-яку кількість ідентифікаторів. Можна вказати, що з тих чи інших робочим відсіком пов'язано кілька людей, можна виробляти серед них пошук за назвою, стажу роботи в компанії і т. Д. У нас є тепер файл координат робочого приміщення і файл його атрибутів. Щоб приступити до формування зображення карти, зв'яжемо ці два файли з ідентифікаторами у вигляді геометричних фігур.

Для прикладу зробимо так, щоб всі ті, в чиєму імені зустрічається буквосполучення "el", позначалися на мапі прямокутниками, а ті, в чиєму імені зустрічається "is" - кружками. Наведені нижче команди дозволяють створювати прості і наочні позначення, засновані на тих чи інших характеристиках імен.

perl -ane 'if (/ el /) {print "rectangle". `Grep" $ F [1] "coords`} 'nmLst> dots perl -ane' if (/ is /) {print" circle ". `Grep" $ F [1] "coords`} 'nmLst >> dots

Результат, що поміщається в файл dots, буде виглядати аналогічно до наведеного нижче. Ми використовуємо для формування файлу координат і атрибутів командні рядки і текстові файли, але викладений тут загальний підхід застосуємо до будь-якого методу призначення та зберігання координатної інформації. Так, наприклад, ви можете зберігати імена і серійні номери об'єктів в базі даних DB2®, а відповідність координат і об'єктів встановлювати в окремій таблиці. Виконайте з'єднання вмісту обох таблиць, і ви зможете сформувати аналогічний координатно-конфігураційний файл.

Лістинг 4. Приклад: координатно-конфігураційний файл dots

rectangle 82,203,92,213 2a rectangle 490,116,500,126 4b circle 188,131,198,141 conference_room1 circle 420,16,430,26 3a

Створення зображення карти внутрішніх приміщень будівлі

Отже, файл dots служить джерелом основної інформації про геометричні позначеннях і координатах, але, крім того, нам потрібно нанести ідентифікатори об'єктів на схематичне зображення будівлі. Це робиться за допомогою ImageMagick. У нашому першому прикладі renderBasic.pl завдасть шляхом альфа-змішування червоні прямокутники і зелені кружки на схему в потрібних координатах. Запустіть програму командою cat dots | perl renderBasic.pl buildingMap1.png output.png. На малюнку 2 показаний приклад результату роботи програми renderBasic.pl.

Малюнок 2. Приклад схеми будівлі з нанесеними об'єктами

Перш ніж продовжити розповідь про програму renderBasic.pl і перейти до наступних прикладів, слід сказати пару слів про обраний для даної ситуації метод рендеринга. Створюється враження, що в API пакету gd як для C, так і для Perl є якісь обмеження. Які б опції або параметри я не вибирав, намалювати гуртки шляхом альфа-змішування не виходить. Найпростіший спосіб обійти це обмеження - намалювати все географічні примітиви за допомогою командного рядка, використовуючи команду convert з арсеналу ImageMagick. Програма renderBasic.pl просто-напросто вибудовує довгий ланцюжок конвертаційних команд ImageMagick і послідовно запускає їх, поки не буде досягнуто бажаного результату.

програма renderBasic.pl

Команди Perl, складові програму renderBasic.pl, представлені нижче. Спочатку виконується перевірка правильності використання, потім визначаються використовувані в програмі змінні. За допомогою оператора циклу while, налаштованого на читання з stdin, здійснюється витяг різних компонентів з файлу dots. В даному прикладі для побудови різних команд малювання за допомогою лише двох координатні пари з файлу dots. Наприклад, малюючи гурток, визначте зменшується радіус, побудуйте навколо основної точки гуртки альфа-змішуванням, і ви отримаєте чудовий ефект кривого загасання. Після того, як команди для малювання зображень з альфа-змішуванням будуть сформовані, перевірте, чи не збирається переповниться командний буфер, і якщо це так, виконайте цю порцію команд. Знову-таки, цей ітеративний підхід до побудови великих конвертаційних команд малювання обумовлений необхідністю подолати обмеженість (по крайней мере, на момент написання цієї статті) API GD для C і Perl, нездатних малювати гуртки з альфа-змішуванням.

Лістинг 5. Програма renderBasic.pl, частина 1

#! / Usr / bin / perl -w # renderBasic.pl - побудова команд малювання ImageMagick для інтер'єрів будівель use strict; die "usage: cat dots_file | renderBasic.pl input output" unless @ ARGV == 2; my $ lineCount = 1; # Line count for ImageMagick cmd my ($ inFile, $ outFile) = @ARGV; # Input, output files my $ cmd = qq (convert); while (<STDIN>) {my ($ type, $ loc, $ key) = split; my ($ x, $ y) = split ",", $ loc; my $ count = 1; # Побудова команд малювання ImageMagick while ($ count <10) {my $ alpha = 255 - (20 * $ count); # Зменшуємо ступінь альфа-сполучення на 20 при кожному проході if ($ type = ~ / circle /) {my $ stopX = $ x + (10 - $ count); my $ stopY = $ y + (10 - $ count); $ Cmd. = Qq (-fill "rgba (100,200,70, $ alpha)" -draw 'circle $ x, $ y, $ stopX, $ stopY' \\\ n); } Else {my $ tempX = ($ x - 10) + $ count; my $ tempY = ($ y - 10) + $ count; my $ stopX = ($ x + 20) - $ count; my $ stopY = ($ y + 20) - $ count; $ Cmd. = Qq (-fill "rgba (200,100,50, $ alpha)" -draw 'rectangle $ tempX, $ tempY, $ stopX, $ stopY' \\\ n); } $ Count ++; } #While each 10 area # виконуємо команду по частинах if ($ lineCount% 50 == 0) {$ cmd. = Qq ($ inFile $ outFile); $ Cmd = `$ cmd`; $ InFile = "$ outFile"; $ Cmd = qq (convert); } # Якщо команда занадто велика для виконання $ lineCount ++; } #While stdin $ cmd. = Qq ($ inFile $ outFile); $ Cmd = `$ cmd`;

ще приклади

Там, де я працюю, відвідувачі дуже часто запитують, де знаходиться конференц-зал - щоб вибрати найближче до нього місце на автостоянці. Щоб допомогти колегам вибрати для парковки потрібну сторону будівлі і позбавити їх від необхідності довго ходити пішки, розглянемо наступну команду: cat dots | perl adjust_renderBasic.pl withParking_buildingMap1.png output.png. У цьому випадку теж використовується Gimp - для накладення схеми з минулого прикладу на вигляд будівлі зверху. Результат цієї дії показаний на малюнку 3. Оскільки розташування приміщень в будівлі вже визначено, за допомогою дуже простий модифікації програми adjust_renderBasic.pl ми зможемо вказати зеленим кольором місцезнаходження менеджерів і синім - місцезнаходження програмістів. Лістинг 6 показує зміни, що вносяться до координати розташування умовних знаків у програмі adjust_renderBasic.pl:

Лістинг 6. Зміни, що вносяться до програми adjust_renderBasic.pl

my ($ type, $ loc, $ key) = split; my ($ x, $ y) = split ",", $ loc; my $ count = 1; $ X + = 85; #shift right 85 $ y + = 90; #shift down 90

Малюнок 3. Приклад накладення схеми будівлі з нанесеними місцями розташування на вигляд будівлі зверху

висновок

За допомогою викладених методів ви тепер можете використовувати весь потенціал ImageMagick для вирішення завдань картування інтер'єрів будівель. У нашій організації попереднє бронювання конференц-залів приїжджими діловими партнерами дозволяє збільшити ефективність використання ресурсів і знизити загальну напруженість. Службам, зайнятим плануванням і розподілом ресурсів будівлі, безумовно, будуть корисні комп'ютерні засоби, спеціально орієнтовані на візуальне відображення використання наявних інтер'єрів і не пов'язані з роботою дорогого програмного забезпечення сторонніх розробників.

Ресурси для скачування

Схожі теми

  • Оригінал статті " Map places, people, and relationships inside a building with open source software "(EN).
  • Дізнайтеся більше про засоби управління зображеннями в Gimp і завантажте їх на свій комп'ютер. доступні версії для Windows, Mac OS X і багатьох різновидів UNIX. (EN)
  • ImageMagick - це комплекс програм для створення, редагування і комбінування растрової графіки. доступні версії для Windows, Mac OS X і багатьох різновидів UNIX. (EN)
  • Якщо у вашій системі не встановлено Perl, завантажте його з Perl.org . На цьому сайті ви також можете отримати безліч відомостей про Perl. доступні версії для Windows, Mac OS X і багатьох різновидів UNIX. (EN)
  • feh - швидкий і економічний переглядач зображень під Linux. (EN)
  • Щоб послухати цікаві інтерв'ю та дискусії за участю розробників програмного забезпечення, відвідайте розділ developerWorks podcasts . (EN)
  • відвідайте розділ Open Source на developerWorks - тут ви знайдете численні керівництва, інструменти та новини, які допоможуть вам користуватися технологіями з відкритим кодом і застосовувати їх з продуктами IBM.
  • завантажте пробні версії продуктів IBM - випробуйте в справі засоби розробки і міжплатформене ПО від DB2®, Lotus®, Rational®, Tivoli® і WebSphere®. (EN)
  • Внесіть новизну в свій open source-проект за допомогою пробних версій програмних засобів IBM , Доступних для завантаження або на DVD. (EN)

Підпишіть мене на повідомлення до коментарів



Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью