ArcGIS
комерційна ГІС-платформа від Esri
Що це таке
ArcGIS — це назва, яку Esri дає цілій родині геопросторових програм, а не одній програмі, і частини цієї родини найпростіше розрізняти за тим, де кожна з них працює.
На робочому столі актуальна програма — ArcGIS Pro, і в її системних вимогах значиться лише Microsoft Windows. До Pro була ArcMap, яку продавали як частину ArcGIS Desktop. Сторінка життєвого циклу продукту в Esri позначає ArcMap як застарілу, що перебуває на етапі «mature support», а 10.8.x — як її останню серію випусків.
На сервері центр платформи — портал: місце, де створюють і поширюють вміст,
користувачів, групи та сервіси даних. Esri розміщує один такий портал як ArcGIS
Online, продукт за моделлю software-as-a-service із передплатою, а організація
може запустити власний за допомогою ArcGIS Enterprise. Дані в порталі публікують
як сервіси, кожен зі своєю кінцевою точкою REST. Сервіс об’єктів (feature
service) дає доступ до просторових і непросторових даних у шарах об’єктів і
таблицях і дозволяє клієнту додавати, оновлювати, видаляти об’єкти та робити до
них запити. Сервіси векторних плиток і плиток карти зберігають і віддають
плитки, а сервіс зображень обробляє растрові дані й складає з них мозаїку на
льоту. Кожен шар має власну адресу виду …/FeatureServer/0 і операцію query,
яка приймає умову where, список полів і формат виводу: HTML за замовчуванням,
JSON, GeoJSON або protocol buffers.
На боці клієнта Esri випускає Maps SDK для JavaScript, Kotlin, Swift, Flutter, .NET, Qt і Java, а також плагіни для Unity та Unreal Engine. Та сама документація для розробників охоплює й відкриті бібліотеки, які вміють малювати сервіси ArcGIS: Leaflet, MapLibre GL JS, OpenLayers і CesiumJS. Для скриптів є ArcPy, пакет Python для інструментів геообробки й автоматизації карт усередині ArcGIS Pro, а поруч із ним ArcGIS API for Python і ArcGIS REST JS для роботи з порталами й сервісами ззовні. Доступ до всього непублічного йде через ключі API, OAuth 2.0 або користувача, який увійшов у систему.
На диску разом із даними ArcGIS мандрує формат file geodatabase: каталог, назва
якого закінчується на .gdb, а кожна таблиця в ньому зберігається як файли
.gdbtable. Поза програмами Esri вбудований драйвер OpenFileGDB у GDAL читає
file geodatabase, з GDAL 3.6 записує й оновлює їх, а з 3.7 працює і з растровими
шарами в них.
Чому це важливо
Коли організація вже працює з ArcGIS, питання рідко полягає в тому, чи впроваджувати платформу. Питання в тому, де проходить її межа: які дані лишаються в порталі як сервіси, які копіюють у базу даних під контролем решти стеку і в якому напрямку між ними рухаються правки.
Усередині цієї межі багато чого вже готове. Редагування, символіка, спільний доступ для іменованих користувачів і груп, аналітичні сервіси й конструктори застосунків, що потребують мінімуму коду, працюють з одним і тим самим порталом, а співробітники, які знають ArcGIS Pro, далі працюють так, як звикли. Публікація шару як сервісу об’єктів дає кожній іншій системі адресу, звідки його можна читати.
Межу можна перетнути з обох боків, і саме тому вибір справжній, а не прив’язка
до постачальника. Сервіс об’єктів говорить JSON і GeoJSON через звичайний HTTP.
Драйвер ESRIJSON у GDAL читає URL сервісу як файл і сам гортає сторінки
результату, тож ogr2ogr копіює розміщений шар у PostGIS або GeoPackage однією
командою. Власна документація Esri показує, як Leaflet і MapLibre GL JS малюють
її сервіси. У зворотному напрямку GDAL сам записує file geodatabase з версії
3.6, тож дані можна повернути у власному форматі Esri.
Зусиль вимагає все, що живе по обидва боки одночасно. Шар, скопійований із порталу, — це друга копія, а другій копії потрібні розклад, власник і спосіб помітити, коли вона розійшлася з першою. Настільна програма працює лише на Windows і має комерційну ліцензію, і це визначає, хто в змішаній команді може відкрити проєкт. А ArcPy постачається з ArcGIS Pro та ArcGIS Server; навіть встановлений в інше середовище Python, він однаково потребує ArcGIS Pro на машині, тож конвеєр, побудований на ньому, працює лише там, де встановлено ArcGIS.
Як це виглядає на практиці
ArcGIS з’являється у двох проєктах на цьому сайті, і в обох він лише одна частина ширшого стеку.
У 2015–2022 роках роль керівника команди розробки GIS-програмного забезпечення охоплювала понад тридцять GIS-проєктів від розробки й розгортання до підтримки, і ArcGIS стояв поруч із їхнім стеком як набір API, до яких могли звертатися карти. Самі карти будували на Mapbox GL і Leaflet, часом із викликами API ArcGIS чи HERE; рівень застосунку писали на JavaScript, Python, PHP і SQL, просторові дані лежали в PostgreSQL із PostGIS, а саму роботу з даними вели в QGIS і JOSM.
Пізніша посада, інженер даних у масштабному проєкті геопросторової аналітики у 2022–2024 роках, відвела ArcGIS місце серед інструментів для виправлень. Просторові помилки діагностували й виправляли за допомогою GDAL, QGIS та ArcGIS у поєднанні, а повторювані завдання з очищення автоматизували на Bash. Процедури на PL/pgSQL і Transact-SQL керували географічними й часовими даними в PostgreSQL та SQL Server і трансформували їх, а PostGIS відповідав за просторові запити й індексацію. Усунених проблем набралося понад 1 000, і ця робота доклалася до скорочення часу виконання просторових запитів на 35%.
Де виникають проблеми
Більшість проблем лежить на межі між ArcGIS і всім іншим, де кожна сторона вважає, що інша поводиться так само, як вона сама.
Завантаження шару зупиняється на круглому числі. Сервіс об’єктів повертає
щонайбільше maxRecordCount об’єктів на запит, і цю межу задають для кожного
сервісу окремо. Коли під запит підпадає більше, відповідь виставляє
exceededTransferLimit у true, і клієнт, який читає об’єкти й ігнорує цей
прапорець, отримує неповний шар, що виглядає повним. Якщо шар повідомляє
supportsPagination, клієнт гортає сторінки через resultOffset і
resultRecordCount або через resultPaginationToken, доки прапорець не
повернеться як false. Документація GDAL додає, що пагінація надійна лише із
сортуванням за полем на кшталт OBJECTID:
url='https://gis.example.org/arcgis/rest/services/Dilianky/FeatureServer/0'
q='query?where=1=1&outFields=*&orderByFields=OBJECTID+ASC&f=json'
ogr2ogr -f GPKG dilianky.gpkg "ESRIJSON:$url/$q"
Координати приходять у метрах там, де чекали градусів. Без параметра outSR
запит повертає геометрію в просторовій системі відліку карти сервісу, а це може
бути проєкційна система в метрах. Щодо виводу GeoJSON довідник каже, що з версії
10.8 результат узгоджується з RFC 7946 лише тоді, коли outSR пропущено або
встановлено в 4326. Будь-яке інше значення дає проєктовані координати у файлі,
який досі називає себе GeoJSON, і вебкарта, що його читає, поставить об’єкти
далеко від їхнього місця. Просіть outSR=4326 щоразу, коли споживач чекає
довготу й широту.
Скрипт для ArcMap перестає працювати в ArcGIS Pro. ArcGIS Desktop, до якого
входить ArcMap, використовував версії Python 2, а ArcGIS Pro працює на Python 3,
гілці, яку Esri описує як лише частково сумісну. У самому ArcPy модуль
arcpy.mapping прибрали й замінили на arcpy.mp. Оскільки ArcMap застаріла,
скрипти для неї рано чи пізно доведеться переносити. Інструмент Analyze Tools
For Pro в ArcGIS Pro позначає проблеми, які завадили б запуску коду Python або
інструментів геообробки на основі Python, і краще пройти цей етап свідомо, ніж
виявити все в день заміни машини.
File geodatabase відкривається лише для читання. GDAL до 3.6 читав file
geodatabase через OpenFileGDB, а записував лише через окремий драйвер FileGDB,
якому під час збирання GDAL потрібна бібліотека FileGDB API від Esri. Растрові
шари в .gdb потребують GDAL 3.7 або новішого. Коли конвеєр записує .gdb на
одній машині й падає на іншій, порівняйте версії GDAL і списки драйверів, перш
ніж звинувачувати дані.
Що почитати далі
- Developer documentation — карта платформи від Esri: SDK, портал і сервіси даних, а також безпека.
- Query (Feature Service/Layer)
— кожен параметр запиту, зокрема
outSR, формати виводу і три способи гортати сторінки. - Python migration from 10.x to ArcGIS Pro — що змінилося між Python 2 і 3 та в самому ArcPy.
- ArcMap Life Cycle — статус підтримки ArcMap і чому 10.8.x — остання серія.
- ESRI File Geodatabase vector (OpenFileGDB)
— драйвер GDAL для каталогів
.gdbіз версіями, що додали запис і підтримку растрів. - ESRIJSON / FeatureService driver — читання результатів сервісу об’єктів через GDAL і як працює його автоматична пагінація.