Technischer Tiefgang

ArcPy zu Rasterio: Vollständiger Migrationsleitfaden für die Raster-Verarbeitung

So migrieren Sie ArcPy Spatial Analyst-Skripte zu Rasterio – einschließlich NumPy Raster-Algebra, Cloud-Optimized GeoTIFF-Ausgabe und Speicherverwaltung für massive Raster.

VERÖFFENTLICHTJAN 2025
KATEGORIETECHNISCH
AUTORAXIS SPATIAL
Sumi-e-Stil-Illustration der Raster-Datenverarbeitung mit Gittermustern

Ihr Team verarbeitet wöchentlich 500 GB Höhendaten. ArcPy Spatial Analyst-Skripte berechnen Neigung, Exposition und Hillshade für die Geländevisualisierung. Die Verarbeitung dauert 6 Stunden pro Durchlauf, und die Spatial Analyst-Lizenz kostet 2.500 GBP pro Jahr und Arbeitsplatz.

Dann entdeckt jemand Rasterio. "Es liest GeoTIFFs direkt in NumPy Arrays", sagen sie. "Keine Lizenzgebühren". Sie durchsuchen Stack Overflow und finden Beiträge über 10-fache Geschwindigkeitsverbesserungen und Cloud-native Workflows. Aber Sie sehen auch Beschwerden über fehlende Funktionen, Verwirrung bei Koordinatensystemen und kryptische GDAL-Fehler.

Dieser Leitfaden schneidet durch den Lärm. Wir haben Raster-Verarbeitungs-Workflows für Forstwirtschaft, Bergbau und Umweltüberwachungs-Clients migriert. Hier ist, was tatsächlich funktioniert, welche Übersetzungsmuster wichtig sind, und wie Sie mit Rastern umgehen, die den verfügbaren Speicher überschreiten. Wenn Sie bereits Vector-Workflows migriert haben, lesen Sie unseren ArcPy zu GeoPandas-Leitfaden.

Raster lesen: ArcPy vs. Rasterio

Rasterio liest Raster direkt in NumPy Arrays und ermöglicht vektorisierte Verarbeitung, die 5-20x schneller ist als arcpy.sa Map Algebra. Der Hauptunterschied: ArcPy umhüllt Raster in proprietären Objekten, während Rasterio rohe NumPy Arrays für Standard-Scientific-Python-Operationen freigibt.

PATTERN: RASTER LESEN

import arcpy
from arcpy.sa import *

# Environment einrichten
arcpy.env.workspace = "C:/data"
arcpy.CheckOutExtension("Spatial")

# Raster lesen - gibt Raster-Objekt zurück
dem = Raster("elevation.tif")

# Eigenschaften abrufen
print(f"Cell size: {dem.meanCellWidth}")
print(f"Extent: {dem.extent}")
print(f"Spatial ref: {dem.spatialReference.name}")

Gibt proprietäres Raster-Objekt zurück

PATTERN: RASTER LESEN

import rasterio
import numpy as np

# Raster öffnen - Context Manager behandelt Cleanup
with rasterio.open("elevation.tif") as src:
    # Als NumPy Array lesen (Band 1)
    dem = src.read(1)

    # Eigenschaften über Profil abrufen
    print(f"Cell size: {src.res}")
    print(f"Bounds: {src.bounds}")
    print(f"CRS: {src.crs}")

    # dem ist jetzt ein Standard-NumPy Array
    print(f"Shape: {dem.shape}")
    print(f"Dtype: {dem.dtype}")

Gibt NumPy Array + Metadaten zurück

MULTI-BAND-RASTER

Rasterio behandelt Multi-Band-Bilder (wie Landsat, Sentinel) intuitiver als ArcPy. Jedes Band wird zu einem Slice in einem 3D-NumPy-Array.

# Alle Bands auf einmal lesen
with rasterio.open("sentinel2.tif") as src:
    bands = src.read()  # Shape: (bands, height, width)
    red = bands[3]      # Band 4 (0-indexed)
    nir = bands[7]      # Band 8

    # NDVI mit NumPy Broadcasting berechnen
    ndvi = (nir.astype(float) - red) / (nir + red + 1e-10)

Raster-Algebra: arcpy.sa vs. NumPy-Operationen

NumPy ersetzt arcpy.sa Map Algebra durch Standard-Python-Operatoren. Anstelle von Con(), Slope() und Reclassify() verwenden Sie NumPy-Funktionen, die ganze Arrays auf einmal verarbeiten. Dieser vektorisierte Ansatz ist typischerweise 5-20x schneller als ArcPy Map Algebra.

PATTERN: NEIGUNG BERECHNEN

from arcpy.sa import Slope

# Neigung in Grad berechnen
dem = Raster("elevation.tif")
slope = Slope(dem, "DEGREE")
slope.save("slope.tif")

NUMPY + RASTERIO

import rasterio
import numpy as np

with rasterio.open("elevation.tif") as src:
    dem = src.read(1).astype(float)
    cellsize = src.res[0]  # Annahme: quadratische Zellen

    # Gradient mit NumPy berechnen
    dy, dx = np.gradient(dem, cellsize)
    slope_rad = np.arctan(np.sqrt(dx**2 + dy**2))
    slope_deg = np.degrees(slope_rad)

    # Ausgabe schreiben
    profile = src.profile.copy()
    profile.update(dtype=rasterio.float32)
    with rasterio.open("slope.tif", "w", **profile) as dst:
        dst.write(slope_deg.astype(np.float32), 1)

PATTERN: BEDINGTE NEUKLASSIFIZIERUNG

from arcpy.sa import Con, Reclassify, RemapRange

# Bedingt: Werte < 0 auf NoData setzen
dem = Raster("elevation.tif")
dem_positive = Con(dem >= 0, dem)

# Höhe in Kategorien neuklassifizieren
reclass = Reclassify(dem, "VALUE",
    RemapRange([[0, 100, 1],
                [100, 500, 2],
                [500, 1000, 3],
                [1000, 9999, 4]])
)
reclass.save("elevation_classes.tif")

NUMPY + RASTERIO

import rasterio
import numpy as np

with rasterio.open("elevation.tif") as src:
    dem = src.read(1).astype(float)
    nodata = src.nodata

    # Bedingt: Negative Werte auf NoData setzen
    dem[dem < 0] = np.nan

    # Mit np.digitize oder np.select neuklassifizieren
    conditions = [
        (dem >= 0) & (dem < 100),
        (dem >= 100) & (dem < 500),
        (dem >= 500) & (dem < 1000),
        dem >= 1000
    ]
    classes = np.select(conditions, [1, 2, 3, 4], default=0)

    # Ausgabe schreiben
    profile = src.profile.copy()
    profile.update(dtype=rasterio.uint8, nodata=0)
    with rasterio.open("elevation_classes.tif", "w", **profile) as dst:
        dst.write(classes.astype(np.uint8), 1)

Bibliotheken für gängige Geländeoperationen

Während Sie Neigung, Exposition und Hillshade mit rohem NumPy implementieren können, bieten mehrere Bibliotheken optimierte Implementierungen:

Operationarcpy.saOpen-Source-Alternative
NeigungSlope()richdem.TerrainAttribute() oder np.gradient()
ExpositionAspect()richdem oder xrspatial.aspect()
HillshadeHillshade()xrspatial.hillshade() oder earthpy
FließrichtungFlowDirection()pysheds oder whitebox
WasserscheideWatershed()pysheds.catchment()
ZonenstatistikenZonalStatistics()rasterstats.zonal_stats()

In Cloud-Native Formaten schreiben (COG)

Cloud-Optimized GeoTIFF (COG) ist der Schlüsselvorteil von Rasterio gegenüber ArcPy. COG ermöglicht das Streaming großer Raster aus Cloud-Speicher (S3, Azure Blob, GCS) ohne die Bereitstellung ganzer Dateien. ArcPy hat keine native COG-Unterstützung – Sie müssen Dateien zuerst lokal herunterladen.

WAS MACHT COG BESONDERS

  • HTTP-Bereichsanforderungen: Lesen Sie nur die Pixel, die Sie benötigen, nicht die gesamte Datei
  • Internes Tiling: Optimiert für räumliche Abfragen (256x256 oder 512x512 Fliesen)
  • Überblicke: Vorgefertigte Pyramiden für schnelle Visualisierung bei jedem Zoom
  • Cloud-Speicher: Funktioniert direkt mit S3, Azure, GCS – kein lokaler Download

STANDARD-AUSGABE

import rasterio

# Standard GeoTIFF schreiben
with rasterio.open(
    "output.tif", "w",
    driver="GTiff",
    height=data.shape[0],
    width=data.shape[1],
    count=1,
    dtype=data.dtype,
    crs=src.crs,
    transform=src.transform
) as dst:
    dst.write(data, 1)

# Problem: Kein internes Tiling
# Problem: Keine Überblicke
# Problem: Ganze Datei zum Lesen herunterladen

CLOUD-OPTIMIERTE AUSGABE

import rasterio
from rasterio.enums import Resampling

# Cloud-Optimized GeoTIFF mit COG-Treiber
with rasterio.open(
    "output_cog.tif", "w",
    driver="COG",
    height=data.shape[0],
    width=data.shape[1],
    count=1,
    dtype=data.dtype,
    crs=src.crs,
    transform=src.transform,
    compress="deflate",        # Kompression
    blocksize=512,             # Größe der internen Fliesen
    overview_resampling="average"
) as dst:
    dst.write(data, 1)

# Oder rio-cogeo CLI verwenden:
# rio cogeo create input.tif output_cog.tif

COGs aus Cloud-Speicher lesen

Die echte Kraft: Lesen Sie nur den Teil eines massiven Rasters, den Sie benötigen, direkt von S3 oder Azure Blob Storage.

import rasterio
from rasterio.windows import from_bounds

# Kleines Fenster aus 50GB COG auf S3 lesen (kein vollständiger Download!)
cog_url = "s3://bucket/large-raster.tif"

with rasterio.open(cog_url) as src:
    # Interessensgebiet definieren
    window = from_bounds(
        left=-122.5, bottom=37.5,
        right=-122.0, top=38.0,
        transform=src.transform
    )

    # Nur dieses Fenster lesen - Range-Anforderung!
    subset = src.read(1, window=window)
    print(f"Read {subset.nbytes / 1e6:.1f} MB instead of full file")

Leistung: Lesen eines 10-km-Bereichs aus 50-GB-Global-DEM: ArcPy lädt die gesamte Datei herunter (14 Minuten). Rasterio COG-Bereichsanforderung: 2,3 Sekunden.

Speicherverwaltung für große Raster

Verwenden Sie windowed reading, Dask-Arrays oder xarray für Raster, die den verfügbaren RAM überschreiten. Im Gegensatz zu ArcPy, das Daten durch dateibasierte Operationen streamt, lädt Rasterio Daten standardmäßig in den Speicher. Für Raster mit 10 GB+, benötigen Sie verschiedene Strategien.

DIE SPEICHERMAUER

Beispiel: Global 30m DEM (SRTM), 432.000 x 180.000 Pixel, 150 GB unkomprimiert. Der Aufruf von src.read() versucht, alles zu laden – stürzt mit MemoryError ab.

ArcPy handhabt dies transparent (mit diskbasierten Operationen), verliert aber Parallelisierungsvorteile. Rasterio gibt Ihnen Kontrolle – Sie wählen den Kompromiss.

Strategien zur Speicherverwaltung

Verarbeiten Sie Raster in räumlichen Chunks (Fenster). Beste für Operationen, die keinen Kontext zwischen den Kacheln benötigen (Neuklassifizierung, NDVI, einfache Algebra).

import rasterio
from rasterio.windows import Window
import numpy as np

with rasterio.open("huge_raster.tif") as src:
    # In 1024x1024 Fenster verarbeiten
    profile = src.profile.copy()
    profile.update(compress='deflate')

    with rasterio.open("output.tif", "w", **profile) as dst:
        for ji, window in src.block_windows(1):
            # Chunk lesen
            data = src.read(1, window=window)

            # Chunk verarbeiten (Beispiel: normalisieren)
            processed = (data - data.min()) / (data.max() - data.min())

            # Chunk schreiben
            dst.write(processed.astype(np.float32), 1, window=window)

Dask-Arrays ermöglichen lazy evaluation und parallele Verarbeitung über Chunks. Operationen werden nur berechnet, wenn Sie sie explizit auslösen.

import dask.array as da
import rioxarray

# Mit rioxarray öffnen - erstellt Lazy-Dask-gestütztes Array
ds = rioxarray.open_rasterio("huge_raster.tif", chunks=(1, 2048, 2048))

# Operationen sind lazy - noch keine Berechnung
dem = ds.squeeze()
slope = np.arctan(np.sqrt(
    np.gradient(dem, axis=0)**2 + np.gradient(dem, axis=1)**2
))

# Berechnung mit paralleler Ausführung auslösen
result = slope.compute()  # Nutzt alle CPU-Kerne

# Oder direkt schreiben (Streaming auf Disk)
slope.rio.to_raster("slope_output.tif", driver="COG")
ResultRaster mit 150 GB in 8 Minuten auf 8-Core-Maschine mit 4-GB-Spitzenspeicher verarbeitet (vs. 2+ Stunden mit ArcPy).

Für Zeitreihen oder mehrdimensionale Raster-Stapel (Satellitenbilder) bietet xarray leistungsstarke Abstraktionen für beschriftete Arrays mit Dask-Parallelisierung.

import xarray as xr
import rioxarray

# Zeitreihe von Rastern mit Dask-Chunking öffnen
files = ["landsat_2020_01.tif", "landsat_2020_02.tif", ...]
ds = xr.open_mfdataset(
    files,
    engine="rasterio",
    chunks={"x": 2048, "y": 2048}
)

# Zeitliche Statistiken berechnen (lazy)
mean_ndvi = ds['ndvi'].mean(dim='time')
max_ndvi = ds['ndvi'].max(dim='time')

# Ergebnisse schreiben
mean_ndvi.rio.to_raster("mean_ndvi.tif")
RastergrößeOperationstypEmpfohlener Ansatz
< 2GBBeliebigStandard Rasterio (vollständig laden)
2-20GBPro-Pixel (kein Kontext)Windowed Reading
2-20GBNachbarschaftsoperationenDask mit Überlappung
20-100GBKomplexe Analyserioxarray + Dask-Cluster
> 100GBBeliebigGoogle Earth Engine oder STAC + COG

Raster schreiben: Best Practices

Kopieren Sie immer das Quellprofil, aktualisieren Sie nur, was sich ändert, und bevorzugen Sie das COG-Format für Ausgaben. Die meisten häufigen Fehler entstehen durch falsch zugeordnete Metadaten – falsches CRS, falsche Transform oder falscher nodata-Wert.

HÄUFIGE FEHLER

# NICHT: Metadaten hartcodieren
with rasterio.open(
    "output.tif", "w",
    driver="GTiff",
    height=1000,
    width=1000,
    count=1,
    dtype="float32",
    crs="EPSG:4326",  # Könnte nicht mit Input übereinstimmen!
    transform=Affine(0.1, 0, 0, 0, -0.1, 0)  # Falsch!
) as dst:
    dst.write(data, 1)

# Probleme:
# - CRS könnte nicht mit Input übereinstimmen
# - Transform ist völlig falsch
# - Keine Kompression (riesige Dateien)
# - nodata nicht gesetzt

KORREKTER ANSATZ

# TUN: Profil kopieren und aktualisieren
with rasterio.open("input.tif") as src:
    data = src.read(1)
    profile = src.profile.copy()

    # Daten verarbeiten
    result = some_processing(data)

    # Nur das Geänderte aktualisieren
    profile.update(
        driver="COG",           # Cloud-optimiert
        dtype=result.dtype,     # Match output type
        compress="deflate",     # Kompression
        nodata=-9999           # Explizites nodata
    )

    with rasterio.open("output.tif", "w", **profile) as dst:
        dst.write(result, 1)

GDAL-KONFIGURATION FÜR CLOUD-SCHREIBVORGÄNGE

Das Schreiben großer COGs in Cloud-Speicher erfordert GDAL-Konfiguration. Setzen Sie diese Umgebungsvariablen vor dem Öffnen von Dateien:

import os
import rasterio

# GDAL für S3 konfigurieren
os.environ['AWS_REQUEST_PAYER'] = 'requester'  # Für Requester-Pays-Buckets
os.environ['GDAL_DISABLE_READDIR_ON_OPEN'] = 'YES'  # Schnellere Opens
os.environ['CPL_VSIL_CURL_ALLOWED_EXTENSIONS'] = '.tif,.tiff,.vrt'

# Jetzt direkt auf S3 schreiben
with rasterio.open("s3://my-bucket/output.tif", "w", **profile) as dst:
    dst.write(data, 1)

Migrations-Zeitplan: Was Sie erwartet

Eine typische Raster-Workflow-Migration dauert 2-4 Monate und beginnt mit einer einwöchigen Machbarkeitsstudie. Der Zeitplan hängt von der Workflow-Komplexität, der Vertrautheit des Teams mit NumPy und den Anforderungen der Cloud-Integration ab.

  • Alle arcpy.sa-Skripte auflisten: verwendete Funktionen, Ein-/Ausgabeformate auflisten
  • Prioritäts-Workflows identifizieren: hohe Laufzeit, häufige Ausführung
  • Machbarkeitsstudie erstellen: ein Skript von Anfang bis Ende migrieren
  • Benchmark: Laufzeit, Ausgabegenauigkeit, Speichernutzung vergleichen
  • Eingabe-Raster in COG-Format konvertieren (gdal_translate oder rio-cogeo)
  • Cloud-Storage-Struktur einrichten (S3-Buckets, Ordnerkonventionen)
  • Validierungsskripte erstellen: Ausgaben Pixel-für-Pixel vergleichen
  • CRS- und nodata-Konventionen für das Team dokumentieren
  • Skripte in Prioritätsreihenfolge migrieren (höchster ROI zuerst)
  • Speicherverwaltung für große Raster implementieren
  • Wiederverwendbare Bibliothek erstellen: gängige Operationen, Fehlerbehandlung
  • Parallele Validierung durchführen: ArcPy und Rasterio erzeugen identische Ausgaben
  • Migrierte Workflows in Produktion einsetzen
  • Leistung überwachen: Laufzeit, Speicher, Cloud-Kosten
  • Team in Rasterio-Mustern und Debugging schulen
  • ArcPy-Workflows nach 30-tägiger Konfidenzphase abschalten

Vollständige Workflow-Übersetzung: Echtes Beispiel

Hier ist ein Production-Workflow, den wir für einen Umweltüberwachungs-Client migriert haben: Berechnen Sie Terrain-Ableitungen aus einem 20-GB-DEM und identifizieren Sie Bereiche, die Neigungsschwellwerte überschreiten.

ORIGINAL ARCPY VERSION (4,2 STUNDEN)

import arcpy
from arcpy.sa import *

arcpy.env.workspace = "C:/data"
arcpy.CheckOutExtension("Spatial")

# 20GB DEM lesen
print("Reading DEM...")
dem = Raster("large_dem.tif")

# Neigung berechnen
print("Calculating slope...")
slope = Slope(dem, "DEGREE")

# Exposition berechnen
print("Calculating aspect...")
aspect = Aspect(dem)

# Steile Hänge identifizieren (> 30 Grad)
print("Finding steep areas...")
steep_mask = Con(slope > 30, 1, 0)

# Hillshade zur Visualisierung berechnen
print("Creating hillshade...")
hillshade = Hillshade(dem, 315, 45)

# Ausgaben speichern
print("Saving results...")
slope.save("slope.tif")
aspect.save("aspect.tif")
steep_mask.save("steep_areas.tif")
hillshade.save("hillshade.tif")

print("Complete!")

Laufzeit: 4,2 Stunden | Spitzenspeicher: 8 GB | 20 GB Input-DEM

MIGRIERTE RASTERIO VERSION (12 MINUTEN)

import rioxarray as rxr
import xrspatial
import numpy as np

# Mit Dask-Chunking öffnen (Lazy Loading)
print("Opening DEM with lazy loading...")
dem = rxr.open_rasterio(
    "s3://bucket/large_dem.tif",
    chunks={"x": 2048, "y": 2048}
).squeeze()

# Terrain-Ableitungen berechnen (alle lazy)
print("Setting up terrain calculations...")
slope = xrspatial.slope(dem)
aspect = xrspatial.aspect(dem)
hillshade = xrspatial.hillshade(dem, azimuth=315, angle_altitude=45)

# Steile Bereiche identifizieren
steep_mask = xr.where(slope > 30, 1, 0).astype(np.uint8)

# Alle Ausgaben schreiben (parallele Berechnung + Streaming)
print("Computing and writing results...")
slope.rio.to_raster("s3://bucket/outputs/slope.tif", driver="COG")
aspect.rio.to_raster("s3://bucket/outputs/aspect.tif", driver="COG")
steep_mask.rio.to_raster("s3://bucket/outputs/steep_areas.tif", driver="COG")
hillshade.rio.to_raster("s3://bucket/outputs/hillshade.tif", driver="COG")

print("Complete!")

Laufzeit: 12 Minuten | Spitzenspeicher: 3 GB | Gleiches 20-GB-Input, 21x schneller

LEISTUNGSAUFSCHLÜSSELUNG: WOHIN DIE ZEIT GEHT

ArcPy (4,2 Stunden)

Von Disk lesen45 Min. (18 %)
Neigungsberechnung68 Min. (27 %)
Expositionsberechnung52 Min. (21 %)
Hillshade41 Min. (16 %)
Ausgaben schreiben46 Min. (18 %)

Rasterio + xrspatial (12 Min.)

Lazy open (kein Lesen)0,3 Sek. (0 %)
Parallele Berechnung8 Min. (67 %)
Zu COG streamen4 Min. (33 %)

Wichtige Erkenntnis: Lazy Loading eliminiert die Anfangleszeit. Parallele Dask-Ausführung nutzt alle CPU-Kerne. COG-Ausgabe streamt direkt zu S3 ohne temporäre Dateien.

Die Rasterio-Migration ist sinnvoll, wenn Sie Cloud-Integration, parallele Verarbeitung benötigen oder die Kosten für die Spatial Analyst-Lizenzierung senken möchten.

Die 5-20x Leistungsverbesserung ergibt sich aus vektorisierten NumPy-Operationen und paralleler Dask-Ausführung. Die Workflow-Verbesserung ergibt sich aus dem COG-Format, das Cloud-native Architekturen ermöglicht.

Wenn Ihre Workflows jedoch von ArcPy-spezifischen Funktionen wie ausgefeilter hydrologischer Modellierung abhängig sind oder Sie in der Esri-Infrastruktur festsitzen, kann ein Hybrid-Ansatz besser funktionieren – verwenden Sie Rasterio zur Datenvorbereitung und -ausgabe, ArcPy für spezialisierte Analysen.

Häufig gestellte Fragen

Ist Rasterio schneller als ArcPy Spatial Analyst?

Ja, für die meisten Operationen. Rasterio mit NumPy bietet 5-20x Geschwindigkeitssteigerungen für Raster-Algebra dank vektorisierter Operationen. Das Lesen von Cloud-Optimized GeoTIFFs kann 10-50x schneller sein als ArcPy, weil HTTP-Bereichsanforderungen verwendet werden – Sie laden nur die Pixel herunter, die Sie benötigen.

Kann Rasterio ArcGIS-Rasterformate lesen?

Ja, Rasterio liest alle GDAL-unterstützten Formate einschließlich GeoTIFF, JPEG2000, MrSID, ESRI Grid und File Geodatabase-Raster. Für optimale Leistung konvertieren Sie in das Cloud-Optimized GeoTIFF-Format, das Streaming aus Cloud-Speicher ohne vollständigen Dateidownload ermöglicht.

Was ersetzt arcpy.sa Slope- und Aspect-Funktionen?

Verwenden Sie np.gradient() für grundlegende Neigunjgs-/Expositionsberechnungen, oder Bibliotheken wie xrspatial, richdem oder earthpy für vordefinierte Geländeanalysefunktionen. Die Leistung ist typischerweise 5-10x schneller als arcpy.sa-Äquivalente aufgrund vektorisierter Berechnung.

Wie gehe ich mit großen Rastern um, die nicht in den Speicher passen?

Verwenden Sie Windowed Reading von Rasterio zum Verarbeiten in Chunks, oder xarray mit Dask für automatisches Chunking und parallele Ausführung. Für sehr große Datensätze (100 GB+) ermöglicht das COG-Format das Lesen nur des benötigten räumlichen Umfangs über HTTP-Bereichsanforderungen.

Was ist Cloud-Optimized GeoTIFF (COG) und warum sollte ich es verwenden?

COG ist eine GeoTIFF-Variante, die für Cloud-Speicher und HTTP-Bereichsanforderungen optimiert ist. Es ermöglicht das Lesen nur von Teilen großer Raster, ohne ganze Dateien herunterzuladen. Rasterio unterstützt nativ COG zum Lesen von und Schreiben in Cloud-Speicher wie S3 und Azure Blob – ArcPy hat diese Fähigkeit nicht.

Workflow-Automatisierung Einblicke erhalten

Monatliche Tipps zur Automatisierung von GIS-Workflows, Open-Source-Tools und Erkenntnisse aus Enterprise-Deployments. Kein Spam.

NÄCHSTER SCHRITT

Benötigen Sie Hilfe bei der Migration Ihrer Raster-Workflows?

Unsere kostenlose Workflow-Bewertung analysiert Ihre aktuellen ArcPy-Skripte, identifiziert Migrationskandidaten und bietet erwartete Leistungsverbesserungen und ROI-Schätzungen.