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

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

Примечание:

Инструмент Объекты в NetCDF не создает выходные данные, приемлемые для слоя вокселов.

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

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

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

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

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

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

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

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

  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
import arcpy

#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()

# Create the voxel layer
arcpy.md.MakeMultidimensionalVoxelLayer(outDataSet, "TestVoxelLayer")

# Save the voxel layer to a layer file
arcpy.management.SaveToLayerFile(
    in_layer="TestVoxelLayer",
    out_layer=r"C:\Temp\TestVoxelLayer.lyrx",
    is_relative_path=None,
    version="CURRENT"
)

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