Skip To Content

Hochladen von Datasets zur Verwendung mit ArcPy

Mit ArcGIS Notebook Server können Sie Shapefiles und File-Geodatabases hochladen und in Notebooks auf diese zugreifen, um sie mit ArcPy zu verwenden.

Hochladen von Datasets zur Verwendung in einem Notebook

Gehen Sie folgendermaßen vor, um Shapefiles oder File-Geodatabases zur Verwendung mit ArcPy in ein Notebook hochzuladen:

  1. Komprimieren Sie das Dataset, das Sie hochladen möchten, in eine .zip-Datei.
  2. Klicken Sie im Notebook-Editor auf die Registerkarte Dateien.
  3. Navigieren Sie auf der Registerkarte Dateien zu /arcgis/home.
  4. Klicken Sie auf Datei auswählen, und wählen Sie die .zip-Datei mit Ihrem Dataset aus.
  5. Klicken Sie auf Hochladen.
  6. Entpacken Sie die Datei in Ihrem Notebook mit einer der folgenden Methoden:
    1. Verwenden Sie IPython Magic-Anweisungen in einer Notebook-Zelle.
      !unzip /arcgis/home/watersheds.zip -d /arcgis/home
    2. Verwenden Sie das ZIP-Modul in Python, um die Datei zu entpacken.
      import zipfile
      with zipfile.ZipFile("/arcgis/home/watersheds.zip", "r") as zip_ref:
          zip_ref.extractall("/arcgis/home")

Weitere Informationen zum Verwenden von ArcPy in Ihrem Notebook finden Sie unter Verwenden von ArcPy in einem Notebook.

Verwenden von hochgeladenen Datasets mit ArcPy in einem Notebook

Nachdem Sie das Shapefile oder die File-Geodatabase hochgeladen haben, können Sie über Ihr Notebook darauf zugreifen.

Verwenden eines hochgeladenen Shapefile mit ArcPy

In den folgenden Schritten wird ein Beispiel-Workflow für die Verwendung des Werkzeugs "Puffer" von ArcPy mit einem hochgeladenen Shapefile erläutert:

  1. Laden Sie das Beispiel-Dataset von der Elementseite des PythonStart-Datasets herunter.
  2. Laden Sie die .zip-Datei in den Notebook-Workspace hoch, wie in den Schritten im Abschnitt Hochladen von Datasets zur Verwendung in einem Notebook oben beschrieben.
  3. Importieren Sie ArcGIS API for Python und ArcPy.

    from arcgis.gis import GIS
    gis = GIS("home")
    import arcpy

  4. Entpacken Sie das Dataset, das Sie in Ihr Workspace-Verzeichnis hochgeladen haben.

    
    !unzip /arcgis/home/PythonStart.zip -d /arcgis/home

  5. Legen Sie den ArcPy-Workspace auf den Verzeichnispfad der extrahierten Datei fest.

    arcpy.env.workspace = "/arcgis/home/PythonStart"

  6. Erstellen Sie einen Puffer von 500 Meter um jede Feuerwache in der Datei fire_stations.shp.

    result = arcpy.analysis.Buffer("fire_stations.shp", "fire_stations_500m", "500 METERS")

  7. Generieren und drucken Sie eine Beschreibung des resultierenden Puffer-Shapefile-Datasets.

    # Describe the resulting shapefile dataset
    desc = arcpy.Describe("fire_stations_500m.shp")
    
    # Print dataset properties
    print(f"Dataset Type: {desc.datasetType}")
    print(f"Shape Type: {desc.shapeType}")
    print(f"Feature Type: {desc.featureType}")
    print(f"Spatial Index: {desc.hasSpatialIndex}")
    print(f"Spatial reference name: {desc.spatialReference.name}")
    print(f"Extent:\n\tXMin: {desc.extent.XMin}\n\tXMax: {desc.extent.XMax}")
    print(f"\tYMin: {desc.extent.YMin}\n\tYMax: {desc.extent.YMax}")

  8. Drucken Sie die Namen und Typen von Feldern im Puffer-Shapefile.

    for field in desc.fields:
        print("%-22s %s %s" % (field.name, ":", field.type))

  9. Erstellen Sie eine .zip-Datei des Puffer-Shapefile-Datasets.

    import os
    import fnmatch
    import zipfile
     
    # The path for listing items
    path = '/arcgis/home/PythonStart/'
    os.chdir(path)
     
    # List of files in complete directory
    file_list = []
    
    # Loop to extract files containing word "fire_stations_500m"
    for path, folders, files in os.walk(path):
        for file in files:
            if fnmatch.fnmatch(file, '*fire_stations_500m*'):
                file_list.append(file)
    
    with zipfile.ZipFile('/arcgis/home/fire_stations_500m.zip', 'w') as zipF:
        for file in file_list:
            zipF.write(file, compress_type=zipfile.ZIP_DEFLATED)

  10. Veröffentlichen Sie das Puffer-Shapefile als gehosteten Feature-Layer.

    item = gis.content.add({}, '/arcgis/home/fire_stations_500m.zip')
    published_item = item.publish()
    published_item.share(everyone=True)
    display(published_item)

  11. Löschen Sie das Puffer-Shapefile.

    arcpy.management.Delete("fire_stations_500m.shp")

In diesem Beispiel-Workflow haben Sie ein neues Puffer-Shapefile mithilfe von ArcPy mit einem hochgeladenen Dataset erstellt und veröffentlicht.

Verwenden einer hochgeladenen File-Geodatabase mit ArcPy

In den folgenden Schritten wird ein Beispiel-Workflow für das Hochladen einer File-Geodatabase zur Verwendung mit ArcPy erläutert.

  1. Laden Sie das Beispiel-Dataset von der Elementseite der Geodatabase mit Daten zu Singapur herunter.
  2. Laden Sie die .zip-Datei mit der File-Geodatabase in das Notebook hoch, wie in den Schritten im Abschnitt Hochladen von Datasets zur Verwendung in einem Notebook oben beschrieben.
  3. Importieren Sie ArcGIS API for Python und ArcPy.

    from arcgis.gis import GIS
    gis = GIS("home")
    import arcpy

  4. Entpacken Sie das Dataset, das Sie in Ihr Workspace-Verzeichnis hochgeladen haben.

    !unzip /arcgis/home/Singapore_Data.gdb.zip -d /arcgis/home

  5. Legen Sie den ArcPy-Workspace auf den Verzeichnispfad der extrahierten Datei fest.

    arcpy.env.workspace = "/arcgis/home/Singapore_Data.gdb"

  6. Listen Sie die Namen der Feature-Classes auf, die in der File-Geodatabase enthalten sind.

    singapore_data = arcpy.ListFeatureClasses()
    singapore_data

  7. Listen Sie die Felder auf, die in einer der Feature-Classes enthalten sind.

    singapore_tourist_attractions = singapore_data[2]
    singapore_tourist_attractions_fields = []
    fields = arcpy.ListFields(singapore_tourist_attractions)
    for field in fields:
        if (field.name != 'Shape'):
            singapore_tourist_attractions_fields.append(field.name)
    singapore_tourist_attractions_fields

  8. Drucken Sie für jede Zeile im Dataset die Werte für ObjectID, Ortsname und Adressenfeld.

    with arcpy.da.SearchCursor(singapore_tourist_attractions, singapore_tourist_attractions_fields) as cursor:
        for row in cursor:
            print(f'{row[0]}. {row[1]}, {row[2]}')