Використання ПЗ з відкритим кодом для складання карт інтер'єрів, персоналу та взаємозв'язків всередині будівлі
- Системні вимоги
- Отримання зображення і визначення координат
- Завдання областей за допомогою Gimp
- Малюнок 1. Карта на основі схеми будівлі
- Лістинг 1. Файл зображення карти
- Лістинг 2. Приклад файлу координат
- Лістинг 3. Приклад: файл списку імен nmLst
- Лістинг 4. Приклад: координатно-конфігураційний файл dots
- Створення зображення карти внутрішніх приміщень будівлі
- Малюнок 2. Приклад схеми будівлі з нанесеними об'єктами
- програма renderBasic.pl
- Лістинг 5. Програма renderBasic.pl, частина 1
- ще приклади
- Лістинг 6. Зміни, що вносяться до програми adjust_renderBasic.pl
- Малюнок 3. Приклад накладення схеми будівлі з нанесеними місцями розташування на вигляд будівлі зверху
- Ресурси для скачування
Створення спеціалізованих картосхем персоналу, місць зборів та інших об'єктів шляхом комбінування текстових покажчиків і схем інтер'єрів будівель
Відомі інтернет-сервіси, що займаються геолокації, надають користувачеві засоби, що дозволяють фіксувати на карті місце розташування великих об'єктів практично по всьому світу. І у 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)
Підпишіть мене на повідомлення до коментарів