# QGIS

## Що це таке

QGIS — це настільна програма для перегляду, редагування та аналізу
геопросторових даних. Проєкт стартував у травні 2002 року під назвою Quantum
GIS, і перша мета була скромною: переглядач геоданих. Відтоді він виріс у
повноцінну геоінформаційну систему, яка відкриває шари з файлів, просторових баз
даних і вебсервісів карт, накладає їх на одну карту, редагує геометрію й
атрибути, проганяє над ними аналіз і верстає результат у друковану карту, атлас
чи звіт.

QGIS є офіційним проєктом Open Source Geospatial Foundation, поширюється за GNU
General Public License, написаний на C++ з бібліотекою Qt і працює на більшості
Unix-платформ, у Windows і macOS. Новий випуск виходить приблизно раз на чотири
місяці. Кожен третій із них, починаючи з 2.8, отримує статус випуску з
довготривалою підтримкою (LTR) і супроводжується, доки його не замінить
наступний такий випуск, а найновіша гілка щомісяця отримує виправний випуск. На
момент написання це 3.44.15 і 4.2.3.

Багато з того, що читає QGIS, він читає через інші проєкти. Векторні файли
надходять через драйвери GDAL, звідси й такий довгий перелік форматів. Растри
приходять тим самим шляхом. Таблиці в PostGIS, SpatiaLite, SQL Server та Oracle
читаються напряму, і власний опис можливостей проєкту наголошує, що дані
показуються в їхньому рідному форматі й проєкції без перетворення на якийсь
внутрішній формат.

Коли QGIS стає спільним інструментом команди, важать ще чотири складники.

Одиниця роботи — проєкт. Файл `.qgs` — це XML, що описує джерело даних кожного
шару разом зі стилем, підписами, формами й макетами друку. Файл `.qgz` — це
zip-архів із тим самим XML і файлом `.qgd` з допоміжними даними. Проєкт можна
також зберегти в GeoPackage або в базі PostgreSQL поруч із шарами, які він
описує.

Processing — це рамка для аналізу: набір алгоритмів від власного провайдера QGIS
і від GDAL, GRASS як ще один провайдер, конструктор моделей, що зшиває алгоритми
в граф, пакетний режим та історія кожного запуску. Ті самі алгоритми працюють і
без робочого столу, через утиліту командного рядка `qgis_process`:

```sh
qgis_process run native:reprojectlayer -- \
  INPUT=dorohy.shp TARGET_CRS=EPSG:32636 OUTPUT=dorohy.gpkg
```

PyQGIS — це інтерфейс Python, на якому стоять плагіни, вбудована консоль і
окремі скрипти. А QGIS Server публікує файл проєкту в мережі як стандартні
сервіси OGC — WMS, WFS, WCS та OGC API Features — і працює за вебсервером як
застосунок FastCGI або CGI.

## Чому це важливо

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

Першу половину визначають ліцензія й платформа. Місця купувати не треба, а той
самий випуск ставиться на Linux, macOS і Windows, тож консультант, співробітники
клієнта й сервер збірки можуть запускати саме ту версію, в якій зроблено проєкт.
Комерційна настільна програма Esri, ArcGIS Pro, працює лише у Windows.

Друга половина стосується того, що переживе сеанс роботи. QGIS читає PostGIS
напряму, тож виправлення потрапляє в ту саму таблицю, з якої бере дані
застосунок, і звіряти потім експорт не доводиться. Історія Processing зберігає
кожен алгоритм із параметрами, і кожен запис можна скопіювати як команду Python
або як команду `qgis_process`. Виправлення, знайдене вручну в діалоговому вікні,
стає рядком у скрипті, який далі проганяється на кожній новій поставці даних.
Файл проєкту йде ще далі: QGIS Server публікує його без змін, тож стиль,
налаштований на робочому столі, і є тим стилем, який вебклієнт отримує через
WMS.

Ціна здебільшого в дисципліні. Проєкт посилається на дані, яких сам не містить,
тож переноситься рівно настільки, наскільки дозволяють збережені в ньому шляхи.
А вибір між LTR і найновішим випуском — справжній вибір: один змінюється
повільно, інший приносить нові можливості кожні чотири місяці.

## Як це виглядає на практиці

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

З 2015 до 2022 року, на посаді керівника команди розробки GIS-програмного
забезпечення, через цю роль пройшло
[постачання понад тридцяти GIS-проєктів](/uk/portfolio/led-the-development-deployment-and-support-of-over-35/)
— від розробки й розгортання до підтримки після запуску. QGIS і JOSM були
інструментами для самої роботи з даними. Під ними лежав PostgreSQL із PostGIS,
GDAL/OGR переносив дані між shapefile, GeoJSON, GeoTIFF, KML і векторними
плитками, а попереду стояли вебкарти на Mapbox GL і Leaflet. Тематично проєкти
тягнулися від цифрової 2D- і 3D-картографії та обробки даних LiDAR, через
георектифікацію й векторизацію, аж до карт приміщень і навігації в них.

Пізніше, у 2022–2024 роках, QGIS став одним з інструментів виправлення: роль
інженера даних у масштабному проєкті геопросторової аналітики вимагала знайти й
усунути
[понад 1 000 проблем у географічних даних і часових рядах](/uk/portfolio/resolved-1-000-issues-in-geographical-data-and-7/).
QGIS працював разом із GDAL та ArcGIS, і цією комбінацією діагностували й
виправляли просторові помилки, а очищення, що повторювалося знову й знову,
перейшло до скриптів на Bash. Просторові запити й індексацію обслуговував
PostGIS, і ця робота допомогла скоротити на 35% час виконання просторових
запитів.

## Де виникають проблеми

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

**Шар опиняється не там.** QGIS на льоту перепроєктовує кожен шар у систему
координат проєкту, тож шари з різних систем лягають один на одного рівно, якщо
кожен шар правильно оголошує власну систему. Shapefile, що прийшов без файлу
`.prj`, не оголошує нічого, і залежно від налаштування в Options QGIS лишає шар
із невідомою системою, питає про неї або мовчки призначає систему проєкту чи
типову. Як виправляти, залежить від того, яку саме помилку зроблено. Якщо
координати правильні, а хибне лише оголошення, Assign projection або Define
projection змінюють оголошення і не зсувають жодної точки. Якщо ж координати
справді в іншій системі, їх перераховує Reproject layer. Find projection з тієї
самої групи інструментів показує системи, в яких охоплення шару лягло б на
вибрану ділянку, і перетворює здогад на короткий список.

**Площі виходять у квадратних градусах.** У мові виразів є дві схожі функції
площі. `$area` слідує налаштуванням еліпсоїда й одиниць проєкту, тож за
вибраного еліпсоїда дає еліпсоїдну площу у вибраних одиницях. `area($geometry)`
завжди рахує на площині у власній системі шару й повертає її одиниці, тож для
шару в довготі й широті дає квадратні градуси — маленьке дробове число, яке в
таблиці виглядає цілком правдоподібно. Для будь-якого числа, яке читатиме
людина, беріть `$area` або перед вимірюванням перепроєктуйте шар у прямокутну
систему, що пасує до місцевості.

**Проєкт відкривається з половиною шарів.** Проєкт зберігає, де лежать дані
кожного шару, а не самі дані. Варто перенести теку, перейменувати файл чи
відкрити проєкт на комп'ютері колеги — і збережені шляхи ведуть у нікуди. QGIS
тоді показує діалог Handle Unavailable Layers, і якщо шари залишити, проєкт
відкривається з ними в списку, але порожніми, доки кожне джерело не полагодять.
Якщо проєкт зберігає шляхи відносно файлу проєкту, а це налаштування у
властивостях проєкту, теку з проєктом і даними можна переносити як одне ціле.
Для спільної роботи проєкт і шари тримаються разом, коли проєкт зберігається в
тій самій базі PostgreSQL чи GeoPackage, що й шари.

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

## Що почитати далі

- [Foreword](https://docs.qgis.org/latest/en/docs/user_manual/preamble/foreword.html)
  — власний опис проєкту: що таке QGIS, з чого він почався і за якою ліцензією
  поширюється.
- [Road Map](https://www.qgis.org/resources/roadmap/) — цикл випусків, як
  обирають випуски з довготривалою підтримкою, і поточний розклад.
- [Working with Projections](https://docs.qgis.org/latest/en/docs/user_manual/working_with_projections/working_with_projections.html)
  — перепроєктування на льоту і що QGIS робить із шаром без системи координат.
- [Working with Project Files](https://docs.qgis.org/latest/en/docs/user_manual/introduction/project_files.html)
  — формати `.qgs` і `.qgz`, проєкти в базах даних і відновлення зламаних
  шляхів.
- [Using processing from the command line](https://docs.qgis.org/latest/en/docs/user_manual/processing/standalone.html)
  — `qgis_process`, його команди і як передавати параметри.
- [Introduction](https://docs.qgis.org/latest/en/docs/server_manual/introduction.html)
  — огляд у посібнику QGIS Server: які сервіси він публікує з проєкту.

<https://engineer.company/uk/glossary/qgis/>
