Charger des jeux de données à utiliser avec ArcPy

ArcGIS Notebooks vous permet de charger des shapefiles et des géodatabases fichier, qui sont accessibles dans les notebooks, pour les utiliser avec ArcPy.

Charger des jeux de données à utiliser dans un notebook

Pour charger des shapefiles ou des géodatabases fichier à utiliser avec ArcPy dans un notebook, procédez comme suit :

  1. Compressez le jeu de données à charger dans un fichier .zip.
  2. Dans l’éditeur de notebooks, cliquez sur l’onglet Files (Fichiers).
  3. Dans l’onglet Files (Fichiers), accédez à /arcgis/home.
  4. Cliquez sur Choose File (Choisir un fichier), puis sélectionnez le fichier .zip du jeu de données.
  5. Cliquez sur Upload (Charger).
  6. Dans le notebook, utilisez l’une des méthodes suivantes pour décompresser votre fichier :
    1. Utilisez des commandes magiques IPython depuis une cellule de notebook.
      !unzip /arcgis/home/watersheds.zip -d /arcgis/home
    2. Utilisez le module Zip de Python pour décompresser le fichier.
      import zipfile
      with zipfile.ZipFile("/arcgis/home/watersheds.zip", "r") as zip_ref:
          zip_ref.extractall("/arcgis/home")

Pour en savoir plus sur l’utilisation de ArcPy dans un notebook, reportez-vous à la rubrique Utiliser ArcPy dans un notebook.

Utiliser des jeux de données chargés avec ArcPy dans un notebook

Après son chargement, le shapefile ou la géodatabase fichier est accessible depuis un notebook.

Utiliser un shapefile chargé avec ArcPy

Dans la procédure suivante, le processus en exemple décrit l’utilisation de l’outil Zone tampon de ArcPy avec un shapefile chargé :

  1. Téléchargez le jeu de données d’exemple depuis la page de l’élément du jeu de données de démarrage Python.
  2. Chargez le fichier .zip dans l’espace de travail d’un notebook, comme indiqué dans la section ci-dessus Charger des jeux de données à utiliser dans un notebook.
  3. Importez ArcGIS API for Python et ArcPy.

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

  4. Décompressez le jeu de données que vous avez chargé dans le répertoire d’espace de travail.

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

  5. Définissez l’espace de travail ArcPy sur le chemin d’accès au répertoire du fichier extrait.

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

  6. Créez une zone tampon de 500 mètres autour de chaque caserne de pompiers du fichier fire_stations.shp.

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

  7. Générez et imprimez une description du jeu de données du shapefile de zone tampon obtenu.

    # 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. Imprimez les noms et les types de champs du shapefile de zone tampon.

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

  9. Créez un fichier .zip du jeu de données du shapefile de zone tampon.

    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. Publiez le shapefile de zone tampon comme couche d’entités hébergée.

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

  11. Supprimez le shapefile de zone tampon.

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

Utiliser une géodatabase fichier chargée avec ArcPy

Dans la procédure suivante, le processus en exemple décrit le chargement d’une géodatabase fichier à utiliser avec ArcPy.

  1. Téléchargez le jeu de données d’exemple depuis la page de l’élément de la géodatabase de données de Singapour.
  2. Chargez le fichier .zip contenant la géodatabase fichier dans un notebook, comme indiqué dans la section ci-dessus Charger des jeux de données à utiliser dans un notebook.
  3. Importez ArcGIS API for Python et ArcPy.

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

  4. Décompressez le jeu de données chargé dans un répertoire d’espace de travail.

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

  5. Définissez l’espace de travail ArcPy sur le chemin d’accès au répertoire du fichier extrait.

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

  6. Répertoriez les noms des classes d’entités contenues dans la géodatabase fichier.

    singapore_data = arcpy.ListFeatureClasses()
    singapore_data

  7. Répertoriez les champs contenus dans l’une des classes d’entités.

    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. Pour chaque ligne du jeu de données, imprimez les valeurs des champs d’ID d’objet, de nom de lieu et d’adresse.

    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]}')