ArcGIS
den kommersiella GIS-plattformen från Esri
Vad det är
ArcGIS är det namn som Esri ger en hel familj av geospatial mjukvara snarare än ett enda program, och delarna är lättast att skilja åt efter var var och en körs.
På skrivbordet heter den aktuella applikationen ArcGIS Pro, och dess systemkrav anger Microsoft Windows och inget annat. Före Pro fanns ArcMap, som ingick i det som såldes som ArcGIS Desktop. Esris sida om livscykeln listar ArcMap som utfasat och i fasen Mature Support, med 10.8.x som den sista serien av versioner.
På en server är plattformens centrum en portal: platsen där innehåll, användare, grupper och
datatjänster skapas och delas. Esri driver en sådan som ArcGIS Online, en prenumerationstjänst i
form av software as a service, och en organisation kan köra en egen med ArcGIS Enterprise. Data i en
portal publiceras som tjänster, var och en med sin egen REST-endpoint. En feature service ger
åtkomst till spatiala och icke-spatiala data i feature layers och tabeller och låter en klient lägga
till, uppdatera, radera och söka bland objekten. Tjänster för vektortiles och karttiles lagrar och
levererar tiles, och en image service bearbetar och mosaikerar rasterdata i farten. Varje lager har
en egen adress, av formen …/FeatureServer/0, och en query-operation som tar en where-sats, en
lista med fält och ett utdataformat: HTML som standard, JSON, GeoJSON eller protocol buffers.
På klientsidan publicerar Esri Maps SDK:er för JavaScript, Kotlin, Swift, Flutter, .NET, Qt och Java, plus pluginer för Unity och Unreal Engine. Samma utvecklardokumentation täcker även öppna bibliotek som kan rita ArcGIS-tjänster, nämligen Leaflet, MapLibre GL JS, OpenLayers och CesiumJS. För skript finns ArcPy, Python-paketet för geoprocessing-verktyg och automatisering av kartor inuti ArcGIS Pro, vid sidan av ArcGIS API for Python och ArcGIS REST JS för arbete med portaler och tjänster utifrån. Åtkomst till allt som inte är publikt sker via API-nycklar, OAuth 2.0 eller en inloggad användare.
På disk är det format som följer med ArcGIS-data en file geodatabase: en katalog vars namn slutar på
.gdb, med var och en av sina tabeller som .gdbtable-filer inuti. Utanför Esris mjukvara läser
GDAL:s inbyggda drivrutin OpenFileGDB file geodatabases, har kunnat skriva och uppdatera dem sedan
GDAL 3.6 och har hanterat rasterlager i dem sedan 3.7.
Varför det spelar roll
När en organisation redan kör ArcGIS är frågan sällan om den ska införa det. Beslutet gäller var gränsen går: vilka data som stannar i portalen som tjänster, vilka som kopieras till en databas som resten av stacken styr, och åt vilket håll ändringar flödar mellan de två.
Innanför gränsen kommer mycket färdigt. Redigering, symbologi, delning med namngivna användare och grupper, analystjänster och appbyggare som kräver lite kod fungerar alla mot samma portal, och personal som kan ArcGIS Pro kan fortsätta arbeta som de redan gör. Att publicera ett lager som en feature service ger varje annat system en adress att läsa det från.
Gränsen går att korsa från båda hållen, och det gör valet till ett verkligt val snarare än en
inlåsning. En feature service talar JSON och GeoJSON över vanlig HTTP. GDAL:s drivrutin ESRIJSON
läser URL:en till en feature service som om den vore en fil och bläddrar själv igenom resultatet
sida för sida, så ogr2ogr kan kopiera ett hostat lager till PostGIS eller en GeoPackage med ett
enda kommando. Esris egen dokumentation visar hur Leaflet och MapLibre GL JS ritar dess tjänster. I
andra riktningen har GDAL själv kunnat skriva file geodatabases sedan 3.6, så data kan gå tillbaka i
Esris eget format.
Det som kostar arbete är allt som finns på båda sidor samtidigt. Ett lager som kopieras ut ur en portal är en andra kopia, och en andra kopia behöver en tidsplan, en ägare och ett sätt att märka när den har glidit isär från den första. Skrivbordet finns bara för Windows och är kommersiellt licensierat, vilket påverkar vem i ett blandat team som kan öppna ett projekt. Och ArcPy levereras med ArcGIS Pro och ArcGIS Server; även installerat i en annan Python-miljö kräver det fortfarande ArcGIS Pro på maskinen, så en datapipeline som bygger på det kan bara köras där ArcGIS finns.
Så ser det ut i praktiken
ArcGIS dyker upp i två projekt på den här webbplatsen, och i inget av dem utgör det hela stacken.
Mellan 2015 och 2022, i rollen som teamledare för utveckling av GIS-mjukvara, byggdes webbkartorna i mer än trettio GIS-projekt som också driftsattes och fick support på Mapbox GL och Leaflet, och ibland anropade de ArcGIS- eller HERE-API:erna. Logiken bakom kartorna skrevs i JavaScript, Python, PHP och SQL, PostGIS i PostgreSQL höll geodatan, och QGIS och JOSM skötte det praktiska dataarbetet. ArcGIS stod alltså bredvid den stacken, som en tjänst kartorna kunde fråga, och var inte grunden den vilade på.
I nästa roll, som dataingenjör 2022–2024 i ett storskaligt geospatialt analysprojekt, fick ArcGIS en annan uppgift: att reparera data. Där var det ett av flera verktyg, bland dem GDAL och QGIS, när spatiala fel skulle spåras och rättas, och den rensning som behövdes om och om igen lades i Bash-skript. Geografiska och tidsberoende data transformerades i procedurer skrivna i PL/pgSQL och Transact-SQL, i PostgreSQL respektive SQL Server, medan PostGIS svarade för de avancerade spatiala frågorna och indexeringen. Över 1 000 problem blev åtgärdade, och för de spatiala databasfrågorna bidrog det till att körtiden kortades med 35 %.
Var det går fel
Det mesta besväret sitter vid gränsen mellan ArcGIS och allt annat, där varje sida utgår från att den andra beter sig som den själv.
En nedladdning av ett lager stannar vid ett jämnt tal. En feature service returnerar högst
maxRecordCount objekt per förfrågan, en gräns som sätts per tjänst. När en sökning matchar fler
sätter svaret exceededTransferLimit till true, och en klient som läser objekten och ignorerar
den flaggan sitter med ett ofullständigt lager som ser komplett ut. Där lagret rapporterar
supportsPagination bläddrar klienten med resultOffset och resultRecordCount, eller med
resultPaginationToken, tills flaggan kommer tillbaka som false. GDAL:s dokumentation tillägger
att bläddringen bara är tillförlitlig med en sortering på ett fält som OBJECTID:
url='https://gis.example.org/arcgis/rest/services/Parcels/FeatureServer/0'
q='query?where=1=1&outFields=*&orderByFields=OBJECTID+ASC&f=json'
ogr2ogr -f GPKG parcels.gpkg "ESRIJSON:$url/$q"
Koordinater kommer i meter där grader väntades. Utan parametern outSR returnerar en sökning
geometrin i det spatiala referenssystemet för tjänstens karta, vilket kan vara ett projicerat system
som mäts i meter. För utdata i GeoJSON säger referensen att resultatet från 10.8 följer RFC 7946
bara när outSR utelämnas eller sätts till 4326. Alla andra värden ger projicerade koordinater i en
fil som ändå kallar sig GeoJSON, och en webbkarta som läser den placerar objekten långt från där de
hör hemma. Be om outSR=4326 så fort mottagaren förväntar sig longitud och latitud.
Ett ArcMap-skript slutar fungera i ArcGIS Pro. ArcGIS Desktop, som omfattar ArcMap, använde
versioner av Python 2, och ArcGIS Pro kör Python 3, en övergång som Esri beskriver som bara delvis
kompatibel. Inom ArcPy togs modulen arcpy.mapping bort och ersattes av arcpy.mp. Med ArcMap
utfasat är varje skript som skrevs för det en flytt som väntar på att hända. Pros verktyg Analyze
Tools For Pro flaggar de problem som skulle hindra Python-kod eller Python-baserade
geoprocessing-verktyg från att köras, och att göra den genomgången med avsikt slår att upptäcka
problemen den dag en maskin byts ut.
En file geodatabase öppnas skrivskyddad. GDAL före 3.6 kunde läsa en file geodatabase via
OpenFileGDB men skriva en bara via den separata drivrutinen FileGDB, som kräver Esris bibliotek
FileGDB API när GDAL byggs. Rasterlager inuti en .gdb kräver GDAL 3.7 eller senare. När en
datapipeline skriver en .gdb på en maskin och misslyckas på en annan, jämför GDAL-versionerna och
listorna över drivrutiner innan data får skulden.
Läs mer
- Developer documentation — Esris karta över plattformen: SDK:er, portal- och datatjänster samt säkerhet.
- Query (Feature Service/Layer)
— varje frågeparameter, bl.a.
outSR, utdataformaten och de tre sätten att bläddra. - Python migration from 10.x to ArcGIS Pro — vad som ändrades mellan Python 2 och 3 och i själva ArcPy.
- ArcMap Life Cycle — supportstatusen för ArcMap och varför 10.8.x är den sista serien.
- ESRI File Geodatabase vector (OpenFileGDB)
— GDAL:s drivrutin för
.gdb-kataloger, med de versioner som lade till skrivning och stöd för raster. - ESRIJSON / FeatureService driver — att läsa resultat från en feature service med GDAL, och hur dess automatiska bläddring fungerar.