- 80 % der ArcPy-Funktionen haben direkte Open-Source-Äquivalente (GeoPandas, rasterio, Shapely, Fiona)
- 12 ArcPy-Funktionen haben KEIN Äquivalent in Open Source - Sie brauchen Workarounds oder müssen ArcPy dafur behalten
- Migration ist kein Alles-oder-nichts: Der hybride Ansatz (ArcPy für das, was es am besten kann; den Rest migrieren) ist der pragmatischste Weg
- Durchschnittlicher Migrationszeitraum: 4-8 Wochen für ein 20-Skripte-Inventar, mit 2 Wochen parallelem Testen
Teil 1 lieferte den Business Case für die Migration. Sie sind uberzeugt, dass die Zahlen stimmen. Was nun?
Dieser Beitrag ist das eigentliche Playbook: wie Sie Ihre Skripte inventarisieren, welche Funktionen womit ubereinstimmen, die 12 Funktionen ohne Open-Source-Äquivalent (und was dagegen zu tun ist) und wie Sie Alt und Neu parallel betreiben, bis Sie sicher sind.
Die meisten Migrationsleitfaden sagen "Verwenden Sie GeoPandas statt ArcPy" und lassen es dabei. Das reicht nicht. Sie müssen wissen, welche ArcPy-Funktionen sauber ubertragen werden, welche Workarounds erfordern und welche bedeuten, dass Sie ArcPy für diese spezifischen Workflows behalten sollten. Eine detaillierte Funktion-für-Funktion-Übersetzung finden Sie in unserem ArcPy-zu-GeoPandas-Leitfaden.
Die Inventarisierungs-Zuerst-Methode
Bevor Sie etwas migrieren, inventarisieren Sie alles. Dieser Schritt dauert eine Woche und spart Monate vergeudeter Arbeit an Skripten, die gelöscht und nicht migriert werden sollten.
Schritt 1: Alle ArcPy-Skripte finden
Beginnen Sie mit einer einfachen rekursiven Suche in Ihrem Skript-Verzeichnis nach jeder Python-Datei, die eine import arcpy-Anweisung enthalt. So erhalten Sie eine vollstandige Liste aller Dateien, die von ArcPy abhangen, samt Gesamtzahl. Die meisten Teams sind uberrascht - die tatsachliche Anzahl liegt in der Regel 20-40 % über der ursprunglichen Schätzung, weil Skripte in Projektordnern, gemeinsamen Laufwerken und archivierten Verzeichnissen liegen, die seit Jahren niemand mehr angeruhrt hat.
Schritt 2: Jedes Skript kategorisieren
| Kategorie | Definition | Massnahme |
|---|---|---|
| Grun (einfach) | Standard-Geoprozessierung (Buffer, Intersect, Dissolve, Join) | Zu GeoPandas migrieren |
| Gelb (mittel) | Verwendet arcpy.env-Einstellungen, Cursor-Operationen oder Feldberechnungen | Mit Refactoring migrieren |
| Rot (schwer) | Network Analyst, Spatial Analyst, 3D Analyst oder Enterprise-Integration | In ArcPy behalten oder Workarounds finden |
| xGrau (veraltet) | Nicht mehr verwendet, doppelt vorhanden oder ersetzt | Löschen |
REALE VERTEILUNG
Bei einem typischen 20-Skripte-Inventar sehen wir 8-10 Grun, 5-7 Gelb, 2-4 Rot und 1-3 Grau. Das bedeutet, 65-85 % der Skripte können zu Open Source migriert werden. Die grauen Skripte sind der versteckte Gewinn - das Löschen von totem Code reduziert die Wartungslast sofort, zum Nulltarif.
Funktionszuordnungstabelle
Dies ist die Referenztabelle, die Ihr Team täglich während der Migration verwenden wird. Für jede ArcPy-Funktion das Open-Source-Äquivalent und etwaige Vorbehalte. Unsere Seite-an-Seite-Benchmark-Vergleich enthalt Performancedaten zu diesen Äquivalenten.

| ArcPy-Funktion | Open-Source-Äquivalent | Hinweise |
|---|---|---|
| arcpy.analysis.Buffer | gdf.buffer(distance) | GeoPandas. Projiziertes KBS für Meter-Einheiten sicherstellen |
| arcpy.analysis.Intersect | gpd.overlay(gdf1, gdf2, how='intersection') | GeoPandas overlay |
| arcpy.analysis.Union | gpd.overlay(gdf1, gdf2, how='union') | GeoPandas overlay |
| arcpy.analysis.SpatialJoin | gpd.sjoin(gdf1, gdf2, how='inner') | GeoPandas Spatial Join |
| arcpy.management.Dissolve | gdf.dissolve(by='column') | GeoPandas dissolve |
| arcpy.management.Merge | pd.concat([gdf1, gdf2]) | pandas concat |
| arcpy.management.Clip | gpd.clip(gdf, mask) | GeoPandas clip |
| arcpy.management.Project | gdf.to_crs(epsg=4326) | GeoPandas KBS-Transformation |
| arcpy.management.AddField | gdf['new_col'] = value | pandas Spaltenzuweisung |
| arcpy.management.CalculateField | gdf['col'] = gdf['col'].apply(func) | pandas apply |
| arcpy.management.SelectByAttribute | gdf[gdf['col'] == value] | pandas Filterung |
| arcpy.management.SelectByLocation | gdf[gdf.intersects(geometry)] | GeoPandas raumliche Filterung |
| arcpy.conversion.FeatureClassToFC | gdf.to_file('output.gpkg') | Fiona über GeoPandas |
| arcpy.conversion.TableToTable | df.to_csv('output.csv') | pandas Export |
| arcpy.da.SearchCursor | for idx, row in gdf.iterrows() | pandas Iteration (oder vektorisiert) |
| arcpy.da.UpdateCursor | gdf.loc[condition, 'col'] = value | pandas vektorisiertes Update |
| arcpy.da.InsertCursor | gdf = pd.concat([gdf, new_rows]) | pandas concat |
| arcpy.Describe | gdf.crs, gdf.total_bounds, gdf.dtypes | GeoPandas Eigenschaften |
| arcpy.ListFeatureClasses | glob.glob('*.gpkg') | Python glob |
| arcpy.sa.Raster | rasterio.open('file.tif') | rasterio |
| arcpy.sa.ZonalStatisticsAsTable | rasterstats.zonal_stats() | rasterstats-Paket |
| arcpy.sa.ExtractByMask | rasterio.mask.mask() | rasterio.mask |
| arcpy.sa.Slope | richdem.TerrainAttribute(dem, 'slope') | richdem oder benutzerdefiniertes numpy |
| arcpy.sa.Aspect | richdem.TerrainAttribute(dem, 'aspect') | richdem |
24 Funktionen zugeordnet. Dies deckt die uberwiegende Mehrheit der Skripte in einem typischen GIS-Team-Inventar ab.
Die 12 Lucken (kein direktes Äquivalent)
Dies ist der Abschnitt, den sonst niemand schreibt. Diese 12 ArcPy-Funktionen haben keinen sauberen Open-Source-Ersatz. Dieses Wissen vorab verhindert das schlimmste Migrationsergebnis: Lucken zu entdecken, nachdem man sich auf einen Zeitplan festgelegt hat.
| ArcPy-Funktion | Warum kein Äquivalent | Workaround |
|---|---|---|
| arcpy.na.MakeServiceAreaLayer | Network Analyst ist proprietar | pgRouting (PostGIS) oder OSRM |
| arcpy.na.MakeClosestFacilityLayer | Network Analyst | pgRouting oder NetworkX |
| arcpy.na.MakeODCostMatrixLayer | Network Analyst | pgRouting oder OSRM API |
| arcpy.un.Trace | Proprietares Datenmodell | Kein Äquivalent - ArcPy behalten |
| arcpy.management.CreateTopology | ArcGIS-Topologieregeln | PostGIS-Topologie (teilweise) |
| arcpy.management.ValidateTopology | ArcGIS-Topologievalidierung | PostGIS ST_IsValid + benutzerdefinierte Regeln |
| arcpy.cartography.SimplifyLine | Kartografische Generalisierung | Shapely simplify (weniger ausgefeilt) |
| arcpy.cartography.CollapseHydroPoly | Kartografische Spezialisierung | Kein Äquivalent |
| arcpy.ia.ClassifyRaster | Image Analyst Extension | scikit-learn + rasterio (mehr Code) |
| arcpy.ddd.ViewShed | 3D Analyst Extension | GRASS GIS r.viewshed (Kommandozeile) |
| arcpy.ddd.SurfaceVolume | 3D Analyst Extension | Benutzerdefinierte numpy-Berechnung |
| arcpy.management.MakeQueryLayer | ArcGIS Enterprise-Integration | Direktes SQL über SQLAlchemy |
Die ehrliche Einschatzung
Von diesen 12 hat nur das Utility Network Tracing wirklich keinen Workaround. Die ubrigen haben Alternativen, die mehr Code erfordern, aber funktional sind. Die Frage ist, ob der zusatzliche Entwicklungsaufwand die Lizenzersparnisse rechtfertigt. Für Network Analyst-Funktionen ist pgRouting eine leistungsfahige Alternative, erfordert jedoch eine PostGIS-Einrichtung und ein anderes Datenmodell - planen Sie 2-3 Wochen für die Lernkurve ein.
Datei-für-Datei-Strategie
Jedes Skript wird einzeln migriert, nicht als Stapel. Dies ist der Schritt-für-Schritt-Prozess für ein einzelnes Skript. Wiederholen Sie dies für jedes Grun, dann Gelb.
Das Skript lesen
Verstehen, was es tut - nicht nur welche Funktionen es aufruft. Mit dem Analysten sprechen, der es ausfuhrt
Funktionen zuordnen
Die obige Zuordnungstabelle verwenden, um Äquivalente für jeden ArcPy-Aufruf zu ermitteln
Lucken pruefen
Gibt es rote Funktionen? Wenn ja, entscheiden: Workaround, in ArcPy behalten oder den Workflow neu gestalten
Von Grund auf neu schreiben
GeoPandas/rasterio-Idiome verwenden. ArcPy NICHT Zeile für Zeile ubersetzen - idiomatischer Open-Source-Code ist vektorisiert, nicht zeilenweise
Mit denselben Daten testen
Alt (ArcPy) und Neu (GeoPandas) auf identischen Eingabedatensatzen ausführen
Ausgaben vergleichen
Geometrieanzahl, Attributwerte, KBS, raumliche Ausdehnung. Das Vergleichsskript unten verwenden
Unterschiede dokumentieren
Einige Unterschiede sind zu erwarten: Gleitkommagenauigkeit (1e-6), Sortierreihenfolge, Feldnamen-Gross/Kleinschreibung
Mit dem Analysten validieren
Die Person, die diesen Workflow ausfuhrt, muss bestatigen, dass die Ausgabe korrekt ist. Technische Aquivalenz reicht nicht - geschaeftliche Aquivalenz ist entscheidend
NICHT TRANSLITERIEREN
Der groste Migrationsfehler ist das zeilenweise Konvertieren von ArcPy in GeoPandas. ArcPy verwendet cursor-basierte, zeilenweise Verarbeitung. GeoPandas ist vektorisiert. Ein transliteriertes Skript ist langsamer als das ursprungliche ArcPy und das idiomatische GeoPandas. Von Grund auf neu schreiben unter Verwendung von GeoPandas-Mustern.
Paralleles Testen
Niemals umstellen, ohne Alt und Neu parallel zu betreiben. Die Validierung automatisieren, statt Ausgaben per Augenschein zu vergleichen - manuelle Stichproben ubersehen Randfalle.
Eine gut strukturierte Vergleichsfunktion liest sowohl die ArcPy-Ausgabe als auch die GeoPandas-Ausgabe als GeoDataFrames ein und fuhrt dann vier Prufungen durch: Ubereinstimmung der Zeilenanzahl, CRS-Abgleich, Spaltenubereinstimmung und raumliche Ausdehnung innerhalb einer konfigurierbaren Toleranz (typischerweise 1 mm für projizierte Koordinatensysteme). Jede fehlgeschlagene Prüfung gibt eine klare Diagnose aus. Integrieren Sie diese Funktion in Ihre CI-Pipeline, damit Fehler sofort erkannt werden - nicht erst bei der Analysten-Prüfung eine Woche später.
Mindestens 2 Wochen parallel
Betreiben Sie alte (ArcPy) und neue (GeoPandas) Skripte auf denselben Daten mindestens 2 Wochen lang parallel. Vergleichen Sie jede Ausgabe. Stellen Sie erst um, wenn Sie 2 aufeinanderfolgende Wochen null Abweichungen hatten. Dies erfasst Randfa-lle, die Unit-Tests verpassen - ungewohnliche Geometrien, Kodierungsprobleme, Projektionsrandfa-lle.
Haufige Migrationsmuster
Drei Muster decken 90 % dessen ab, was Sie antreffen werden. Jedes zeigt das ArcPy-Original und den idiomatischen GeoPandas-Ersatz.
Muster 1: arcpy.env.workspace zu Arbeitsverzeichnis
ARCPY
ArcPy-Skripte beginnen typischerweise damit, arcpy.env.workspace auf einen File-Geodatabase-Pfad zu setzen und overwriteOutput zu aktivieren. Diese beiden globalen Einstellungen steuern implizit jeden nachfolgenden Geoprozessierungsaufruf im Skript und erzeugen einen versteckten Zustand, der zu unerwartetem Verhalten fuhren kann, wenn Skripte aus automatisierten Pipelines aufgerufen werden.
GEOPANDAS
Ersetzen Sie es durch eine einfache Python-Pfad-Konstante - typischerweise ein String oder eine pathlib.Path-Variable am Anfang des Skripts. Kein Äquivalent zu overwriteOutput nötig: GeoPandas schreibt an den angegebenen Pfad und uberschreibt standardmassig. Explizit schlagt implizit.
Muster 2: Cursor zu pandas-Operationen
ARCPY (ZEILENWEISE)
Das ArcPy-Muster offnet einen UpdateCursor als Context Manager, iteriert durch jede Zeile einer Feature Class, prüft einen Feldwert, aktualisiert bedingt ein anderes Feld und speichert die Änderung Zeile für Zeile. Bei einem Flurstuck-Datensatz mit 100.000 Eintregen bedeutet das 100.000 einzelne Schreibvorgange. Der Overhead ist erheblich.
GEOPANDAS (VEKTORISIERT)
Das GeoPandas-Äquivalent verwendet eine boolesche Maske, um alle Zeilen auszuwahlen, deren Flache den Schwellenwert uberschreitet, und weist dann den Wert der Kategorie-Spalte in einer einzigen vektorisierten Operation zu. Keine Schleife. Kein Cursor. Der gesamte Datensatz wird in einem Durchgang auf C-Bibliotheksebene aktualisiert - typischerweise 10-100x schneller als der Cursor-Ansatz bei Datensatzen über 10.000 Eintregen.
Muster 3: Geoprozessierung zu GeoPandas-Methoden
ARCPY
ArcPy verkettet Geoprozessierungsaufrufe, indem String-Layer-Namen zwischen Tools weitergegeben werden. Ein Buffer schreibt über einen Namen in einen Zwischen-Layer, dann liest Intersect diesen benannten Layer als Eingabe. Der Workspace ist die implizite Verbindung. Das funktioniert gut innerhalb von ArcGIS Pro, macht Skripte aber schwer isoliert testbar und unmoglich ausserhalb einer ArcGIS-Umgebung ausfuhrbar.
GEOPANDAS
GeoPandas gibt GeoDataFrame-Objekte direkt zwischen Operationen weiter - keine Zwischendateien, keine String-Referenzen. Rufen Sie .buffer() auf dem Strassen-GeoDataFrame auf (stellen Sie vorher ein projiziertes CRS sicher) und ubergeben Sie die resultierende Geometrie direkt an gpd.overlay() mit dem Flurstuck-Layer. Die Verschneidung lauft im Speicher. Das kritische Detail: die Buffer-Distanz wird in CRS-Einheiten angegeben - immer vor dem Buffern auf Meter umprojizieren.
Umgang mit arcpy.env
arcpy.env bietet globale Einstellungen, die jede Geoprozessierungsoperation beeinflussen. Open-Source-Tools haben dieses Konzept nicht - jede Operation ist explizit. So handhaben Sie jede Einstellung.
| arcpy.env-Einstellung | Open-Source-Äquivalent | Hinweise |
|---|---|---|
| workspace | Arbeitsverzeichnisvariable | Manuelle Pfadverwaltung |
| overwriteOutput | Kein Äquivalent (uberschreibt immer) | Alte Dateien bei Bedarf explizit löschen |
| outputCoordinateSystem | gdf.to_crs() | Explizit je Operation |
| extent | gdf.clip(extent_gdf) | Explizites Zuschneiden |
| cellSize | rasterio Auflosungsparameter | Je Operation |
| mask | rasterio.mask.mask() | Explizites Maskieren |
| parallelProcessingFactor | dask-geopandas | Anderes Parallelisierungsmodell |
Der Wechsel von implizit (arcpy.env einmal setzen, alles erbt) zu explizit (KBS, Ausdehnung und Maske jeder Funktion ubergeben) wirkt zunachst ausführlicher. In der Praxis ist explizit besser: Sie sehen genau, was jede Operation tut, ohne nach globalem Zustand suchen zu müssen, der 200 Zeilen fruher gesetzt würde.
Wann ArcPy behalten
Migration ist kein Alles-oder-nichts. ArcPy für spezifische Workflows zu behalten ist eine legitime technische Entscheidung, kein Versagen. Hier sind die sechs Szenarien, in denen ArcPy das richtige Werkzeug bleibt.
Netzwerkanalyse-Workflows
Einzugsbereiche, naheste Einrichtung, OD-Kostenmatrizen. pgRouting existiert, erfordert jedoch eine PostGIS-Einrichtung und ein anderes Datenmodell. Wenn Sie auf ESRI-Netzwerkdatensatze mit Abbiegebeschrankungen und Einbahnstrassen angewiesen sind, uberwiegt der Migrationsaufwand den Nutzen.
Komplexe Rasterverarbeitungsketten
Mehrstufige Raster-Workflows mit Spatial Analyst - gewichtete Uberlagerung, Kostenentfernung, Sichtfeld-Verkettung. Die Replikation in rasterio erfordert wesentlich mehr Code und umfangreiche Tests. Wenn die Kette funktioniert und selten ausgefuhrt wird, belassen Sie es dabei.
Kartografische Produktion
Kartenlayouts, Symbolisierung, Beschriftung. Die kartografische Engine von ArcGIS Pro hat kein Open-Source-Äquivalent auf gleichem Qualitatasniveau. QGIS deckt die grundlegende Kartenproduktion ab, aber professionelle kartografische Ausgabe bevorzugt weiterhin ArcGIS Pro.
Utility Network-Integration
Wenn Ihre Workflows das Utility Network beruehren, gibt es keinen Migrationspfad. Punkt. Das Utility Network-Datenmodell ist proprietar für ArcGIS. Dies ist keine technische Einschränkung, die gelost wird - es ist ein vom Anbieter bewusstes Vendor Lock-in.
Wenn das Team Widerstand leistet
Migration erfordert Akzeptanz. Ein Analyst, der gezwungen wird, unbekannte Tools zu verwenden, ist weniger produktiv als einer, der vertraute Tools freiwillig nutzt. Widerstande durch Schulungen und schrittweise Einführung adressieren, nicht durch Mandate. Mit den interessierten Analysten beginnen und Ergebnisse für sich sprechen lassen.
Wenn die Migrationskosten 2 Jahre Lizenzersparnisse ubersteigen
Rechnen Sie nach. Wenn die Migration von 30 Skripten 50.000 EUR an Ingenieurzeit kostet und Ihre jahrlichen ArcPy-Lizenzkosten 15.000 EUR betragen, betragt die Amortisationszeit 3,3 Jahre. Die Technologie ändert sich in 3,3 Jahren. Teamprioriataten verschieben sich. Lange Amortisationszeiten tragen ein Ausfuhrungsrisiko, das selten im Business-Case-Spreadsheet auftaucht.
Migrationszeitplan
Für ein typisches 20-Skripte-Inventar ist dies der phasenweise Zeitplan. Passen Sie die Dauern an Ihre Teamgrosse und Skriptkomplexitat an.

MIGRATIONSPHASEN
Inventarisieren und Kategorisieren
1 WocheAlle Skripte finden, als Grun/Gelb/Rot/Grau kategorisieren. Abhangigkeiten zwischen Skripten dokumentieren. Analysten zu jedem Workflow befragen.
Grune Skripte migrieren
2-3 WochenMit den einfachsten Erfolgen beginnen. Vertrauen aufbauen und Muster etablieren. Jedes grune Skript benötigt 2-8 Stunden. Diese Phase schult das Team auch in GeoPandas-Idiomen.
Gelbe Skripte migrieren
2-3 WochenMittlere Komplexität. Erfordert Refactoring von arcpy.env-Mustern, Cursor-Ersatz und Feldberechnungslogik. Jedes gelbe Skript benötigt 4-16 Stunden.
Paralleles Testen
Mindestens 2 WochenAlte und neue Skripte auf denselben Daten ausführen. Jede Ausgabe mit dem Vergleichsskript überprüfen. Abweichungen beheben. Null Fehler für 2 aufeinanderfolgende Wochen vor dem Fortfahren.
Entscheidung für rote Skripte
1 WocheFür jedes rote Skript: Workaround finden (pgRouting, GRASS GIS), in ArcPy behalten oder den Workflow vollständig neu gestalten. Entscheidung und Begründung dokumentieren.
Umstellung
1 WocheAlte ArcPy-Skripte ausmustern. Dokumentation aktualisieren. Team-Schulungen durchführen. Monitoring für die neuen Workflows einrichten.
GESAMTZEITPLAN
Größere Inventare (40+ Skripte) benötigen 16-20 Wochen. Kleinere (10 Skripte) können in 5-6 Wochen abgeschlossen werden. Die parallele Testphase ist unabhängig von der Inventargrosse nicht verhandelbar.
Haufig gestellte Fragen
Kann ich ArcPy-Skripte zu Open Source migrieren?
Ja, etwa 80 % der ArcPy-Funktionen haben direkte Open-Source-Äquivalente in GeoPandas, rasterio und Shapely. Etwa 12 Funktionen - hauptsachlich Network Analyst, 3D Analyst und Utility Network - haben kein direktes Äquivalent und erfordern Workarounds oder müssen in ArcPy verbleiben.
Wie lange dauert die Migration von ArcPy?
Für ein typisches 20-Skripte-Inventar sind 8-12 Wochen einzuplanen: Inventarisierung (1 Woche), einfache Skripte (2-3 Wochen), mittlere Skripte (2-3 Wochen), paralleles Testen (2 Wochen) und Umstellung (1 Woche). Einzelne Skripte benötigen je nach Komplexität 2-16 Stunden.
Was ist der beste Ersatz für ArcPy?
GeoPandas ist das nachste Äquivalent für Vektoranalysen (Buffer, Intersect, Dissolve, Spatial Join). rasterio ersetzt Spatial Analyst für Rasteroperationen. Shapely übernimmt Geometrieoperationen. Für Netzwerkanalysen sind pgRouting (PostGIS) oder NetworkX Alternativen. Keine einzelne Bibliothek ersetzt das gesamte ArcPy.
Migration ist ein Datei-für-Datei-Prozess, kein Big-Bang-Wechsel. Mit den grünen Skripten beginnen, Vertrauen aufbauen und die parallelen Testergebnisse die nachste Phase rechtfertigen lassen.
Die Funktionszuordnungstabelle und die 12-Lucken-Analyse liefern das ehrliche Bild vorab. Keine Uberraschungen mitten im Projekt. Die Skripte, die nicht migriert werden können, bleiben in ArcPy - das ist technischer Pragmatismus, kein Versagen.
Wenn Sie beim Business Case beginnen, behandelt Teil 1 die ROI-Analyse. Für eine vertiefte Betrachtung einzelner Funktionsubersetzungen mit Benchmarks, lesen Sie unseren ArcPy-zu-GeoPandas-Leitfaden und den Seite-an-Seite-Benchmark-Vergleich.
Workflow-Automatisierung Einblicke erhalten
Monatliche Tipps zur Automatisierung von GIS-Workflows, Open-Source-Tools und Erkenntnisse aus Enterprise-Deployments. Kein Spam.
