Skip To Content

Загрузка наборов данных для использования с ArcPy

ArcGIS Notebook Server позволяет загружать шейп-файлы и файловые базы геоданных, которые могут быть доступны в ваших блокнотах для использования с ArcPy.

Загрузка наборов данных для использования в блокноте

Чтобы загрузить шейп-файлы или файловые базы геоданных для использования с ArcPy в блокноте, выполните следующее:

  1. Сожмите набор данных, который хотите загрузить, в файл .zip.
  2. Во редакторе блокнота щелкните вкладку Файлы.
  3. На вкладке Файлы перейдите к /arcgis/home.
  4. Щелкните Выбрать файл и выберите файл .zip из вашего набора данных.
  5. Щелкните Загрузить.
  6. В блокноте распакуйте файл одним из следующих способов:
    1. Используйте магические выражения IPython из ячейки блокнота.
      !unzip /arcgis/home/watersheds.zip -d /arcgis/home
    2. Используйте модуль Python Zip, чтобы распаковать файл.
      import zipfile
      with zipfile.ZipFile("/arcgis/home/watersheds.zip", "r") as zip_ref:
          zip_ref.extractall("/arcgis/home")

Чтобы узнать больше об использовании ArcPy в блокноте, см. Использование ArcPy в блокноте.

Использование загруженных наборов данных с ArcPy в блокноте

После того, как вы загрузили свой шейп-файл или файловую базу геоданных, вы можете получить к ней доступ из блокнота.

Использование загруженного шейп-файла с ArcPy

Следующие шаги описывают пример рабочего процесса использования инструмента ArcPy Буфер с загруженным шейп-файлом:

  1. Загрузите образец набора данных со страницы элемента начального набора данных Python.
  2. Загрузите файл .zip в рабочую область блокнота, выполнив действия, перечисленные в разделе Загрузка наборов данных для использования в блокноте в разделе выше.
  3. Импортируйте ArcGIS API for Python и ArcPy.

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

  4. Разархивируйте набор данных, который вы загрузили в каталог рабочей области.

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

  5. Задайте в качестве рабочей области ArcPy путь к каталогу извлеченного файла.

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

  6. Создайте буфер размером 500 метров вокруг каждой пожарной части в файле fire_stations.shp.

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

  7. Сгенерируйте и распечатайте описание результирующего набора данных буферного шейп-файла.

    # 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. Распечатайте имена и типы полей в шейп-файле буфера.

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

  9. Создайте файл .zip набора данных буферного шейп-файла.

    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. Опубликуйте шейп-файл буфера как размещенный векторный слой.

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

  11. Удалите шейп-файл буфера.

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

В этом примере рабочего процесса вы создадите и опубликуете новый шейп-файл буфера, используя ArcPy с его загруженным набором данных.

Использование загруженной файловой базы геоданных с ArcPy

Следующие шаги описывают пример рабочего процесса загрузки файловой базы геоданных для использования с ArcPy.

  1. Загрузите образец набора данных со страницы элемента базы геоданных данных Сингапура.
  2. Загрузите файл .zip, содержащий файловую базу геоданных, в свой блокнот, выполнив шаги, перечисленные в разделе Загрузка наборов данных для использования в блокноте в разделе выше.
  3. Импортируйте ArcGIS API for Python и ArcPy.

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

  4. Разархивируйте набор данных, загруженный в каталог вашей рабочей области.

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

  5. Задайте в качестве рабочей области ArcPy путь к каталогу извлеченного файла.

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

  6. Перечислите имена классов пространственных объектов, содержащихся в файловой базе геоданных.

    singapore_data = arcpy.ListFeatureClasses()
    singapore_data

  7. Перечислите поля, содержащиеся в одном из классов пространственных объектов.

    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. Для каждой строки в наборе данных выведите значения поля objectid, place-name и address.

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