ArcGIS
Esris kommercielle GIS-platform
Hvad det er
ArcGIS er det navn, Esri giver en hel familie af geoprogrammer, ikke ét enkelt program, og delene skelnes lettest ved at se på, hvor hver af dem kører.
På skrivebordet er det aktuelle program ArcGIS Pro, og dets systemkrav nævner Microsoft Windows og intet andet. Før Pro kom ArcMap, der blev solgt som en del af ArcGIS Desktop. Esris side om produktets livscyklus angiver ArcMap som udfaset og i »mature support«, med 10.8.x som den sidste række udgaver.
På en server er platformens centrum en portal: stedet, hvor indhold, brugere,
grupper og datatjenester oprettes og deles. Esri hoster én som ArcGIS Online, et
abonnementsbaseret software-as-a-service-produkt, og en organisation kan køre
sin egen med ArcGIS Enterprise. Data i en portal udgives som tjenester, hver med
sit eget REST-endepunkt. En featuretjeneste giver adgang til spatiale og
ikke-spatiale data i featurelag og tabeller og lader en klient tilføje,
opdatere, slette og forespørge på features. Vektorflise- og kortflisetjenester
gemmer og leverer fliser, og en billedtjeneste behandler rasterdata og sætter
dem sammen til mosaikker undervejs. Hvert lag har sin egen adresse på formen
…/FeatureServer/0 og en query-operation, der tager en where-betingelse, en
liste over felter og et outputformat: HTML som standard, JSON, GeoJSON eller
protocol buffers.
På klientsiden udgiver Esri Maps SDKs til JavaScript, Kotlin, Swift, Flutter, .NET, Qt og Java, plus plugins til Unity og Unreal Engine. Den samme udviklerdokumentation dækker også åbne biblioteker, der kan tegne ArcGIS-tjenester, nemlig Leaflet, MapLibre GL JS, OpenLayers og CesiumJS. Til scripting findes ArcPy, Python-pakken til geoprocessing-værktøjer og kortautomatisering inde i ArcGIS Pro, og ved siden af den ArcGIS API for Python og ArcGIS REST JS til at arbejde med portaler og tjenester udefra. Adgang til alt, der ikke er offentligt, går gennem API-nøgler, OAuth 2.0 eller en indlogget bruger.
På disken er det formatet file geodatabase, der følger ArcGIS-data rundt: en
mappe, hvis navn ender på .gdb, med hver af sine tabeller gemt som
.gdbtable-filer. Uden for Esris software læser GDALs indbyggede
OpenFileGDB-driver file geodatabases, har skrevet og opdateret dem siden GDAL
3.6 og har håndteret rasterlag i dem siden 3.7.
Hvorfor det betyder noget
Når en organisation allerede kører ArcGIS, står valget sjældent om, hvorvidt platformen skal tages i brug. Valget står om, hvor dens grænse går: hvilke data der bliver i portalen som tjenester, hvilke der kopieres over i en database, som resten af stakken styrer, og i hvilken retning rettelser flyder mellem de to.
Inden for grænsen er meget gjort klar på forhånd. Redigering, symbologi, deling med navngivne brugere og grupper, analysetjenester og app-byggere, der kræver lidt eller ingen kode, arbejder alle mod den samme portal, og medarbejdere, der kender ArcGIS Pro, kan arbejde videre, som de plejer. Når et lag udgives som featuretjeneste, får ethvert andet system en adresse at læse det fra.
Grænsen kan krydses fra begge sider, og det gør valget til et reelt valg frem
for en indlåsning. En featuretjeneste taler JSON og GeoJSON over almindelig
HTTP. GDALs ESRIJSON-driver læser en tjenestes URL som en fil og bladrer selv
gennem resultatet, så ogr2ogr kan kopiere et hostet lag over i PostGIS eller
en GeoPackage med én kommando. Esris egen dokumentation viser Leaflet og
MapLibre GL JS, der tegner dens tjenester. Den anden vej har GDAL selv skrevet
file geodatabases siden 3.6, så data kan sendes tilbage i Esris eget format.
Det, der koster, er alt det, der lever på begge sider på én gang. Et lag kopieret ud af en portal er en kopi nummer to, og en kopi nummer to kræver en tidsplan, en ejer og en måde at se, hvornår den er gledet væk fra originalen. Skrivebordsprogrammet kører kun på Windows og har en kommerciel licens, og det afgør, hvem på et blandet team der kan åbne et projekt. Og ArcPy følger med ArcGIS Pro og ArcGIS Server; selv installeret i et andet Python-miljø kræver pakken stadig ArcGIS Pro på maskinen, så en pipeline bygget på den kører kun dér, hvor ArcGIS gør.
Sådan ser det ud i praksis
ArcGIS optræder i to projekter på dette site, og i begge er det én del af en større stak.
Fra 2015 til 2022 bar rollen som teamlead for GIS-softwareudvikling mere end tredive GIS-projekter fra udvikling over udrulning til support. ArcGIS indgik i dem som en tjeneste udefra og ikke som platformen: kortene i browseren brugte Mapbox GL og Leaflet, og i nogle projekter kaldte de ArcGIS' eller HERE’s API’er, mens app-laget var skrevet i JavaScript, Python, PHP og SQL. Under dem lå PostgreSQL med PostGIS til geodataene, og QGIS og JOSM klarede selve dataarbejdet, så ArcGIS stod ved siden af den stak som et sæt API’er, kortene kunne kalde.
Et storstilet geospatialt analyseprojekt, hvor rollen fra 2022 til 2024 var dataingeniør, brugte ArcGIS som et af værktøjerne til reparation. Datasættenes spatiale fejl blev fundet og rettet med ArcGIS sammen med GDAL og QGIS, og den oprydning, der kom igen og igen, blev lagt over i Bash. I PostgreSQL og SQL Server omformede procedurer i PL/pgSQL og Transact-SQL de geografiske og tidsmæssige data, og de spatiale forespørgsler og indeksene lå i PostGIS. Resultatet var mere end 1.000 løste problemer og et bidrag til, at køretiden for de spatiale forespørgsler faldt med 35 %.
Hvor det går galt
Det meste besvær opstår ved grænsen mellem ArcGIS og alt andet, hvor hver side går ud fra, at den anden opfører sig som den selv.
En download af et lag stopper ved et rundt tal. En featuretjeneste
returnerer højst maxRecordCount features pr. forespørgsel, en grænse, der
sættes for hver tjeneste. Når en forespørgsel rammer flere, sætter svaret
exceededTransferLimit til true, og en klient, der læser sine features og
overser det flag, står med et ufuldstændigt lag, der ser komplet ud. Hvor laget
melder supportsPagination, bladrer klienten med resultOffset og
resultRecordCount eller med resultPaginationToken, indtil flaget kommer
tilbage som false. GDALs dokumentation tilføjer, at paginering kun er
pålidelig med en sortering på et felt som OBJECTID:
url='https://gis.example.org/arcgis/rest/services/Matrikler/FeatureServer/0'
q='query?where=1=1&outFields=*&orderByFields=OBJECTID+ASC&f=json'
ogr2ogr -f GPKG matrikler.gpkg "ESRIJSON:$url/$q"
Koordinater kommer i meter, hvor der ventedes grader. Uden en
outSR-parameter returnerer en forespørgsel geometri i det spatiale
referencesystem, tjenestens kort bruger, og det kan være et projiceret system
målt i meter. Om GeoJSON-output skriver referencen, at resultatet fra 10.8 kun
følger RFC 7946, når outSR udelades eller sættes til 4326. Enhver anden værdi
giver projicerede koordinater i en fil, der stadig kalder sig GeoJSON, og et
webkort, der læser den, placerer features langt fra, hvor de hører hjemme. Bed
om outSR=4326, når modtageren forventer længde- og breddegrad.
Et ArcMap-script holder op med at virke i ArcGIS Pro. ArcGIS Desktop, som
omfatter ArcMap, brugte versioner af Python 2, og ArcGIS Pro kører Python 3, en
linje Esri selv beskriver som kun delvist kompatibel. I ArcPy blev modulet
arcpy.mapping fjernet og erstattet af arcpy.mp. Med ArcMap udfaset er
scripts skrevet til det en migrering, der venter på at ske. Værktøjet Analyze
Tools For Pro i ArcGIS Pro markerer de problemer, der ville forhindre
Python-kode eller Python-baserede geoprocessing-værktøjer i at køre, og det er
bedre at tage den gennemgang med vilje end at opdage problemerne den dag, en
maskine bliver udskiftet.
En file geodatabase åbner skrivebeskyttet. GDAL før 3.6 læste file
geodatabases gennem OpenFileGDB, men skrev dem kun gennem den separate
FileGDB-driver, som kræver Esris FileGDB API-bibliotek, når GDAL bygges.
Rasterlag i en .gdb kræver GDAL 3.7 eller nyere. Når en pipeline skriver en
.gdb på én maskine og fejler på en anden, så sammenlign GDAL-versionerne og
driverlisterne, før dataene får skylden.
Læs mere
- Developer documentation — Esris kort over platformen: SDK’er, portal og datatjenester samt sikkerhed.
- Query (Feature Service/Layer)
— hver parameter til forespørgslen, herunder
outSR, outputformaterne og de tre måder at paginere på. - Python migration from 10.x to ArcGIS Pro — hvad der ændrede sig mellem Python 2 og 3 og i selve ArcPy.
- ArcMap Life Cycle — ArcMaps supportstatus, og hvorfor 10.8.x er den sidste række.
- ESRI File Geodatabase vector (OpenFileGDB)
— GDALs driver til
.gdb-mapper med de versioner, der tilføjede skrivning og rasterunderstøttelse. - ESRIJSON / FeatureService driver — at læse resultater fra featuretjenester med GDAL, og hvordan den automatiske paginering virker.