Перейти до вмісту

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:

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-проєктів — від розробки й розгортання до підтримки після запуску. QGIS і JOSM були інструментами для самої роботи з даними. Під ними лежав PostgreSQL із PostGIS, GDAL/OGR переносив дані між shapefile, GeoJSON, GeoTIFF, KML і векторними плитками, а попереду стояли вебкарти на Mapbox GL і Leaflet. Тематично проєкти тягнулися від цифрової 2D- і 3D-картографії та обробки даних LiDAR, через георектифікацію й векторизацію, аж до карт приміщень і навігації в них.

Пізніше, у 2022–2024 роках, QGIS став одним з інструментів виправлення: роль інженера даних у масштабному проєкті геопросторової аналітики вимагала знайти й усунути понад 1 000 проблем у географічних даних і часових рядах. 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 — власний опис проєкту: що таке QGIS, з чого він почався і за якою ліцензією поширюється.
  • Road Map — цикл випусків, як обирають випуски з довготривалою підтримкою, і поточний розклад.
  • Working with Projections — перепроєктування на льоту і що QGIS робить із шаром без системи координат.
  • Working with Project Files — формати .qgs і .qgz, проєкти в базах даних і відновлення зламаних шляхів.
  • Using processing from the command line — qgis_process, його команди і як передавати параметри.
  • Introduction — огляд у посібнику QGIS Server: які сервіси він публікує з проєкту.

Словник