Розробка і реалізація підсистеми для створення топологічних розрізів на основі геопросторових даних

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

Рубрика Программирование, компьютеры и кибернетика
Вид магистерская работа
Язык украинский
Дата добавления 17.12.2014
Размер файла 4,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

4.2 Загальна концепція алгоритму

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

Рисунок 4.1. Блок-діаграма алгоритму побудови геологічного розрізу.

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

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

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

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

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

Коли математична модель геологічної структури задана, можна переходити до наступного кроку алгоритму - до безпосереднього побудові розрізу. Ця процедура є чисто обчислювальної. Оскільки кожна стратоізогіпса відноситься до тієї чи іншої стратиграфічної кордоні і має певну щодо рівня Світового океану висотну відмітку, то знаходження положення кордонів на профілі зводиться до перерахунку координат точок перетину стратоізогіпс з лінією розрізу з площини карти в площину профілю. Схематично це можна представити таким чином: [X, Y] -> [X ']; [Z] -> [Y '], де X, Y - координати точки перетину в площині карти, Z - висотна позначка точки перетину, а X', Y '- координати точки перетину в площині профілю. Координата T використовується як критерій приналежності точок на розрізі до тієї чи іншої стратиграфічної кордоні.

Заключним кроком є перевірка валідності отриманого розрізу. В даний час існує тільки один метод контролю подібних побудов, званий методом балансування розрізів. Його суть полягає в припущенні сталості довжин ліній кордонів, площ і обсягів, займаних пластом під дією пластичних деформацій. На розрізі вибирається ділянка між двома так званими пін-лайн, всередині якого вимірюються відповідні величини і порівнюються між собою. Пін-лайни зазвичай розташовують уздовж осей складок, оскільки вважається, що там немає сдвиговой компоненти, і в первісному стані ці лінії розташовувалися перпендикулярно напластованию. Так чи інакше, цю методику контролю (вірніше її чисельний аналог), ймовірно, слід використовувати на заключному етапі алгоритму.

4.3 Ієрархія об'єктів, що беруть участь в побудовах

Математичним алгоритмом називається послідовність дій (операцій), що здійснюються над певними числовими величинами. Як було сказано на початку цієї глави, такими величинами є координати точок (X, Y, Z, T). Очевидно, що ці базові елементи повинні бути згруповані по приналежності до тих чи інших об'єктах, які беруть участь у побудові. У зв'язку з цим автор вбачає необхідність короткого вступу до основи об'єктно-орієнтованого програмування.

У теорії об'єктно-орієнтованого програмування існують такі абстракції, як класи. Класи представляють собою сукупність даних і методів, що моделює який-небудь реальний об'єкт або сутність. Проілюструємо цю схему на прикладі розглянутої теми. Візьмемо стратиграфические кордону, зображені на геологічній карті. Всі ці лінії належать до одного й того самого класу, умовно назвемо його Border. Тобто кожна з них містить дані про координати точок, через які вона проходить, про свій колір, товщині, кожна відокремлює j-тий шар від j + 1-ого з безлічі представлених на карті шарів (J). Але ці дані специфічні (відрізняються один від одного за значенням) для різних кордонів. Кожна межа, таким чином, є екземпляром загального для всього їх безлічі класу Border. Іншими словами, клас визначає логічну структуру модельованої сутності, а екземпляр класу утворюється шляхом привласнення даними класу конкретних значень.

Одним з головних постулатів об'єктно-орієнтованого програмування свідчить, що дані повинні бути інкапсульовані, тобто, захищені від зміни напряму, а все взаємодія з ними слід здійснювати тільки через методи класу. Повертаючись до нашого прикладу, щоб отримати дані про становище точок якого-небудь примірника класу Border, в класі має бути передбачений метод, який може називатися отримати_масив_координат. Викликаючи його для екземпляра класу (тобто для якоїсь конкретної кордону на карті), ми отримаємо доступ до координат точок саме цієї лінії.Также в класі межа може буть реалізован метод для обчислення довжини ліній і інших операцій над даними.

Клас Horizontal

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

Зосередимося на даних класу Horizontal, які повинні бути представлені в чисельному вигляді, оскільки будь ЕОМ оперує виключно числами. Спочатку спробуємо вербально описати Horizontal - що вона являє собою по суті. Для цього розглянемо її визначення: горизонталлю називається крива лінія, яка містить всі точки на карті, які відповідають точкам місцевості, що зазнала картування, що знаходяться на однаковому гіпсометричні рівні.

З цього визначення відразу стає очевидною перша чисельна характеристика горизонталі - її гипсометрический рівень. Однак цього недостатньо, щоб повністю визначити клас Horizontal. У визначенні фігурує ще одна сутність - крива лінія. На жаль, вона не може бути представлена в чисельному вигляді безпосередньо. Тому необхідно розкласти цю складну сутність на ряд простих, описуваних чисельно. З геометрії відомо, що лінія складається з нескінченно великої кількості точок, кожна з яких повністю визначається своїми координатами. Але, оскільки персональний комп'ютер не може оперувати нескінченними величинами, а також ідеальна гладкість лінії не потрібна нам для вирішення що стоїть перед нами завдання, можна апроксимувати криву лінію кінцевим безліччю прямих відрізків, при малій довжині яких досягається прийнятна гладкість такої складової кривої [12, 17] (Рисунок 4.3)

.

Рисунок 4.2. Апроксимація кривої прямими відрізками: а) вихідна крива, b) кінцеве безліч точок (Х, Х '), з'єднаних прямими лініями.

Як видно з рисунка 3.3, в цьому випадку крива постає перед нами у вигляді кінцевого безлічі точок. Точка - це допоміжна сутність, для якої також необхідно спроектувати свій клас. Клас Point простий і містить як даних географічні координати точки на карті (X, Y).

Будь-який сучасний мова програмування підтримує роботу як з окремими даними, так з безліччю однотипних даних. Ці набори елементів одного класу (типу даних) називаються масивами. Таким чином, ми можемо тепер чисельно охарактеризувати кожен екземпляр класу Horizontal, задавши для нього висотну позначку горизонталі і масив елементів класу Point, в якому кожен елемент визначається парою координат.

Клас Border

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

Наприклад, можна пронумерувати всі межі між шарами, присвоївши найдавнішою з них індекс, рівний нулю, і збільшуючи цей показник на одиницю для все більш молодих поверхонь нашарування.

Положення об'єкта класу Border на карті визначається аналогічним чином, як для горизонталі, тобто за допомогою масиву точок з координатами (X, Y).

Клас Stratogipsa

Отже, ми маємо зараз два типи (класу) об'єктів - Border і Horizontal. Перший клас являє собою координату Т і масив пар координат (X, Y), другий - об'єднує масив пар координат (X, Y) з координатою Z. Як вже говорилося, становище точки в геологічному просторі визначається чотирма координатами: X, Y, Z і T. Це твердження призводить до наступного висновку. Початкову безліч стратоізогіпс може бути отримано шляхом знаходження точок в геологічному просторі, для яких визначені всі чотири координати, і подальшого об'єднання їх в стратоізогіпси.

З попередніх роздумів стає зрозумілим, які величини використовувати в якості членів-даних класу Stratogipsa. Кожен екземпляр цього класу повинен бути охарактеризований значеннями висотної позначки (координата Z) та індексом, що визначає приналежність до тієї чи іншої кордоні, (координата Т), а також містити масив точок, через які проходить стратоізогіпса (пари координат (X, Y)).

Класи SystemBoundaries і SystemHorizontal

Оскільки в операціях, що здійснюються для того, щоб знайти початкове безліч стратоізогіпс, беруть участь всі межі і всі горизонталі, логічним буде створити класи з масивами відповідних об'єктів в ролі даних.

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

На закінчення опису основних об'єктів, необхідних при побудові геологічного розрізу на рисунку 3.4 наводиться логічна схема розглянутих об'єктів-класів.Оскільки в операціях, що здійснюються для того, щоб знайти початкове безліч стратоізогіпс, беруть участь всі межі і всі горизонталі, логічним буде створити класи з масивами відповідних об'єктів в ролі даних.

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

Для конкретної програмної реалізації розглянутого алгоритму знадобляться й інші класи, що виконують різні службові та допоміжні функції.

4.4 Функціонування алгоритму

Відповідно до блок-діаграмою, представленої на рисунку 3.2, для побудови необхідно виконати наступні етапи: 1) розбити вихідну геологічну карту на структурні домени, що містять суцільні плікатівние комплекси; 2) послідовно перебираючи все отримані домени, знайти положення максимально можливої кількості стратоізогіпс всередині кожного з них; 3) перетинаючи лінію розрізу з отриманою системою стратоізогіпс, визначити положення стратиграфических кордонів у площині профілю; 4) перевірити побудови методом балансування.

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

Дві останні стадії алгоритму носять, якщо так можна висловитися, механічний характер.

Підготовка вихідних даних

Для побудови розрізу необхідна геологічна карта. Беручи до уваги той факт, що базовий блок алгоритму, реалізований даними програмним модулем, оперує даними одного структурного домену. Для того щоб використовувати обчислювальні потужності персонального комп'ютера для вирішення будь-яких завдань, необхідно перетворити вихідні дані в цифрову форму. У нашому випадку це можна зробити за допомогою сканера. Після сканування геологічна карта може бути збережена на жорсткому диску ПК (чи іншому носії інформації) у вигляді графічного файлу з одним з розширень растрового формату (.bmp, .jpg, .gif, .png і т.д.). На цьому закінчується перший крок на шляху до можливостей обчислювальної системи.

Тепер ми маємо растровий файл з геологічною картою і можемо переглядати його за допомогою різного програмного забезпечення призначеного для цього. Серед найбільш зручних додатків даного типу можна відзначити програму ACDSee від компанії їACD Systems, Ltd. Растровий файл описує колір, яскравість, ступінь прозорості для кожної точки в прямокутній області зображення. Очевидно, що при такому стані речей ми не зможемо вказати комп'ютеру, наприклад, на яку або лінію на нашій карті, оскільки для нього такого об'єкта не існує. А раз так, то нам не вдасться і звернеться до такого об'єкта. Все, що ми зможемо зробити, це задати будь-які з властивостей, перерахованих вище, для якогось безлічі точок зображення. Щоб мати можливість працювати з геометричними об'єктами, необхідно векторизовать наш файл.

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

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

Векторизовать растровий файл можна різними способами. Для цього існує безліч программ. Вони дозволяють провести векторизацію в ручному або напівавтоматичному режимах (в залежності від конкретної реалізації). Формати векторних файлів, в яких зберігаються результати, часто підтримуються багатьма додатками. До того ж існує досить велика кількість службових утиліт, конвертують файл з одного формату в іншій.

Визначимо тепер, які дані на геологічній карті нам необхідно векторизовать. Враховуючи поставлені перед програмою завдання, такими даними є дві системи кривих ліній - система геологічних кордонів і система горизонталей. Таким чином, для векторизації геологічної карти необхідно задати об'єкти-криві. Природним буде представити криву як одновимірний масив (ланцюжок) точок, через які вона повинна проходити.

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

Рисунок 4.3. Зовнішній вигляд головного вікна програми.

4.5 Алгоритм виконання

Діаграма функціонування блоку алгоритму побудови геологічного розрізу, яка відповідає за формування математичної моделі структури в межах домену, представлена на рисунку 4.4.

Рисунок 4.4. Взаємодія об'єктів в базовому блоці алгоритму.

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

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

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

Об'єкти

Об'єкти, що у алгоритмі вже згадувалися у відповідному розділі попередньої глави. Тоді без уваги залишилися члени-методи спроектованих класів.

Об'єкт кордону являють собою сукупність всіх кордонів на карті. Він має метод для додавання нового елемента, а також для промальовування всіх ліній кордонів на екрані монітора, який викликає подібні методи для кожного елемента в масиві. Наступним розглянемо елемент цієї множини - окремо взяту кордон. Крім масиву крапок і значення індексу (координати Т) в даній реалізації клас Border містить наступні методи. Додавання нової точки, через яку проходить лінія, видалення наявної і промальовування себе в програмі.

Об'єкт Horizontal представлений аналогічним класом, що містить масив горизонталей. Кожна Horizontal містить ті ж методи, що і Border. В принципі ці типи ліній відрізняються тільки тим, що вони містять різні координати: для кордонів - це координата Т, для горизонталей - Z.

Лінія розрізу характеризується координатами двох точок на кордоні карти. Це, по суті, відрізок прямої лінії, який визначається або координатами, або за допомогою азимута напряму, в якому ми хочемо отримати розріз. Даний клас містить кілька більшу кількість методів. Крім промальовування і додавання точки він має функцію для обчислення довжини лінії розрізу, яка необхідна при визначенні довжини профілю.

Клас SystemStratoizogips подібний за структурою Border і Horizontal. Відмінність полягає в тому, що кожна Stratogipsa в ньому містить повний опис свого становища в геологічному просторі. Примірник даного класу є математичною моделлю будь-якої конкретної геологічної структури.

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

Функції

Більшість функції, представлених на рисунку 4.10, базуються на перетинах різних ліній на геологічній карті. Детально розглянемо функцію знаходження стратоізогіпс, як найбільш представницьку. Потім коротко пояснимо роботу залишилися.

Перетин геологічних кордонів з системою горизонталей

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

Перетин геологічної кордону з горизонталлю дає нам точку, що належить поверхні пласта (того, лінія кордону якого брала участь в перетині) і знаходиться на певній висоті (рівний висотної позначці що брала участь в перетині ізогіпс). Іншими словами, точка перетину геологічної кордону з ізогіпс є структурою даних, яка містить координати в площині карти (X, Y), висотну відмітку (координата Z) і деякий числове значення - індекс кордону (Т)

Якщо взяти точки, що відносяться до однієї і тієї ж геологічної поверхні (з однаковим значенням Т) і мають однакову висотну відмітку (Z), і з'єднати їх, отримаємо стратоізогіпсу. Аналогічним чином, об'єднавши залишилися точки, ми знайдемо всі стратоізогіпси, які можна отримати перетином системи горизонталей з системою геологічних кордонів, і які відображають геологічну будову території, зображеної на карті, в трьох вимірах, утворюючи свого роду структурний каркас. Останній можна доповнювати новими структурними даними (новими стратоізогіпсамі) за допомогою різних способів, що згадуються в даній роботі.

Розглянемо послідовність дій, які необхідно вчинити для знаходження такого каркаса. Принцип дії описаного вище способу можна відобразити словосполученням <усі з усіма>. В теорії програмування відомі і більш оптимальні алгоритми для обходу елементів в масивах. Оскільки вибір того чи іншого способу не має принципового значення для отримання кінцевого результату, і дана робота присвячена аж ніяк не тонкощам програмування, автор не вважає за потрібне розгляд тут цих прийомів. Отже, перевіримо на перетин всі лінії геологічних кордонів з усіма Ізогіпс, зображеними на карті. Тепер настав час розібратися з сховищем, в яке поміщаються знайдені точки перетину.

 

Рисунок 4.5. Схема масиву, что зберігає точки Перетин горизонталей з геологічними кордонами.

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

Висновок

В даному розділі описано розроблений алгоритм побудови геологічного розрізу на карті на основі геологічних даних. А також наведено структуру даних, на основі яких проводиться робота алгоритму. Було наведено перелік реалізовани класів в підсистемі а також наведено приклад взаємодії базових об'єктів в розробленому алгоритмі.

5. ЕКОНОМІЧНА ОЦІНКА ПРОЕКТНОГО РІШЕННЯ

5.1 Економічна характеристика проектного рішення

Метою даної магістерської роботи є розробка підсистеми для створення топологічних розрізів на основі геопросторових даних. Розроблена в дипломному проекті система служить для автоматизації процес побудови, і щоб у людина, яка працює з геологічними даними могла побудувати топологічні розрізи, і на основі отриманих даних можна отримати уявлення про поведінку геологічних тіл.

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

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

Аналогом могла б служити програма ArcGis. Але, нажаль, у порівнянні з даним проектом, цей програмний продукт коштує 70 000 грн, а також мінусом цієї програми є те що в неї “закритий” код, тобто приходиться платити за можливість отримання кінцевого результату. Представлений в даній роботі програмний продукт на відмінну від аналогу буде безкоштовний.

5.2 Розрахунок витрат на розробку та впровадження проектного рішення

Витрати на розробку і впровадження програмних засобів (К) включають:

КЗАГ = К1 + К2 (5.1)

де К1 - витрати на розробку програмних засобів, грн.;

К2 - витрати на відлагодження і дослідну експлуатацію програмного засобу на ЕОМ, грн.

Витрати на розробку програмних засобів передбачають:

витрати на оплату праці розробників (Воп);

відрахування у спеціальні державні фонди (Вф);

вартість додаткових виробів, що закуповуються (Вд)

транспортно-заготівельні витрати (Втр);

витрати на придбання спецобладнання (Всо)

накладні витрати (Вн);

інші витрати (Він).

Для проведення розрахунків витрат на оплату праці необхідно визначити категорії працівників, які приймають участь в процесі проектування, їх чисельність, середньоденну заробітну плату спеціаліста відповідної категорії та трудомісткість робіт у людино-днях (людино-годинах).

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

керівник проекту, середній оклад якого 6000 грн.

інженер-програміст, середній оклад якого 4000 грн.

Середньоденна заробітна плата і-го розробника () обчислюється за формулою:

(5.2)

де - основна місячна заробітна плата розробника і-ої спеціальності, грн.

- місячний фонд робочого часу, днів (20 днів).

Денна заробітна плата керівника проекту: = = 300 грн.

Денна заробітна плата інженера-програміста: = = 200 грн.

Розрахунок витрат на оплату праці усіх розробників проекту обчислюємо за формулою:

(5.3)

де - чисельність розробників проекту і-ої спеціальності, чол.;

- час, витрачений на розробку проекту працівником і-ої спеціальності, програміст - 80 днів, а час витрачений керівником-проекту - 20 днів;

- денна заробітна плата розробника і-ої спеціальності, грн.;

= 1*20*300 + 1*80*200 = 22 000 грн.

Розрахунок витрат на оплату праці розробників зводиться у табл. 5.1.

Таблиця 5.1

Розрахунок витрат на оплату праці

п/п

Спеціальність розробника

Кількість розробників, чол.

Час роботи, дні

Денна заробітна плата розробника, грн.

Витрати на оплату праці, грн.

1

Керівник проекту

1

20

300

6000

2

Інженер-програміст

1

80

200

16000

Всього: 22000

Витрати на оплату праці працівникам тягнуть за собою додаткові зобов'язання підприємства перед державними фондами обов'язкового страхування . Підприємство зобов'язане здійснювати відрахування до фондів. Соціального страхування за ставкою єдиного соціального внеску 34,7%;

Сумарні витрати на збори фонди становлять:

=22000 *0,347=7634 грн.

Витрати на додаткові вироби, що закуповуються () (папір, флешки тощо) визначаються за їхніми фактичними цінами з врахуванням найменування, номенклатури та необхідної їх кількості в проекті. Вихідні дані та результати розрахунків оформляються у табл. 5.2.

Таблиця 5.2

№ п/п

Найменування купованих виробів

Марка, тип

Кількість на

розробку, шт.

Ціна за одиницю, грн.

Сума витрат, грн.

Сума витрат з урахуванням транспортно-заготівельних витрат, грн.

1

USB Flash-носій

Transcend 32 GB 

1

90

90

99

2

Папір

А4

1

45

45

49,5

Разом

148,5

Розрахунок витрат на спецобладнання

Витрати на придбання спецобладнання () для проведення експериментальних робіт розраховуються в тому випадку, коли для розробки та впровадження проектного рішення необхідне придбання додаткових технічних засобів. Вартість спецобладнання для виконання проекту визначається на `основі специфікації в їх потребі та фактичних цін з урахуванням заготівельних витрат. Вихідні дані та результати розрахунків зводяться у табл. 5.3.

Таблиця 5.3

Накладні витрати (Вн) проектних організацій передбачають витрати на управління, загальногосподарські, невиробничі витрати. Вони розраховуються за встановленими 22% до витрати на оплату праці

Вн = Воп * 0,22 = 22000* 0,22 = 4840 грн.

Інші витрати () - це витрати, які не враховані в попередніх статтях витрат. Вони розраховуються за встановленими відсотками (5%) до витрат на оплату праці, також включає витрати на управління, загальногосподарські, невиробничі витрати, в тому числі і транспортні.

=*0,05

=22000*0,05=1100 грн.

Витрати на розробку проектного рішення обчислюємо за формулою:

(5.4)

К1=22000 + 7634 + 7040 + 148,5 + 4840 + 1100 = 42762,5 грн.

Витрати на відлагодження і дослідну експлуатацію системи визначаємо згідно формули:

(5.5)

де - вартість однієї години роботи ПК, грн./год.

- кількість годин роботи ПК на відлагодження програми, год.

Вартість однієї години роботи ПК - 0,19614 грн., тобто вартість спожитої електроенергії: 0,7 КВт/год * 0,2802 грн = 0,19614 грн.

На налагодження системи було витрачено 10 днів (10*8 = 80 годин), тому

К2=0,19614*80=15,69 грн.

Результати розрахунків зводяться у табл. 5.4.

Таблиця 5.4.

Кошторис витрат на розробку проектного рішення

Найменування елементів витрат

Сума витрат, грн.

Витрати на розробку проектного рішення, у т.ч.:

витрати на оплату праці

22000

відрахування у спеціальні державні фонди

7634

витрати на додаткові вироби, що закуповуються

148,5

витрати на придбання спецобладнання

7040

накладні витрати

4840

інші витрати

1100

Витрати на відлагодження і дослідну експлуатацію системи

15,69

Всього

42778,19

Отже витрати на розробку і впровадження програмного засобу становлять:

К=К1+ К2=42762,5+ 15,69 = 42778,19 грн.

Визначення комплексного показника якості

Комплексний показник якості () визначається шляхом порівняння показників якості проектованої системи і вибраного аналогу.

Вибір показників якості здійснюється експертним методом.

До основної групи показників обов'язково були включені наступні:

показники призначення (актуальність, ефективність, доступність);

показники надійності (ступінь інформативності);

показники безпеки (рівень захисту);

патентно-правові показники (застереження авторських прав, відповідальність нормативним вимогам);

ергономічні показники (легкість експлуатації).

Комплексний показник якості розробленої програми визначається методом пошуку арифметичного середньозваженого з формули:

(5.6)

де - кількість одиничних показників (параметрів), прийнятих для оцінки якості розробленої програми;

- коефіцієнт вагомості кожного з параметрів щодо їхнього впливу на технічний рівень та якість проектованої системи (встановлюється експертним шляхом), причому:

(5.7)

- часткові показники якості, визначені порівнянням числових значень одиничних показників проектованої системи і аналога за формулами:

(5.8)

де , - кількісні значення і-го одиничного показника якості відповідно проектованої системи і аналога.

З попередніх двох формул вибирається та, в якій збільшення відповідає покращенню показника якості проектованої системи. Результати розрахунку зводимо в табл. 5.5.

Таблиця 5.5

Визначення комплексного показника якості проекту або аналога

Показники

Числове значення показників, бали

Відносний показник якості, Сі

Коефіцієнт вагомості

qi

Ci Чqi

Аналог

Проект. прогр. продукт

Актуальність

5

15

3

0,2

0,6

Ефективність

5

15

3

0,2

0,6

Доступність

4

15

3,75

0,05

0,19

Ступінь інформативності

4

15

3,75

0,05

0,19

Легкість експлуатації

3

15

5

0,1

0,5

Рівень захисту

4

15

3,75

0,2

0,75

Застереження авторських прав

5

15

3

0,1

0,3

Відповідність нормативним вимогам

2

15

7,2

0,1

0,72

Всього

1

3,85

Отже, комплексний показник якості дорівнює:

=0,6+0,6+0,19+0,19+0,5+0,75+0,3+0,72=3,85

Визначення експлуатаційних витрат

При порівнянні програмних засобів в експлуатаційні витрати включають вартість підготовки даних () і вартість годин роботи ПК (). Одноразові експлуатаційні витрати визначаються за формулою:

ЕП(А)=Е1П(А)+Е2П(А) (5.9)

де ЕП(А) - одноразові експлуатаційні витрати на проектне рішення (аналог), грн.;

Е1 П(А) - вартість підготовки даних для експлуатації проектного рішення (аналогу), грн.;

Е2 П(А) - вартість машино-годин роботи ПК для проектного рішення (аналогу), грн.

Е2 П(А)=К2=Sм.г.*tвід (5.10)

Вартість підготовки даних для експлуатації проектного рішення (аналогу) (Е1) визначається за формулою:

(5.11)

де і - номери категорій персоналу, які беруть участь у підготовці даних;

- чисельність співробітників і-ї категорії, чол.;

ti- трудомісткість роботи співробітників і-ї категорії, чол.;

- середньогодинна ставка робітника і-ї категорії з врахуванням відрахувань до державних цільових фондів, грн./год.

Середньогодинна ставка оператора визначається за формулою:

ЗПГі = ЗПГoj(1+b) / ФГ (5.12)

Де ЗПгoj основна місячна зарплата працівника i-ї категорії, грн.:

b - коефіцієнт, який враховує збори до спеціальних державних фондів;

Фг - місячний фонд робочого часу, год.

Отже, для проектного рішення середньогодинна ставка становить:

ЗПг1 = 6000 (1+0,347) / 20*8 = 50,51 грн.

ЗПг2 = 4000 (1+0,347) / 20*8 = 33,68 грн.

Обчислимо вартість підготовки даних для експлуатації проектного рішення та для аналогу:

Е1П=1*8*50,51 + 1*12 * 33,68 = 808,24 грн.

Е1А=1*24*50,51 + 4*36*33,68 =6062,16 грн.

Вихідні дані та результати розрахунків витрат на підготовку даних для експлуатації проектного рішення зводяться у табл. 5.6.

Таблиця 5.6

Розрахунок витрат на підготовку даних для роботи на ЕОМ

Категорія персоналу

Чисельність співробітників і-ої категорії, чол.

Час роботи співробітників і-ої категорії, год.

Середньогодинна ЗП співробітника і-ої категорії, грн.

Витрати на підготовку даних, грн.

Проектне рішення

Керівник проекту

1

8

50,51

404,08

Інженер-програміст

1

12

33,68

404,16

Всього

808,24

Аналог

Керівник проекту

1

24

50,51

1212,24

Інженер-програміст

4

36

33,68

4849,92

Всього

6062,16

Середньогодинна ставка оператора визначається за формулою:

(5.12)

де - основна місячна зарплата працівника і-ї категорії, грн.;

b- коефіцієнт, який враховує збори до спеціальних державних фондів;

- місячний фонд робочого часу, год.

Вартість машино-годин роботи ПК - 0,19614 грн. тобто.

Е2П = 20*0,19614 = 3,92 грн.

Е2А = 168*0,19614 = 32,95 грн.

Отже, одноразові експлуатаційні витрати становить:

ЕП = Е1П + Е2П = 808,24 + 3,92 = 812,16 грн.

ЕА = Е1А + Е2А = 6062,16 + 32,95 = 6095,11 грн.

Річні експлуатаційні витрати визначаються за формулою:

B(е)П(А)=ЕП(А)*NП(А) (5.13)

де B(е)ПА - експлуатаційні річні витрати проектного рішення, грн.;

NП(А)- періодичність експлуатації проектного рішення (аналогу), разів/рік.

Отже, річні експлуатаційні витрати для проектного рішення з уразуванням того, що періодичність експлуатації проектного рішення дорівнює 8 разів/рік, становлять:

В(е)П = 812,16 *8 = 6497,28 грн.

А для аналога річні експлуатаційні витрати з урахуванням періодичності експлуатації, 8 разів/рік, становлять:

В(е)П = 6095,11 * 8 = 48760,88 грн.

Порівнюючи річні експлуатаційні витрати проектного рішення і аналогу можна зробити висновки, що проектне рішення потребує набагато менше витрат на експлуатацію у порівнянні з аналогом, тому є рентабельними.

5.3 Розрахунок ціни споживання проектного рішення

Ціна споживання () - це витрати на придбання і експлуатацію проектного рішення за весь строк його служби:

(5.14)

де - ціна придбання проектного рішення, грн.;

- теперішня вартість витрат на експлуатацію проектного рішення (за весь час його експлуатації), грн.:

(5.15)

де - норматив рентабельності (25%);

- витрати на прив'язку та освоєння проектного рішення на конкретному об'єкті, грн.;

- витрати на доукомплектування технічних засобів на об'єкті, грн.;

- ставка податку на додану вартість (20 %).

Приймаємо норматив рентабельності =25%, витрат на освоєння і доукомплектування не передбачається (К0=0 грн., Кк=0 грн.).

ЦП=42778,19*(1+0,25)*(1+0,2)= 64167,29 грн.

Тоді ціна придбання аналогу за діючими ринковими цінами становить: 70 000 грн.

Теперішня вартість витрат на експлуатацію проектного рішення розраховується за формулою:

(5.16)

де - річні експлуатаційні витрати в t-ому році, грн.;

T - термін служби проектного рішення, років;

R - річна ставка проценту банків.

Якщо впродовж всього строку експлуатації , то:

(5.17)

де PV - ставка дисконту на період Т, яка визначається залежно від процентної ставки (R=23) і періоду експлуатації (Т=4 років).

Так як річні експлуатаційні витрати постійні, то теперішня вартість витрат на експлуатацію проектного рішення за весь термін становить:

29601,01

Вартість витрат на експлуатацію аналогу за весь термін становить:

222150,09

Тоді ціна споживача проектного рішення складає:

ЦСП= 64167,29 + 29601,01= 93768,3 грн.

Ціна споживання аналогу:

ЦСА=70 000 + 222150,09= 292150,09 грн.

Визначення показників економічної ефективності

Для визначення економічної ефективності розробленого проекту розраховується наступні показники:

1) Показник конкурентоспроможності:

(5.18)

2) Економічний ефект в сфері експлуатації (грн.):

(5.19)

Eекс = 48760,80-6497,28= 42263,52 грн.

3) Економічний ефект в сфері проектування (грн.):

(5.20)

Епр =70 000 - 64167,29 = 5832,71

Якщо Епр>0 та Еекс>0, то розраховується:

А) Додатковий економічний ефект в сфері експлуатації (грн.):

(5.21)

42263,52 *(1+1,23+1,69+2,197) = 258 525,95 грн.

Б) Додатковий економічний ефект в сфері проектування (грн.):

(5.22)

Eпрд=5832,71*(1+0,23)4 = 13 350,29 грн

В) Термін окупності витрат на проектування рішення (років):

(5.23)

, що становить 13 місяців.

Витрати на проектування окупляться приблизно за 13 місяців. Результуючі показники економічної ефективності записані у табл. 5.7.

Висновок

У даному розділі магістерської роботи проведена економічна оцінка проектного рішення. Розроблена система є кращою ніж аналог за комплексним показником якості (3,85). Ціна придбання 64 167,29грн. та менші експлуатаційні витрати (26 601,01 грн..) роблять проектне рішення привабливим для покупців на ринку даної продукції.

Отже, можна зробити висновок, що дане проектне рішення є конкурентоздатним відносно вибраного аналога. А також при терміні експлуатації 5 років, термін окупності становить всього 1,01 року.

Висновки

В даній магістерській роботі було розглянуто питання опрацювання геологічних даних. Головна проблема побудови геологічних даних полягає у малій кількості вихідних даних. Та інформація, яка представлена на карті і в супровідній до неї документації, часто дуже мізерна для того, щоб забезпечити точний розрахунок положення структурних елементів під поверхнею Землі. Бурові роботи з причини своєї високої вартості, проводяться часто тільки в перспективних на той чи інший вид корисної копалини районах.

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

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

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

Список використаної літератури

Visvalingam M., Whyatt D., «The Douglas-Peucker Algorithm for Line Simplification: re evaluation through visualization» CISRG Discussion Paper Series No 8, University of Hull, 1990, 19p.

Kulik L., Duckham M., Egenhofer M., «Ontology-driven map generalization», Journal of Visual Languages and Computing 16(2), 2005, режим доступа к рес.: ODMG. PDF

«Line generalization», compiled with assistance from Robert McMaster, Syracuse University, режим доступа к рес.: unit 48 - line generalization.htm

Laurini R., Thompson D., “Fundamentals of spatial information systems”. - Academic press, 1996, 679с.

Берлянт А.М., «Геоиконика». - М.: Астрея, 1996, 208с.

Берлянт А.М., Гедымин А.В., Кельнер Ю.Г., «Справочник по картографии». - М.: Недра, 1988, 427с.

Документация ArcGIS 9.0, режим доступа к рес.: What is ArcGIS 9. PDF

Shahriari N., Tao V., «Minimizing positional errors in line simplification using adaptive tolerance values», режим доступа к рес.: Характеристики_линий.PDF

Документация ArcGIS 9.0, режим доступа к рес.: ArcGIS Developer Help.chm

Васильков Ю. В., Василькова Н. Н. Компьютерные технологии вычислений в математическом моделировании. - М., 2002.

Вистелиус А. Б. Основы математической геологии (определение предмета, изложение аппарата). - Л., 1980.

Гайдук В. В., Прокопьев А. В. Методы изучения складчато-надвиговых поясов. - РАН, 1999.

Дэвис Дж. С. Статистический анализ данных в геологии. В 2 кн. - М., 1990.

Заика-Новацкий В. С. Казаков А. Н. Структурный анализ и основы структурной геологии: Учеб. Пособие. - К., 1989.

Методология геологических исследований. Отв. Ред. Ю. А. Косыгин. - ДВНЦ АН СССР, 1976.

Михайлов А. Е. Структурная геология и геологическое картирование. Изд. 4-е. - М., 1984.

Павлова А. А. Начертательная геометрия: учебник для студентов ВУЗов. - М., 1999.

Петров А. Н. Геометрические модели слоистых тел и картирование сложнодислоцированных толщ путем интерполяции элементов залегания. Метод. рекомендации. - Магадан, 1988.

Петров А. Н. Математическое моделирование тектонических движений при изучении геологических структур. - СВКНИИ ДВО РАН, 1997.

Применение персональных ЭВМ в геологических исследованиях Отв. Ред. С. Г. Бялобжеский, А. Н. Петров. Магадан: - СВКНИИ ДВО РАН, 2001.

Цветков В. Я. Геоинформационные системы и технологии. - М., 2008.

Groshong Richard H., Jr., 3-D structural geology: a practical guide to surface and subsurface map interpretation. - Berlin, Springer-Verlag, 1999.

Jean-Luc Epard, Richard H. Groshong, Jr. Excess Area and Depth to Detachment. - The American Association of Petroleum Geologists Bulletin. V.77, No.8 (August 1993), p.1291-1302.

Marshak S., Mitra G. Basic Methods of Structural Geology. - New Jersey, Prentice Hall, 1988.

Ramsay J.G., Lisle R.J. The techniques of modern structural geology. Volume 3: Application of continuum mechanics in structural geology. - London, Academic Press, 2000.

Suppe J. Principles of structural geology. - New Jersey, Prentice Hall, 2006.

Додаток

AGSObjects.java

import com.esri.java.map.ags.ArcGISFeatureLayer;

import com.esri.core.portal.Portal;

import arcgis.app.Application;

public class AGSObjects extends Application

{

private String vehicleId;

private String routeId;

private String username;

private ArcGISFeatureLayer stopsLayer;

private ArcGISFeatureLayer stopsPendingLayer;

private ArcGISFeatureLayer routesLayer;

private ArcGISFeatureLayer messagesLayer;

private ArcGISFeatureLayer messagesPendingLayer;

private ArcGISFeatureLayer vehiclesLayer;

private Portal portal;

public ArcGISFeatureLayer getVehiclesLayer()

{

return vehiclesLayer;

}

public void setVehiclesLayer(ArcGISFeatureLayer vehiclesLayer)

{

this.vehiclesLayer = vehiclesLayer;

}

public String getUsername()

{

return username;

}

public void setUsername(String username)

{

this.username = username;

}

public Portal getPortal()

{

return portal;

}

public void setPortal(Portal portal)

{

this.portal = portal;

}

public ArcGISFeatureLayer getMessagesLayer()

{

return messagesLayer;

}

public ArcGISFeatureLayer getMessagesPendingLayer()

{

return messagesPendingLayer;

}

public void setMessagesPendingLayer(ArcGISFeatureLayer messagesPendingLayer)

{

this.messagesPendingLayer = messagesPendingLayer;

}

public void setMessagesLayer(ArcGISFeatureLayer messagesLayer)

{

this.messagesLayer = messagesLayer;

}

public ArcGISFeatureLayer getStopsLayer()

{

return stopsLayer;

}

public void setStopsLayer(ArcGISFeatureLayer stopsLayer)

{

this.stopsLayer = stopsLayer;

}

public ArcGISFeatureLayer getStopsPendingLayer()

{

return stopsPendingLayer;

}

public void setStopsPendingLayer(ArcGISFeatureLayer stopsPendingLayer)

{

this.stopsPendingLayer = stopsPendingLayer;

}

public String getVehicleId()

{

return vehicleId;

}

public void setVehicleId(String vehicleId)

{

this.vehicleId = vehicleId;

}

public ArcGISFeatureLayer getRoutesLayer()

{

return routesLayer;

}

public void setRoutesLayer(ArcGISFeatureLayer routesLayer)

{

this.routesLayer = routesLayer;

}

public String getRouteId()

{

return routeId;

}

public void setRouteId(String routeId)

{

this.routeId = routeId;

}

public void clear()

{

System.out.println("+-+-+-+-+ Clearing AGSObjects +-+-+-+-+");

vehicleId = null;

routeId = null;

username = null;

stopsLayer = null;

stopsPendingLayer = null;

routesLayer = null;

messagesLayer = null;

messagesPendingLayer = null;

vehiclesLayer = null;

portal = null;

}

}

WorkOrderUtility.java

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

public class WorkOrderUtility

{

public static List<WorkOrder> getWorkOrderListForBreaks(List<WorkOrder> allWorkOrders)

{

List<WorkOrder> newList = new ArrayList<WorkOrder>();

List<WorkOrder> completedList = new ArrayList<WorkOrder>();

List<WorkOrder> futureList = new ArrayList<WorkOrder>();

//for (WorkOrder wo : allWorkOrders)

for(Iterator<WorkOrder> it = allWorkOrders.iterator(); it.hasNext(); )

{

WorkOrder wo = it.next();

if (wo.getStatus().equals(WorkOrderStatus.Completed.toString()) || wo.getStatus().equals(WorkOrderStatus.Exception.toString()))

completedList.add(wo);

else if (wo.getStatus().equals(WorkOrderStatus.AtStop.toString()))

newList.add(wo);

else if (!wo.getType().equals(NonServiceWorkOrderType.Break.toString()))

futureList.add(wo);

}

if (completedList.size() > 0 && newList.size() == 0)

{

if (completedList.size() > 1)

{

try

{

Collections.sort(completedList, new actualDepartureComparator());

}

catch(Exception e)

{

Collections.sort(completedList, new sequenceComparator());

}

}

newList.add(completedList.get(completedList.size() - 1));

}

// If the last one is a break, do not include in the list.

if (newList.size() > 0)

{

if (newList.get(0).getType().equals(NonServiceWorkOrderType.Break.toString()))

newList.clear();

}

if (futureList.size() > 1)

{

Collections.sort(futureList, new sequenceComparator());

// skip the last stop

for (int i = 0; i < futureList.size() - 1; i++)

{

newList.add(futureList.get(i));

}

}

return newList;

}

public static List<WorkOrder> getWorkOrderListForWorkOrder(List<WorkOrder> allWorkOrders, WorkOrder workOrder)

{

List<WorkOrder> newList = new ArrayList<WorkOrder>();

List<WorkOrder> completedList = new ArrayList<WorkOrder>();

List<WorkOrder> futureList = new ArrayList<WorkOrder>();

//for (WorkOrder wo : allWorkOrders)

for(Iterator<WorkOrder> it = allWorkOrders.iterator(); it.hasNext(); )

{

WorkOrder wo = it.next();

if (wo.getStatus().equals(WorkOrderStatus.Completed.toString()) || wo.getStatus().equals(WorkOrderStatus.Exception.toString()))

completedList.add(wo);

else if (wo.getStatus().equals(WorkOrderStatus.AtStop.toString()))

newList.add(wo);

else if ( ! wo.getStopName().equals(workOrder.getStopName()))

futureList.add(wo);

}

if (completedList.size() > 0 && newList.size() == 0)

{

if (completedList.size() > 1)

{

try

{

Collections.sort(completedList, new actualDepartureComparator());

}

catch(Exception e)

{

Collections.sort(completedList, new sequenceComparator());

}

}

newList.add(completedList.get(completedList.size() - 1));

}

if (futureList.size() > 1)

{

Collections.sort(futureList, new sequenceComparator());

for (int i = 0; i < futureList.size(); i++)

{

if (i == futureList.size() - 1)

{

if (!NonServiceWorkOrderType.contains(futureList.get(i).getType()))

{

newList.add(futureList.get(i));

}

}

else

newList.add(futureList.get(i));

}

}

return newList;

}

private static class actualDepartureComparator implements Comparator<WorkOrder>

{

public int compare(WorkOrder lhs, WorkOrder rhs)

{

return lhs.getActualDepartureAsLong().compareTo(rhs.getActualDepartureAsLong());

}

}

private static class sequenceComparator implements Comparator<WorkOrder>

{

public int compare(WorkOrder lhs, WorkOrder rhs)

{

return (new Integer(lhs.getSequence())).compareTo(new Integer(rhs.getSequence()));

}

}

public static Map sortByValue(Map map) {

List list = new LinkedList(map.entrySet());

Collections.sort(list, new Comparator() {

public int compare(Object o1, Object o2) {

return ((Comparable) ((Map.Entry) (o1)).getValue())


Подобные документы

  • Проектування бази даних: визначення об’єктів, структура таблиць, побудова схеми даних, забезпечення цілісності даних, створення певних відношень між таблицями, створення запитів, побудова форм, оформлення об’єктів. Розробка інструкції користувача.

    курсовая работа [1,9 M], добавлен 19.09.2014

  • Проектування інформаційної системи для супроводу баз даних. Моделі запиту даних співробітником автоінспекції та обробки запиту про машини та їх власників. База даних за допомогою SQL-сервер. Реалізація запитів, процедур, тригерів і представлення.

    курсовая работа [1,7 M], добавлен 18.06.2012

  • Розробка інформаційної системи зберігання, обробки та моделювання алгоритмів обчислення статистичних даних для змагань з плавання і з інших видів спорту. Зміст бази даних, реалізація БД засобами MySQL, створення клієнтського додатка в середовищі PHP.

    дипломная работа [4,5 M], добавлен 17.09.2011

  • Поняття та основна мета створення інформаційної системи, її різновиди та процедура побудови, підходи до обробки. Концепція баз даних та методи керування ними, предметна область і процес проектування. Структурована мова запитів SQL, елементи та оператори.

    учебное пособие [1,7 M], добавлен 14.11.2009

  • Опис процесу створення технічного завдання на розробку бази даних для сільської бібліотеки. Виявлення масиву даних та їх структури. Внесення інформації в базу. Визначення типів і зв’язків між таблицями. Створення інтерфейсу системи керування базою даних.

    контрольная работа [174,9 K], добавлен 07.01.2015

  • Бізнес процеси й елементи даних. Специфікація елементів даних. Діаграма класів проектування. Створення та використання об'єктів бази даних. Таблиці, обмеження цілісності, тригери, типові вибірки, представлення, індекси. Типові оператори модифікації даних.

    курсовая работа [255,3 K], добавлен 01.06.2019

  • База даних як організована структура, призначена для зберігання інформації. Проектування та реалізація в СУБД MS Access інформаційної системи "База даних Internet-ресурсів тестів з психології". Розробка логічної системи даних, інструкції користувача.

    курсовая работа [5,3 M], добавлен 22.10.2012

  • Аналіз об'єктів дослідження, проектування баз даних. Розробка програмного забезпечення для роботи зі спроектованою базою даних. Реалізація індексів, опис метаданих в середовищі MySQL. Специфікація DDL для MySQL, протокол тестування DDL-сценарії.

    контрольная работа [389,9 K], добавлен 05.01.2014

  • Аналіз відомих підходів до проектування баз даних. Моделі "сутність-зв'язок". Ієрархічна, мережева та реляційна моделі представлення даних. Організація обмежень посилальної цілісності. Нормалізація відносин. Властивості колонок таблиць фізичної моделі.

    курсовая работа [417,6 K], добавлен 01.02.2013

  • Поняття та переваги реляційної бази, автоматизація аналізу даних. Опис основних компонентів сховища даних AS/400. Процес перетворення оперативних даних в інформаційні. Багатовимірні бази даних (MDD). Опис даних і створення файлів в інтеграційних базах.

    реферат [36,8 K], добавлен 14.01.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.