注釈
Go to the end をクリックすると完全なサンプルコードをダウンロードできます.
メッシュ後の地形#
地形サーフェスを使用して,3 D地形フォローメッシュを作成します.
メッシュに続く地形は,環境科学,例えば水文モデリング( Maxwell 2013 と ParFlow を参照)において一般的である.
この例では,特定の地形サーフェスに従う3 Dグリッド/メッシュを作成する簡単な方法を適用します.この例では,指定した数値標高モデル (DEM) が構造化されていることに注意してください(グリッド付きで3角形でない): これはDEMでは一般的です.
import numpy as np
import pyvista as pv
from pyvista import examples
グリッド地形サーフェス (DEM) をダウンロードします
dem = examples.download_crater_topo()
dem
ここで,対象となる領域をサブサンプルして抽出し,この例を単純にしましょう(ロードしたばかりのDEMもかなり大きいです.).ロードしたDEMは pyvista.ImageData
メッシュなので, pyvista.ImageData.extract_subset()
filter: フィルタを使用できます.
subset = dem.extract_subset((500, 900, 400, 800, 0, 0), (5, 5, 1))
subset.plot(cpos="xy")
メッシュに沿って地表の関心領域ができたので,DEMの3 Dサーフェスを作成します.
terrain = subset.warp_by_scalar()
terrain
terrain.plot()
これで,地形の3 D構造サーフェスが作成されました.構造化されたサーフェスを3 Dメッシュに拡張して,グリッドに沿った地形を形成できるようになりました.これを行うには,まずz方向(これらは地表から始まり)のセル間隔を設定します.次に,地表メッシュのXYZ構造化座標を繰り返し,各ZレベルをZセル間隔だけ下げます.これらの構造化された座標が得られたら, pyvista.StructuredGrid
を作成できます.
z_cells = np.array([25] * 5 + [35] * 3 + [50] * 2 + [75, 100])
xx = np.repeat(terrain.x, len(z_cells), axis=-1)
yy = np.repeat(terrain.y, len(z_cells), axis=-1)
zz = np.repeat(terrain.z, len(z_cells), axis=-1) - np.cumsum(z_cells).reshape((1, 1, -1))
mesh = pv.StructuredGrid(xx, yy, zz)
mesh["Elevation"] = zz.ravel(order="F")
mesh
Total running time of the script: (0 minutes 2.107 seconds)