# ArcGIS

## 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](/sv/portfolio/led-the-development-deployment-and-support-of-over-35/)
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](/sv/portfolio/resolved-1-000-issues-in-geographical-data-and-7/),
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`:

```sh
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](https://developers.arcgis.com/documentation/) — Esris karta över
  plattformen: SDK:er, portal- och datatjänster samt säkerhet.
- [Query (Feature Service/Layer)](https://developers.arcgis.com/rest/services-reference/enterprise/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](https://pro.arcgis.com/en/pro-app/latest/arcpy/get-started/python-migration-for-arcgis-pro.htm)
  — vad som ändrades mellan Python 2 och 3 och i själva ArcPy.
- [ArcMap Life Cycle](https://support.esri.com/en-us/products/arcmap/life-cycle) — supportstatusen
  för ArcMap och varför 10.8.x är den sista serien.
- [ESRI File Geodatabase vector (OpenFileGDB)](https://gdal.org/en/stable/drivers/vector/openfilegdb.html)
  — GDAL:s drivrutin för `.gdb`-kataloger, med de versioner som lade till skrivning och stöd för
  raster.
- [ESRIJSON / FeatureService driver](https://gdal.org/en/stable/drivers/vector/esrijson.html) — att
  läsa resultat från en feature service med GDAL, och hur dess automatiska bläddring fungerar.

<https://engineer.company/sv/glossary/arcgis/>
