Домашнє Завдання 2 - ViriAldi/HomeworkCycle2020 GitHub Wiki

Функціональні та нефункціональні вимоги

Функціональні вимоги:

  • Програма повинна надавати можливість користувачу отрмувати висоту над рівнем моря при введенні географічних координат

  • Програма повинна за запитом користувача будувати та візуалізувати точну трьохвимірну модель ландшафту місцевості, вибраної користувачем

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

  • Програма повинна локально зберігати дані про ландшафт (висоту над рівнем моря) Землі у всіх доступних точках

  • Програма повинна локально зберігати дані про погодні умови,

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

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

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

  • Програма повинна надавати доступ до завантаження/збереження створених поверхонь, ландафтів, шляхів.

Нефункціональні вимоги:

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

  • Програма повинна працювати як і як додаток на пристроях, так як і публічна веб-сторінка в мережні інтернет.

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

  • Програма повинна пропонувати користувачу зручний графічний інтерфейс

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

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

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

Дані з мережі інтернет

Загальна інформація

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

Перелік типів даних, з якими програма буде працювати:

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

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

  • Формати геоданх json, kmz - формати, які зберігають дані про накладні шари і фільтри для візуалізації на поверхні. Застосовуватимуться рідко, для їх використання будуть використані відповідні модулі бібліотеки Python. json файл - JavaScript Notation Object - файл, що містить дані в вигляді об'єкта JavaScript - набору ключів (string) та значень (числа, рядки або інші об'єкти). Якщо значеннями є інші об'єкти, то такий об'єкт розглядають рекрсивно у всю глибину, з цих причин він не повинен містити циклів і повинен бути скінченним.

  • Веб-сторінка, яка буде надавати доступ до функцій і даних програми буде побудована на базі HTML5 розмітки, css стилів та скриптів, написаних мовою JavaScript (ECMA 6). Для реалізації буде використані файли формату .html, .css, .js. HTML5 - мова розмітки (HyperText Markup Language), яка використовується для реалізації і створення структури веб-сторінок (DOM модель), його структуар - дерево тегів, у тегів можеть бути свої атрибути й значення. CSS - каскадні таблиці стилів (Cascading Style Sheets), використовуються для надання веб-сторінці приємного для користувача зовнішнього вигляду, для розміщення та масштабування на сторінці її елементів. Скрипти, написані мовою JavaScript, - основа анімацій на веб-сторінці та взаємодії користувача та елементів сторінки.

  • Деякі геодані будуть зберігатись і оброблюватись в форматі зображень - файлів формату .png та .jpeg. Наприклад супутникові знімки поверхні Землі, або локальні фотографії поверхні та ландшафту.

Модулі та Бібліотеки

  • Pandas - основна бібліотека мови Python для роботи з даними, файлами, датасетами. Дозволяє створити двохвимірну колецію даних (DataFrame) з назвами рядків та стовпців та виконувати над цією колекцією велику кількість різноманітних операцій. Наприклад злиття колекцій, перетин, швидкий підрахунок статистики, запити до великої кількості даних, data reducing, pivot tables, переіндексація, boolean masking, multindexing, broadcasting, сортування. Функціонал бібліотеки Pandas дозволяє напряму зчитувати дані з excel, csv, json зразу в об'єкт DataFrame. Використовує бібліотеку numpy для оптимізації розрахунків.

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

  • PIL.Image - базова бібліотека мови Python для відкриття і роботи з зображеннями, в тому числі й з форматами .jpeg, .png, .tiff. Надає можливість відкривати зображення, перетворювати у numpy масив, оброблювати їх, зберігати зображення, отримувати metadata зображень. Тісно переплітається з numpy i pandas

  • Matplotlib - популярна бібліотека мови Python для створення візуалізацій даних, надає безліч можливостей створення візуалізацій: 2д графіки, гістограми, точки, 3д графіки, фігури, поверхні, полігони, надання стилів візуалізаціям, статистичний аналіз, створення зразу декількох візуалізацій, збереження візуалізацій. Тісно переплітається з numpy, pandas та використовує їх

  • Django - Python фреймворк для створення і реалізації веб-сторінки. Надає цілу низку можливостей для маніпуляцій з веб-сторінкою, її вмістом, доступом, безпекою, неперервною роботою, тощо

  • re - Python бібліотека для роботи з регулярними виразами (Regular Expressions), яка надає можливості пошуку, заміни, маніпуляцій.