Создание слоя вокселов

Слой вокселов представляет собой многомерные объемные данные с регулярной сеткой. Источником данных для слоя вокселов может быть файл netCDF, пакет слоев сцены или сервис сцены. ArcGIS Pro предлагает несколько инструментов геообработки и рабочих процессов для создания источников данных, подходящих для слоя вокселов. Различные рабочие процессы позволяют создавать многомерные данные по входным 3D точкам, геостатистическому анализу или конвертировав многомерные данные, такие как растровые данные, для визуализации как слоя вокселов. Для получения дополнительных сведений о слоях вокселов см. разделы Поддерживаемые форматы вокселов и Часто задаваемые вопросы.

Создание слоя вокселов по входным точкам с помощью геостатистического анализа

Точечные данные интерполируются и визуализируются в виде слоя вокселов. Например, можно проанализировать уровни кислорода в изучаемой области с течением времени. В ArcGIS, геостатистический анализ позволяет анализировать закономерности такого типа. Можно визуализировать измерения растворенного кислорода, проведенные на различных глубинах и выполнить трехмерную геостатистическую интерполяцию для прогнозирования уровня кислорода во всей изучаемой области. Можно создать файл 3D NetCDF по результатам геостатистического анализа и визуализировать его как слой вокселов в локальной сцене.

  1. Щелкните вкладку Анализ и нажмите Инструменты Инструменты.
  2. На панели Геообработка найдите Эмпирический Байесовский кригинг, откройте инструмент и задайте следующие параметры:
    • Входные объекты - слой точечных объектов
    • Поле Z-значения - поле, в котором хранится значение высоты для каждой точки
    • Выходной геостатический слой - создаваемый геостатический слой
  3. Щелкните Запустить Запустить.

    Будет построен геостатический слой.

  4. На панели Геообработка найдите инструмент 3D-Слой GA в NetCDF, откройте его и задайте следующие параметры:
    • Входной 3D геостатистический слой - 3D геостатистический слой из шага 3
    • Выходной файл netCDF - Имя выходного файла netCDF
  5. Щелкните Запустить Запустить.

    Создается файл 3D NetCDF.

  6. Щелкните Карта и выберите Добавить данные Добавить данные.

    Для слоя вокселов требуется активная локальная сцена.

  7. Щелкните Добавить многомерный слой вокселов Добавить многомерный слой вокселов и укажите выходной netCDF, созданный в шаге 5.
  8. Нажмите OK.

Слой вокселов отображается в сцене.

Создание слоя вокселов из входных точек с помощью инструмента Создать куб Пространство-Время

Многомерные данные могут содержать значения X,Y и время в качестве высоты. Например, можно проанализировать поведение шторма в изучаемой области с течением времени. В ArcGIS Pro куб пространства-времени позволяет анализировать закономерности такого типа. Куб пространства-времени может суммировать набор точек в файл netCDF, агрегируя точки в бины пространства-времени. В пределах каждого бина точки центрируются и агрегируются указанные атрибуты. Для всех местоположений бинов проводится оценка значений числа объектов, а также вычисляются суммы значений полей. Поскольку слою вокселов требуется данные, распределенные по регулярной сетке, агрегация должна быть в виде регулярной сетки. В результате получается объемная структура данных XYT.

  1. Щелкните вкладку Анализ и нажмите Инструменты Инструменты.
  2. На панели Геообработка найдите инструмент Создать куб пространство-время по агрегации точек, откройте его и задайте следующие параметры:
    • Входные объекты - слой точечных объектов
    • Выходной куб пространства-времени - создаваемый файл netCDF
    • Поле времени - поле, содержащее значения даты и времени для каждой точки
    • Интервал временного шага - число секунд, минут, часов, дней, недель или лет, которое будет представлять один временной шаг
    • Интервал расстояния - размер бинов, используемых для агрегации входных объектов
    • Поля суммирования - числовое поле, содержащее значения атрибута, для которого будет вычислен определенный статистический показатель при агрегации в куб пространства-времени
    • Тип геометрии для агрегации - выберите сетка
  3. Щелкните Запустить Запустить.

    Создается куб пространства-времени.

  4. Щелкните Карта и выберите Добавить данные Добавить данные.

    Для слоя вокселов требуется активная локальная сцена.

  5. Щелкните Добавить многомерный слой вокселов Добавить многомерный слой вокселов и укажите выходной netCDF, созданный в шаге 3.
  6. Нажмите OK.

Слой вокселов отображается в сцене.

Создание слоя вокселов из многомерного растра

Многомерные данные могут находиться в различных форматах. В настоящее время слои вокселов поддерживают только данные netCDF. Вы можете экспортировать данные из других многомерных форматов, таких как GRIB, HDF и CRF в netCDF, используя инструмент Копировать растр.

  1. Щелкните вкладку Анализ и нажмите Инструменты Инструменты.
  2. На панели Геообработка найдите инструмент Копировать растр, откройте его и задайте следующие параметры:
    • Входной растр - укажите входной многомерный растр.
    • - укажите выходной файл netCDF с расширением .nc.
    • Значение No Data - удалите значение по умолчанию и оставьте поле пустым.
    • Формат — выберите формат NetCDF.

    Для слоя вокселов необходимо, чтобы данные были в виде регулярной сетки.

  3. Щелкните Запустить Запустить.

    Будет создан файл netCDF.

  4. Щелкните вкладку Карта и выберите Добавить данные Добавить данные.

    Для слоя вокселов требуется активная локальная сцена.

  5. Щелкните Добавить многомерный слой вокселов Добавить многомерный слой вокселов и укажите выходной netCDF, созданный в шаге 3.
  6. Нажмите OK.

Слой вокселов отображается в сцене.

Создание слоя вокселов из файла CSV

В этом примере файл netCDF создается с помощью файла CSV. Файл CSV будет содержать пять столбцов: X, Y, Z, T и Data. Также предполагается, что файл CSV имеет регулярное распределение по всем размерностям. После создания файла NetCDF можно визуализировать его как слой вокселов в локальной сцене.

from netCDF4 import Dataset
import numpy as np
import pandas as pd

#Create a pandas dataframe and insert data from CSV/TEXT file
filePath = "myFile.csv"
dfPoints = pd.read_csv(filePath)

#Sort values to ensure they are in the correct order
dfPoints = dfPoints.sort_values(by=['T','Z','Y','X'])

#Create domain for longitude/latitude
#Each domain has unique values, no repeating numbers, and are sorted (to be monotonic)
xDomain = np.sort(np.unique(dfPoints.iloc[:,0].values)) # 0th column contains x values
yDomain = np.sort(np.unique(dfPoints.iloc[:,1].values)) # 1st column contains y values
zDomain = np.sort(np.unique(dfPoints.iloc[:,2].values)) # 2nd column contains z values
tDomain = np.sort(np.unique(dfPoints.iloc[:,3].values)) # 3rd column contains t values

#Create NetCDF file
outDataSet = Dataset('myNetCDF.nc', 'w', format = 'NETCDF4') # Creates the output NetCDF file
outDataSet.createDimension('x', len(xDomain))                # Creates the x dimension
outDataSet.createDimension('y', len(yDomain))                # Creates the y dimension
outDataSet.createDimension('z', len(zDomain))                # Creates the z dimension
outDataSet.createDimension('t', len(tDomain))                # Creates the t dimension

#Create variables
ncX = outDataSet.createVariable('x', np.float32, 'x') # Create variable x
ncY = outDataSet.createVariable('y', np.float32, 'y') # Create variable y
ncZ = outDataSet.createVariable('z', np.float32, 'z') # Create variable z
ncT = outDataSet.createVariable('t', np.float32, 't') # Create variable t

#Create variable data with dimensions (t,z,y,x). The fill value is set to -99999 which are values to be ignored by client.
ncData = outDataSet.createVariable('data',np.float32,('t','z','y','x'),fill_value = -99999) 

#Assign values
ncX[:] = xDomain[:]
ncY[:] = yDomain[:]
ncZ[:] = zDomain[:]
ncT[:] = tDomain[:]

#The dataframe 'Data' column must be reshaped to match the dimension shapes and placed into the ncData variable
ncData[:,:,:,:]  = np.reshape(
    dfPoints['Data'].values,
    (tDomain.shape[0],zDomain.shape[0],yDomain.shape[0],xDomain.shape[0])
    )

#Assign variable attributes

ncData.long_name = "My test data"

ncZ.positive = 'up'

ncX.standard_name = 'projection_x_coordinate'
ncX.units = 'm'

ncY.standard_name = 'projection_y_coordinate'
ncY.units = 'm'

ncT.units = 'hours since 2000-01-01 00:00:00'

#Assign global attribute. This attribute is to assign a coordinate system.
outDataSet.esri_pe_string = 'PROJCS["ETRS_1989_UTM_Zone_32N_7stellen",GEOGCS["GCS_ETRS_1989",DATUM["D_ETRS_1989",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",2500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",9.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0],AUTHORITY["Esri",102328]]'

outDataSet.close()

Связанные разделы