ボクセル レイヤーは、多次元の体積を表します (通常、グリッド データ)。 ボクセル レイヤーのデータ ソースは、netCDF ファイル、シーン レイヤー パッケージ、シーン サービスのいずれかです。 ArcGIS Pro では、複数のジオプロセシング ツールとワークフローを使用して、ボクセル レイヤーに適したデータ ソースを作成できます。 さまざまなワークフローにより、3D ポイント入力や地球統計学的解析から、またはラスター データなどの既存の多次元データを変換して多次元データを作成し、ボクセル レイヤーとして視覚化できます。 ボクセル レイヤーの詳細については、「サポートされているボクセル形式」および「よくある質問 (FAQ)」をご参照ください。
入力 | 処理 | Learn ArcGIS のレッスン |
---|---|---|
ポイント | ポイントの集約による時空間キューブの作成 | |
ポイント | Geostatistical Analyst による内挿 | |
ポイント | Python netCDF4 | |
netCDF | ||
多次元ラスター (netCDF、GRIB、HDF、CRF) | ラスターのコピー | |
テーブル | Python netCDF4 |
地球統計学的解析を使用した、ポイント入力からのボクセル レイヤーの作成
ポイント データを内挿し、ボクセル レイヤーとして視覚化します。 たとえば、ある分析範囲の酸素濃度を時系列で解析できます。 ArcGIS では、地球統計学的解析により、このようなパターンを解析できます。 さまざまな水深で取得された溶存酸素計測値を視覚化し、3D の地球統計学的内挿を実行して分析範囲全体にわたる酸素濃度を予測できます。 地球統計学的解析から 3D netCDF ファイルを作成し、ローカル シーンのボクセル レイヤーとして視覚化できます。
- [解析] タブをクリックし、[ツール] をクリックします。
- [ジオプロセシング] ウィンドウで [Empirical Bayesian Kriging] を検索し、クリックしてツールを開き、次のパラメーターを設定します。
- [Input Features] - ポイント フィーチャ レイヤー
- [Z Value Field] - 各ポイントの高さの値を保持するフィールド
- [Output Geostatistical Layer] - 生成された Geostatistical レイヤー
- [実行] をクリックします。
Geostatistical レイヤーが生成されます。
- [ジオプロセシング] ウィンドウで [GA Layer 3D To NetCDF] を検索し、クリックしてツールを開き、次のパラメーターを設定します。
- [Input 3D Geostatistcal Layer] - ステップ 3 の 3D Geostatistcal レイヤー
- [Output netCDF file] - 出力 netCDF ファイルの名前
- [実行] をクリックします。
3D netCDF ファイルが作成されます。
- [マップ] タブをクリックして、[データの追加] をクリックします。
ボクセル レイヤーには、アクティブなローカル シーンが必要です。
- [多次元ボクセル レイヤーの追加] をクリックし、ステップ 5 で作成した出力 netCDF を指定します。
- [OK] をクリックします。
ボクセル レイヤーがシーンに表示されます。
時空間キューブの作成ツールを使用した、ポイント入力からのボクセル レイヤーの作成
多次元データでは、X、Y、および時間を高さディメンションとして表すことができます。 たとえば、ある分析範囲の雨水パターンを時系列で解析できます。 ArcGIS Pro では、時空間キューブにより、このようなパターンを解析できます。 時空間キューブは、ポイントを時空間ビンに集約することで、ポイント セットを netCDF ファイルに集約できます。 各ビンで、ポイントが中央に表示され、指定された属性が集約されます。 すべてのビンの位置に対して、ポイント数と集計フィールドの値が評価されます。 ボクセル レイヤーには等間隔グリッド データが必要なため、集計形状はフィッシュネット タイプである必要があります。 結果は XYT 数値データ構造になります。
- [解析] タブをクリックし、[ツール] をクリックします。
- [ジオプロセシング] ウィンドウで [ポイントの集約による時空間キューブの作成 (Create Space Time Cube By Aggregating Points)] を検索し、クリックしてツールを開き、次のパラメーターを設定します。
- [入力フィーチャ] - ポイント フィーチャ レイヤー
- [出力時空間キューブ] - 生成された netCDF ファイル
- [時間フィールド] - ポイントごとの日時が格納されているフィールド
- [時間ステップ間隔] - 1 つの時間ステップを表す秒、分、時間、日、週、または年の数
- [距離間隔] - [入力フィーチャ] の集約に使用されるビンのサイズ
- [サマリー フィールド] - 時空間キューブに集約するときに、指定された統計情報の計算に使用される属性値を含む数値フィールド
- [集約形状タイプ] - [フィッシュネット グリッド] を選択
- [実行] をクリックします。
時空間キューブが生成されます。
- [マップ] タブをクリックして、[データの追加] をクリックします。
ボクセル レイヤーには、アクティブなローカル シーンが必要です。
- [多次元ボクセル レイヤーの追加] をクリックし、ステップ 3 で作成した出力 netCDF を指定します。
- [OK] をクリックします。
ボクセル レイヤーがシーンに表示されます。
多次元ラスターからのボクセル レイヤーの作成
多次元データにはさまざまな形式があります。 現在、ボクセル レイヤーは netCDF データのみをサポートしています。 [ラスターのコピー (Copy Raster)] ツールを使用して、GRIB、HDF、CRF などの他の多次元形式のデータを netCDF ファイルにエクスポートできます。
- [解析] タブをクリックし、[ツール] をクリックします。
- [ジオプロセシング] ウィンドウで [ラスターのコピー (Copy Raster)] を検索し、クリックしてツールを開き、次のパラメーターを設定します。
- [入力ラスター] - 入力多次元ラスターに設定します。
- - *.nc ファイル拡張子を持つ出力 netCDF ファイルに設定します。
- [データ値がありません] - デフォルト値を削除し、空白にします。
- [形式] - [NetCDF 形式] を選択します。
ボクセル レイヤーには、等間隔グリッドのデータが必要です。
- [実行] をクリックします。
netCDF ファイルが生成されます。
- [マップ] タブをクリックして、[データの追加] をクリックします。
ボクセル レイヤーには、アクティブなローカル シーンが必要です。
- [多次元ボクセル レイヤーの追加] をクリックし、ステップ 3 で作成した出力 netCDF を指定します。
- [OK] をクリックします。
ボクセル レイヤーがシーンに表示されます。
CSV ファイルからのボクセル レイヤーの作成
この例では、CSV ファイルを使用して netCDF ファイルが生成されています。 CSV ファイルには、X、Y、Z、T、およびデータの 5 つの列があります。 また、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()