Erstellen eines Voxel-Layers

Mit einem Voxel-Layer werden multidimensionale volumetrische regelmäßig gerasterte Daten dargestellt. Die Datenquelle eines Voxel-Layers kann eine netCDF-Datei, ein Szenen-Layer-Paket oder ein Szenen-Service sein. ArcGIS Pro stellt mehrere Geoverarbeitungswerkzeuge und Workflows bereit, um Datenquellen zu erstellen, die für einen Voxel-Layer geeignet sind. Mithilfe verschiedener Workflows können Sie multidimensionale Daten aus 3D-Punkteingaben, aus geostatistischer Analyse oder durch Konvertierung vorhandener multidimensionaler Daten, wie z. B. Raster-Daten, erstellen, um sie als Voxel-Layer zu visualisieren. Weitere Informationen zu Voxel-Layern finden Sie unter Unterstützte Voxel-Formate und Häufig gestellte Fragen.

Hinweis:

Das Werkzeug Feature in NetCDF erzeugt keine Ausgabe, die für einen Voxel-Layer geeignet ist.

Erstellen eines Voxel-Layers aus Punkteingaben unter Verwendung geostatistischer Analyse

Sie interpolieren und visualisieren Punktdaten als Voxel-Layer. Beispielsweise können Sie den Sauerstoffgehalt eines Untersuchungsgebiets im Zeitverlauf analysieren. In ArcGIS können Sie mithilfe einer geostatistischen Analyse diese Mustertypen analysieren. Sie können Messwerte zum Gehalt von gelöstem Sauerstoff visualisieren, die in verschiedenen Tiefen erfasst wurden, und eine geostatistische Interpolation in 3D durchführen, um den Sauerstoffgehalt im gesamten Untersuchungsgebiet vorherzusagen. Sie können anhand der geostatistischen Analyse eine 3D-netCDF-Datei erstellen und sie als Voxel-Layer in einer lokalen Szene visualisieren. Wenn eine lokale Szene aktiv ist, geben die geostatistischen Analysewerkzeuge den Voxel-Layer an die Szene aus. Zu den kompatiblen Werkzeugen gehören "Empirical Bayesian Kriging", "IDW 3D" und "Nächster Nachbar 3D".

  1. Klicken Sie auf die Registerkarte Analyse und auf Werkzeuge Werkzeuge.
  2. Suchen Sie im Bereich Geoverarbeitung nach dem Werkzeug Empirical Bayesian Kriging 3D, klicken Sie darauf, um es zu öffnen, und legen Sie die folgenden Parameter fest:
    • Eingabe-Features: Der Eingabe-Punkt-Feature-Layer, der interpoliert wird
    • Höhenfeld: Das Feld mit einem Höhenwert für jeden Punkt
    • Wertfeld: Das Feld mit den gemessenen Werten, die interpoliert werden sollen
    • Geostatistischer Ausgabe-Layer: Der erzeugte geostatistische Layer
  3. Klicken Sie auf Ausführen Ausführen.

    Der geostatistische Layer wird erzeugt.

  4. Suchen Sie im Bereich Geoverarbeitung nach dem Werkzeug 3D-GA-Layer in NetCDF, klicken Sie darauf, um es zu öffnen, und legen Sie die folgenden Parameter fest:
    • Geostatistische Eingabe-Layer in 3D: Der geostatistische 3D-Layer aus Schritt 3
    • Ausgabe-netCDF-Datei: Der Name der Ausgabe-netCDF-Datei
  5. Klicken Sie auf Ausführen Ausführen.

Der Voxel-Layer wird in der Szene angezeigt.

Erstellen eines Voxel-Layers aus Punkteingaben mit dem Werkzeug "Raum-Zeit-Würfel erstellen"

Multidimensionale Daten können X, Y und Zeit als eine Höhendimension darstellen. Beispielsweise können Sie das Sturmmuster eines Untersuchungsgebiets im Zeitverlauf analysieren. In ArcGIS Pro können Sie mithilfe eines Raum-Zeit-Würfels diese Mustertypen analysieren. Mit einem Raum-Zeit-Würfel kann eine Reihe von Punkten in einer netCDF-Datei mittels Aggregation zu Raum-Zeit-Abschnitten zusammengefasst werden. In jedem Abschnitt werden die Punkte zentriert und die angegebenen Attribute aggregiert. Für alle Abschnittspositionen werden die Anzahl sowie die Werte der Zusammenfassungsfelder ausgewertet. Da für einen Voxel-Layer regelmäßig gerasterte Daten erforderlich sind, muss der Aggregations-Shape den Typ Netz aufweisen. Das Ergebnis ist eine volumetrische XYT-Datenstruktur.

  1. Klicken Sie auf die Registerkarte Analyse und auf Werkzeuge Werkzeuge.
  2. Suchen Sie im Bereich Geoverarbeitung nach dem Werkzeug Raum-Zeit-Würfel durch Aggregieren von Punkten erstellen, klicken Sie darauf, um es zu öffnen, und legen Sie die folgenden Parameter fest:
    • Eingabe-Features: Der zu aggregierende Eingabe-Punkt-Feature-Layer
    • Ausgabe-Raum-Zeit-Würfel: Die Ausgabe-netCDF-Datei, die erstellt wird.
    • Zeitfeld: Das Feld mit Datums- und Uhrzeitangaben für jeden Punkt.
    • Zeitschrittintervall: Die Anzahl der Sekunden, Minuten, Stunden, Tage, Wochen oder Jahre, die einen Zeitschritt darstellen.
    • Entfernungsintervall: Die Größe der Abschnitte, die zum Aggregieren der Eingabe-Features verwendet werden.
    • Zusammenfassungsfelder: Das numerische Feld, das Attributwerte enthält, anhand derer die angegebene Statistik beim Aggregieren in einem Raum-Zeit-Würfel berechnet wird.
    • Aggregations-Shape-Typ: Wählen Sie Netzgitter aus.
  3. Klicken Sie auf Ausführen Ausführen.

    Der Raum-Zeit-Würfel wird erstellt.

  4. Klicken Sie auf die Registerkarte Karte und auf Daten hinzufügen Daten hinzufügen.

    Für Voxel-Layer ist eine aktive lokale Szene erforderlich.

  5. Klicken Sie auf Multidimensionalen Voxel-Layer hinzufügen Multidimensionalen Voxel-Layer hinzufügen, und geben Sie die in Schritt 3 erstellte Ausgabe-netCDF-Datei an.
  6. Klicken Sie auf OK.

Der Voxel-Layer wird in der Szene angezeigt.

Erstellen eines Voxel-Layers aus einem multidimensionalen Raster

Multidimensionale Daten können in unterschiedlichen Formaten vorliegen. Zurzeit unterstützen Voxel-Layer lediglich netCDF-Daten. Sie können Daten in anderen multidimensionalen Formaten, wie z. B. GRIB, HDF und CRF, mit dem Werkzeug Raster kopieren in eine netCDF-Datei exportieren.

  1. Klicken Sie auf die Registerkarte Analyse und auf Werkzeuge Werkzeuge.
  2. Suchen Sie im Bereich Geoverarbeitung nach dem Werkzeug Raster kopieren, klicken Sie darauf, um es zu öffnen, und legen Sie die folgenden Parameter fest:
    • Eingabe-Raster: Legen Sie hierfür das multidimensionale Eingabe-Raster fest.
    • Ausgabe-Raster-Dataset: Legen Sie hierfür die Ausgabe-netCDF-Datei mit der Dateierweiterung .nc fest.
    • NoData-Wert: Entfernen Sie den Standardwert, und lassen Sie das Feld leer.
    • Format: Wählen Sie NetCDF-Format aus.

    Für Voxel-Layer sind regelmäßig gerasterte Daten erforderlich.

  3. Klicken Sie auf Ausführen Ausführen.

    Die netCDF-Datei wird erstellt.

  4. Klicken Sie auf die Registerkarte Karte und auf Daten hinzufügen Daten hinzufügen.

    Für Voxel-Layer ist eine aktive lokale Szene erforderlich.

  5. Klicken Sie auf Multidimensionalen Voxel-Layer hinzufügen Multidimensionalen Voxel-Layer hinzufügen, und geben Sie die in Schritt 3 erstellte Ausgabe-netCDF-Datei an.
  6. Klicken Sie auf OK.

Der Voxel-Layer wird in der Szene angezeigt.

Erstellen eines Voxel-Layers aus einer .csv-Datei

In diesem Beispiel wird eine netCDF-Datei unter Verwendung einer .csv-Datei generiert. Die .csv-Datei erhält fünf Spalten: "X", "Y", "Z", "T" und "Data". Außerdem wird davon ausgegangen, dass die .csv-Datei in allen Dimensionen gleichmäßig gerastert ist. Nachdem Sie die netCDF-Datei erstellt haben, können Sie das Werkzeug Multidimensionalen Voxel-Layer erstellen ausführen und sie als Layer-Datei speichern, um sie zu einer lokalen Szene hinzuzufügen.

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"
)

Verwandte Themen