ArcGIS Notebooks позволяет загружать шейп-файлы и файловые базы геоданных, к которым можно получить доступ через блокноты, для использования с ArcPy.
Загрузка наборов данных для использования в блокноте
Чтобы загрузить шейп-файлы или файловые базы геоданных для использования с ArcPy в блокноте, выполните следующие действия:
- Сожмите набор данных, который хотите загрузить, в файл .zip.
- Во редакторе блокнота щелкните вкладку Файлы.
- На вкладке Файлы перейдите к /arcgis/home.
- Щелкните Выберите файл и выберите .zip файл набора данных.
- Щелкните Загрузить.
- В блокноте разархивируйте файл одним из следующих методом:
- Используйте магические выражения IPython из ячейки блокнота.
!unzip /arcgis/home/watersheds.zip -d /arcgis/home
- Используйте модуль Python Zip, чтобы распаковать файл.
import zipfile with zipfile.ZipFile("/arcgis/home/watersheds.zip", "r") as zip_ref: zip_ref.extractall("/arcgis/home")
- Используйте магические выражения IPython из ячейки блокнота.
Дополнительную информацию об использовании ArcPy в блокноте смотрите Использование ArcPy в блокноте.
Использование загруженных наборов данных с ArcPy в блокноте
После загрузки шейп-файла или файловой базы геоданных вы можете получить к ним доступ из блокнота.
Использование загруженного шейп-файла с ArcPy
Следующие шаги описывают пример рабочего процесса использования инструмента ArcPy Буфер с загруженным шейп-файлом:
- Загрузите образец набора данных со стартовой страницы элемента набора данных Python.
- Загрузите файл .zip в рабочую область блокнота, следуя шагам, перечисленным выше в разделе Загрузка набора данных с использованием блокнота.
- Импортируйте ArcGIS API for Python и ArcPy.
from arcgis.gis import GIS gis = GIS("home") import arcpy
- Разархивируйте набор данных, который вы загрузили в каталог рабочей области.
!unzip /arcgis/home/PythonStart.zip -d /arcgis/home
- Задайте в качестве рабочей области ArcPy путь к каталогу извлеченного файла.
arcpy.env.workspace = "/arcgis/home/PythonStart"
- Создайте буфер размером 500 метров вокруг каждой пожарной части в файле fire_stations.shp.
result = arcpy.analysis.Buffer("fire_stations.shp", "fire_stations_500m", "500 METERS")
- Сгенерируйте и распечатайте описание результирующего набора данных буферного шейп-файла.
# 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}")
- Распечатайте имена и типы полей в шейп-файле буфера.
for field in desc.fields: print("%-22s %s %s" % (field.name, ":", field.type))
- Создайте файл .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)
- Опубликуйте шейп-файл буфера как размещенный векторный слой.
item = gis.content.add({}, '/arcgis/home/fire_stations_500m.zip') published_item = item.publish() published_item.share(everyone=True) display(published_item)
- Удалите шейп-файл буфера.
arcpy.management.Delete("fire_stations_500m.shp")
Использование загруженной файловой базы геоданных с ArcPy
Следующие шаги описывают пример рабочего процесса загрузки файловой базы геоданных для использования с ArcPy.
- Загрузите образец набора данных со страницы элемента базы геоданных данных Сингапура.
- Загрузите .zip файл, содержащий файловую базу геоданных в блокнот, выполняя шаги, перечисленный выше в разделе Загрузка наборов данных для использования в блокноте.
- Импортируйте ArcGIS API for Python и ArcPy.
from arcgis.gis import GIS gis = GIS("home") import arcpy
- Разархивируйте загруженный набор данных в каталог рабочей области.
!unzip /arcgis/home/Singapore_Data.gdb.zip -d /arcgis/home
- Задайте в качестве рабочей области ArcPy путь к каталогу извлеченного файла.
arcpy.env.workspace = "/arcgis/home/Singapore_Data.gdb"
- Перечислите имена классов пространственных объектов, содержащихся в файловой базе геоданных.
singapore_data = arcpy.ListFeatureClasses() singapore_data
- Перечислите поля, содержащиеся в одном из классов пространственных объектов.
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
- Для каждой строки набора данных выведите значения полей идентификатора объекта, названия места и адреса.
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]}')