Spring til indhold

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

Ordliste