ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Справка
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Картографическая платформа вашей организации

ArcGIS Desktop

Полноценная профессиональная ГИС

ArcGIS Enterprise

ГИС предприятия

ArcGIS for Developers

Инструменты для встраивания приложений с местоположениями

ArcGIS Solutions

Бесплатные шаблоны карт и приложений для отрасли

ArcGIS Marketplace

Получение приложения и данных для вашей организации.

  • Документация
  • Поддержка
Esri
  • Войти
user
  • Мой профиль
  • Выход

Справка

  • На главную
  • Начало работы
  • Карта
  • Анализ
  • Управление данными
  • Инструменты
  • Больше...

Работа с NumPy в ArcGIS

  • Работа с данными таблиц и объектов
  • Работа с растрами

Numerical Python (NumPy) – это основной пакет для экспоненциальных вычислений в Python с поддержкой мощных n-размерных объектов типа массив (array). NumPy – это среда для выполнения сложных математических операций, которая предоставляется в комплекте с программным обеспечением ArcGIS начиная с версии 9.2. Дополнительные сведения см. на веб-сайте NumPy.Внешний источник.

Массив Python NumPy поддерживают работу с очень большими массивами. В языке Python предусмотрено много функций для обработки массивов NumPy, наиболее значимые из них содержатся в пакете SciPy для научных расчетов в среде Python.

Работа с данными таблиц и объектов

Таблицы и классы объектов можно конвертировать в массив NumPy и обратно с помощью функций модуля доступа к данным (arcpy.da).

Операции конвертации массивов NumPy в таблицы и классы объектов можно выполнять только со структурированными массивами. Структурированные массивы содержат поля (структуры), которые используются для сопоставления данных с полями таблиц и классов объектов в ArcGIS. Дополнительные сведения о структурированных массивах см. в разделе Структурированные массивыВнешний источник.

Создайте структурированный массив NumPy.

import numpy

arr = numpy.array([(471316.383, 5000448.782), (470402.493, 5000049.216)],
                  numpy.dtype([('X', '>f8'),('Y', '>f8')]))

После этого структурированный массив NumPy можно конвертировать в класс пространственных объектов или таблицу.

Сконвертируйте массив NumPy в класс объектов базы геоданных.

import arcpy
import numpy

out_fc = 'C:/data/texas.gdb/fd/pointlocations'

# Create a numpy array with an id field, and a field with a tuple 
#  of x,y coordinates
arr = numpy.array([(1, (471316.3835861763, 5000448.782036674)),
                   (2, (470402.49348005146, 5000049.216449278))],
                  numpy.dtype([('idfield', numpy.int32),('XY', '<f8', 2)]))

# Define a spatial reference for the output feature class
spatial_ref = arcpy.Describe('C:/data/texas.gdb/fd').spatialReference

# Export the numpy array to a feature class using the XY field to
#  represent the output point feature
arcpy.da.NumPyArrayToFeatureClass(arr, out_fc, ['XY'], spatial_ref)

Функции arcpy.da для работы с данными таблиц и объектов

ФункцииОписание
ExtendTable

Позволяет соединять содержимое структурированного массива NumPy с другой таблицей на основе общего поля атрибутов.

FeatureClassToNumPyArray

Позволяет конвертировать класс объектов в структурированный массив NumPy.

NumPyArrayToFeatureClass

Позволяет конвертировать структурированный массив NumPy в класс объектов.

NumPyArrayToTable

Позволяет конвертировать структурированный массив NumPy в таблицу.

TableToNumPyArray

Позволяет конвертировать таблицу в структурированный массив NumPy.

Целочисленные поля в массивах NumPy не поддерживают значение NULL. Если в данных, преобразуемых с помощью функций FeatureClassToNumPyArray или TableToNumPyArray содержатся значения null, строки с этими значениями должны быть либо пропущены, либо замаскированы с помощью замещающего значения.

Пропустить все записи со значениями NULL.

arr = arcpy.da.FeatureClassToNumPyArray(fc, fields, skip_nulls=True)

C помощью словаря замаскируйте другими значениями все значения None в целочисленных полях.

fields = ['field1', 'field2']
arcpy.da.FeatureClassToNumPyArray(fc, fields, null_value=-9999)

Конвертация типов

Типы dtype созданного массива определяются типом полей входной таблицы или входного класса объектов.

Тип поляТип dtype массива NumPy

Single

numpy.float32

Double

numpy.float64

SmallInteger

numpy.int32

Integer

numpy.int32

OID

numpy.int32

GUID

<U64

String

<u1, <u10 и т.д.

Примечание:

Поля string, сконвертированные в массив, будут иметь такую же ширину. Например, поле string с шириной 20 будет иметь dtype <u20.

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

ТокенОписание

SHAPE@XY

Координаты X,Y центроида пространственного объекта

SHAPE@TRUECENTROID

Координаты X,Y истинного центроида пространственного объекта

SHAPE@X

Координата объекта по оси X

SHAPE@Y

Координата объекта по оси Y

SHAPE@Z

Координата объекта по оси Z

SHAPE@M

Значение m объекта

SHAPE@AREA

Площадь объекта

SHAPE@LENGTH

Длина объекта

Вопросы памяти

NumPy резервирует память при создании массивов. Если массив требует больше памяти, чем доступно, появится ошибка с исключением MemoryError.

Советы по предотвращению исключений MemoryError:

  • Удалите объекты массива после их использования. Это освободит память.
  • Используйте только нужные вам поля, особенно текстовые. Текстовые поля, конвертированные в массив, потребуют 4 байта на каждый символ. К примеру, текстовое поле длиной 100 потребует 400 байт памяти для каждого значения массива.

Тип dtype массива NumPyЧисло байт на значение

<U1

4

numpy.int32

4

numpy.float32

4

numpy.float64

8

Примечание:

numpy.nbytes возвращает словарь значений dtypes и число байт.

Работа с растрами

Растры можно конвертировать в массивы NumPy и обратно, используя функции ArcPy RasterToNumPyArray и NumPyArrayToRaster. Может потребоваться конвертировать растр ArcGIS в массив NumPy для:

  1. Использования одной из множества функций Python, которые применяются к массиву NumPy (например, фильтры данных, многомерный анализ или процедуры оптимизации).
  2. Разработки собственных функций через доступ к отдельным ячейкам массива NumPy (например, для реализации анализа ближайших соседей, изменения значения отдельных ячеек или запуска операторов накопления по всему растру).

функции arcpy для работы с растрами

ФункцииОписание
RasterToNumPyArray

Конвертирует растр в массив NumPy.

NumPyArrayToRaster

Конвертирует массив NumPy в растр.

Растр конвертируется в массив NumPy для вычисления процента значения ячейки в целой строке растра. Затем создается новый растр.

import arcpy
import numpy

my_array = arcpy.RasterToNumPyArray('C:/data/inRaster')
my_array_sum = my_array.sum(1)
my_array_sum.shape = (my_array.shape[0], 1)
my_array_perc = (my_array * 1.0) / my_array_sum

new_raster = arcpy.NumPyArrayToRaster(my_array_perc)
new_raster.save("C:/output/fgdb.gdb/PercentRaster")

ArcGIS Desktop

  • На главную
  • Документация
  • Поддержка

ArcGIS Platform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

  • О нас
  • Карьера
  • Блог Esri
  • Конференция пользователей
  • Саммит разработчиков
Esri
Расскажите нам, что вы думаете.
Copyright © 2019 Esri. | Конфиденциальность | Правовая информация