dem2stlコマンド マニュアル

(The documentation of dem2stl command)

Last Update: 2023/8/2


◆機能・用途(Purpose)

地表面の標高データ(数値標高モデル; DEM)を STLファイル(CADソフト用のファイル形式)に変換する。 数値標高モデルをこのファイル形式に変換することにより、 様々な数値シミュレーションソフトウェアから 実際の山体地形を読み込んで計算に使用することが可能になると期待される。
Convert ground surface elevation data (a digital elevation model; DEM) to a STL file (a file format for CAD softwares). The STL is a file format for CAD softwares (described later). Once the DEM data was converted to STL, the actual topography is expected to be used in various softwares for numerical simulations.


◆ソースコード(Source code)

$YMAEDA_OPENTOOL_DIR/geography/src/dem2stl.c


◆使用方法(Usage)

コマンドライン引数でパラメータを指定する。 パラメータの一覧を下表に示す。
Specify parameters by command-line arguments. The table below shows a list of parameters.


●「-」から始まらない引数 (Arguments not beginning with “-”)

引数
Argument
与える値
Quantity to be given
第1引数
1st argument
読み込む数値標高モデルのデータファイル名。 このファイルでは直交座標系における水平位置\((x,y)\)ごと、 あるいは緯度経度ごとの地表面の標高を与える。 水平位置の重複が無い限りは複数ファイルに分かれていても良く、 その場合はファイル名をカンマ(,)で区切って与える。 サポートされるファイル形式については 後述のパラメータinputfileの説明参照。
The name(s) of the input file(s) that represents a DEM data. In this file, give the ground surface altitude at each horizontal location \((x,y)\) of a cartesian coordinate system or at each latitude and longitude. The data can be divided to multiple files as long as the horizontal locations do not overlap; in this case, specify the file names separated by commas (,). The supported file formats are described in parameter inputfile later.
第2引数
2nd argument
出力するSTLファイル名。
The output STL file name.


●1つの「-」から始まる引数 (Arguments beginning with a single “-”)

このコマンドでは1つの「-」から始まる引数は存在しない。
This command does not have arguments beginning with a single “-”.


●「--パラメータ名=パラメータ値」の形式の引数 (Arguments of a form “--Parameter name=Parameter Value”)

「--パラメータ名=パラメータ値」の形式の引数は自由な順番で指定できる。 「-」から始まらない引数の間に挿入しても良い。 相反する指定がなされた場合には後の指定が優先される。 デフォルト値を持つパラメータは省略できる。
Arguments of a form “--Parameter name=Parameter Value” can be placed in an arbitrary order. They can even be inserted between arguments not beginning with “-”. In case of conflicting options being specified, the latter option has a higher priority. Parameters that have default values can be omitted.

パラメータ名
Parameter name
意味
Meaning
可能なパラメータ値
Allowed parameter values
デフォルト値
Default value
input_file_format 入力ファイルの形式。
The input file format.
  • 3d
    ymaeda_opentoolsの2次元・3次元データファイル形式 (独自のファイル形式参照) で書かれた\((x,y)\)ごとの標高データ。 \((x,y)\)および標高は[m]単位で与える。
    The data of altitude for each \((x,y)\) given in a 2-D and 3-D data file format of ymaeda_opentools (see special file formats). Use the [m] unit for \((x,y)\) and the altitudes.

  • xy
    第1列を直交座標系における\(x\)座標[m]、第2列を\(y\)座標[m]、 第3列をその\((x,y)\)における地表面の標高[m]とするデータ。 列の区切りにはタブを使用する。
    The data given by the \(x\)-coordinate [m] of a cartesian coordinate system in the 1st column, \(y\)-coordinate [m] in the 2nd column, and the ground surface altitude [m] at that \((x,y)\) in the 3rd column. Use tabs to separate the columns.

  • latlon
    第1列を緯度、第2列を経度、 第3列をその水平位置における地表面の標高[m]とするデータ。 列の区切りにはタブを使用する。 緯度・経度は度単位の実数または「度:分:秒」形式の文字列とする。
    The data given by the latitude in the 1st column, the longitude in the 2nd column, and the ground surface altitude [m] at that horizontal location in the 3rd column. Use tabs to separate the columns. The latitude and longitude can be specified by a real number in the degree unit or a string in “degree:minute:second” format.

3d
refN 緯度経度を直交座標に変換するための基準点の緯度。
The latitude of the reference point for the conversion from latitudes and longitudes to cartesian coordinates.
度単位の実数または「度:分:秒」形式の文字列。 -90°以上90°以下でなければならない。
A real number in the degree unit or a string in “degree:minute:second” format. The value must be greater than or equal to -90 degrees and less than or equal to 90 degrees.
input_file_format=latlonの場合は省略不可。 それ以外の場合は使用されない。
Cannot be omitted if input_file_format=latlon, not used otherwise.
refE 緯度経度を直交座標に変換するための基準点の経度。
The longitude of the reference point for the conversion from latitudes and longitudes to cartesian coordinates.
度単位の実数または「度:分:秒」形式の文字列。 -180°以上180°以下でなければならない。
A real number in the degree unit or a string in “degree:minute:second” format. The value must be greater than or equal to -180 degrees and less than or equal to 180 degrees.
input_file_format=latlonの場合は省略不可。 それ以外の場合は使用されない。
Cannot be omitted if input_file_format=latlon, not used otherwise.
xmin 採用するデータの\(x\)座標の下限\(x_{min}\)[m]。 \(x<x_{min}\)の地点の標高データは使用しない。
The lower limit, \(x_{min}\) [m], of the \(x\)-coordinate of the data used. The altitude data at locations with \(x<x_{min}\) are not used.
実数。
A real number.
省略時は下限無しとなる。
The lower bound is not introduced when this parameter is omitted.
xmax 採用するデータの\(x\)座標の上限\(x_{max}\)[m]。 \(x>x_{max}\)の地点の標高データは使用しない。
The upper limit, \(x_{max}\) [m], of the \(x\)-coordinate of the data used. The altitude data at locations with \(x>x_{max}\) are not used.
\(x_{min}\)よりも大きな実数。
A real number greater than \(x_{min}\).
省略時は上限無しとなる。
The upper bound is not introduced when this parameter is omitted.
ymin 採用するデータの\(y\)座標の下限\(y_{min}\)[m]。 \(y<y_{min}\)の地点の標高データは使用しない。
The lower limit, \(y_{min}\) [m], of the \(y\)-coordinate of the data used. The altitude data at locations with \(y<y_{min}\) are not used.
実数。
A real number.
省略時は下限無しとなる。
The lower bound is not introduced when this parameter is omitted.
ymax 採用するデータの\(y\)座標の上限\(y_{max}\)[m]。 \(y>y_{max}\)の地点の標高データは使用しない。
The upper limit, \(y_{max}\) [m], of the \(y\)-coordinate of the data used. The altitude data at locations with \(y>y_{max}\) are not used.
\(y_{min}\)よりも大きな実数。
A real number greater than \(y_{min}\).
省略時は上限無しとなる。
The upper bound is not introduced when this parameter is omitted.
Nmin 採用するデータの緯度の下限。 この緯度よりも南にある標高データは使用しない。 なお、この設定はinput_file_format=latlonの場合のみ有効である。
The lower limit of the latitude of the data used. The altitude data at locations more south than this latitude are not used; this setting is valid only when input_file_format=latlon.
度単位の実数または「度:分:秒」形式の文字列。 -90°以上90°以下でなければならない。
A real number in the degree unit or a string in “degree:minute:second” format. The value must be greater than or equal to -90 degrees and less than or equal to 90 degrees.
省略時は下限無しとなる。
The lower bound is not introduced when this parameter is omitted.
Nmax 採用するデータの緯度の上限。 この緯度よりも北にある標高データは使用しない。 なお、この設定はinput_file_format=latlonの場合のみ有効である。
The upper limit of the latitude of the data used. The altitude data at locations more north than this latitude are not used; this setting is valid only when input_file_format=latlon.
度単位の実数または「度:分:秒」形式の文字列。 -90°以上90°以下、 かつパラメータNminの値よりも大きくなければならない。
A real number in the degree unit or a string in “degree:minute:second” format. The value must be greater than or equal to -90 degrees and less than or equal to 90 degrees, and greater than the value of parameter Nmin.
省略時は上限無しとなる。
The upper bound is not introduced when this parameter is omitted.
Emin 採用するデータの経度の下限。 この緯度よりも西にある標高データは使用しない。 なお、この設定はinput_file_format=latlonの場合のみ有効である。
The lower limit of the longitude of the data used. The altitude data at locations more west than this longitude are not used; this setting is valid only when input_file_format=latlon.
度単位の実数または「度:分:秒」形式の文字列。 -180°以上180°以下でなければならない。
A real number in the degree unit or a string in “degree:minute:second” format. The value must be greater than or equal to -180 degrees and less than or equal to 180 degrees.
省略時は下限無しとなる。
The lower bound is not introduced when this parameter is omitted.
Emax 採用するデータの経度の上限。 この緯度よりも東にある標高データは使用しない。 なお、この設定はinput_file_format=latlonの場合のみ有効である。
The upper limit of the longitude of the data used. The altitude data at locations more east than this longitude are not used; this setting is valid only when input_file_format=latlon.
度単位の実数または「度:分:秒」形式の文字列。 -180°以上180°以下、 かつパラメータEminの値よりも大きくなければならない。
A real number in the degree unit or a string in “degree:minute:second” format. The value must be greater than or equal to -180 degrees and less than or equal to 180 degrees, and greater than the value of parameter Emin.
省略時は上限無しとなる。
The upper bound is not introduced when this parameter is omitted.
add_straight_boundary \(x\), \(y\)軸に平行な外周を追加するか否かの選択。 このプログラムでは標高定義点の分布について いかなる仮定も置いていないので一般に外周はまっすぐではない。 そこで、人工的な外周を追加して外周をまっすぐにするか否かを このパラメータで選択する。
A choice of whether to add outer boundaries parallel to \(x\)- or \(y\)-axes or not. Note that this program introduces no assumption for the spatial distribution of altitude definition points; therefore, the outer boundary is not necessarily straight. This parameter enables adding an artificial boundary to make the boundary straight.
  • yes
    外周を追加する(図1)。
    Add outer boundaries (Fig. 1).

  • no
    外周を追加しない。 この場合、たとえ標高定義点の分布が \(x\), \(y\)軸に平行な長方形格子状であったとしても 三角形要素がカバーする領域が長方形になるとは限らない点に留意。
    Do not add outer boundaries. Note that in this case, the region covered by the trianglar elements may not be rectangular even if the altitude definition points are distributed on rectangular grid nodes parallel to the \(x\)- and \(y\)-axes.

no
bottom 作成する固体領域の下限の標高[m]。 有限要素法を用いたシミュレーション等、地表面そのものではなく 地表面を上面とする有限サイズの3次元固体領域を構築したい場合に このオプションを使用する。 なお、このオプションを使用するには add_straight_boundary=yesとする必要がある。
The lower limit altitude [m] of the solid volume to create. Use this option to create a finite-size 3-D solid volume with the ground surface at the upper bound, for example for a numerical simulation with a finite element method, instead of simply creating the geometry of the ground surface. Note that this option is available only when add_straight_boundary=yes.
標高を表す実数。使用するデータの全ての標高よりも低くなくてはならない。
A real number that represents an altitude, which must be lower than the altitudes of all data used.
省略時は有限サイズの3次元固体領域を作成しない。
The finite-size 3-D solid volume is not constructed when this parameter is omitted.



図1. --add_straight_boundaryオプションによる外周追加のイメージ。 黒点が元々の標高定義点、灰色がそれらを用いて構築される三角形要素、 赤が--add_straight_boundary=yesとした場合に 外周に追加される三角形要素である。
Fig. 1. A schematic illustration for the effect of --add_straight_boundary option. Black dots are the original altitude definition points, gray are the triangular elements created from these points, and red are the outer triangular elements added in case of --add_straight_boundary=yes.


◆動作(Behaviour)

第1引数で指定したファイルから数値標高モデルを読み込み、 第2引数で指定したファイルにSTLアスキーフォーマットで出力する。
Read the DEM data from the file specified by the 1st argument and output it in the STL ascii format to the file specified by the 2nd argument.

STLアスキーフォーマットは3D Systems社によって開発された、 三角形要素を組合せて形状を表現する方法の1つであり、 以下の書式を持つ (情報源)。
The STL ascii format is a method to express a geometry by triangular elements, developed by 3D Systems, inc., and has the format below (information source).

solid 名前(Name)
facet normal \(n_{1x}\) \(n_{1y}\) \(n_{1z}\)
outer loop
vertex \(x_1^a\) \(y_1^a\) \(z_1^a\)
vertex \(x_1^b\) \(y_1^b\) \(z_1^b\)
vertex \(x_1^c\) \(y_1^c\) \(z_1^c\)
endloop
endfacet
facet normal \(n_{2x}\) \(n_{2y}\) \(n_{2z}\)
outer loop
vertex \(x_2^a\) \(y_2^a\) \(z_2^a\)
vertex \(x_2^b\) \(y_2^b\) \(z_2^b\)
vertex \(x_2^c\) \(y_2^c\) \(z_2^c\)
endloop
endfacet
facet normal \(n_{3x}\) \(n_{3y}\) \(n_{3z}\)
outer loop
vertex \(x_3^a\) \(y_3^a\) \(z_3^a\)
vertex \(x_3^b\) \(y_3^b\) \(z_3^b\)
vertex \(x_3^c\) \(y_3^c\) \(z_3^c\)
endloop
endfacet
facet normal \(n_{4x}\) \(n_{4y}\) \(n_{4z}\)
outer loop
vertex \(x_4^a\) \(y_4^a\) \(z_4^a\)
vertex \(x_4^b\) \(y_4^b\) \(z_4^b\)
vertex \(x_4^c\) \(y_4^c\) \(z_4^c\)
endloop
endfacet

endsolid 名前(Name)

ここで同じ色で示した部分が1つの三角形要素を表す。 \(i\)番目の三角形要素について、 \((x_i^a, y_i^a, z_i^a)\), \((x_i^b, y_i^b, z_i^b)\), \((x_i^c, y_i^c, z_i^c)\) が三角形を構成する3つの頂点の座標、 \((n_{ix}, n_{iy}, n_{iz})\) が三角形の法線ベクトルである。 法線ベクトルは外向きに取り、 三角形要素の頂点は法線ベクトルの先端側から見て反時計回りになる順番 (右ねじの順番)で並べる。
Here, the same color represents a triangular element. For \(i\)th triangular element, \((x_i^a, y_i^a, z_i^a)\), \((x_i^b, y_i^b, z_i^b)\), and \((x_i^c, y_i^c, z_i^c)\) are the three vertexes that constitude the triangle, and \((n_{ix}, n_{iy}, n_{iz})\) is its normal vector. The normal vector is taken outward, and the vertexes of each triangular element is sorted counterclockwise when seen from the end side of the normal vector, i.e., the order of a right handed screw.


◆使用例(Example)

dem2stl dem/region11.dat,dem/region12.dat,dem/region21.dat,dem/region22.dat topography.stl --input_file_format=latlon --refN=35:12:34 --refE=137:43:21 --xmin=-20000.0 --xmax=20000.0 --ymin=-20000.0 --ymax=20000.0 --add_straight_boundary=yes --bottom=-5000.0

(dem/region11.dat)
35:00:00.0[TAB]137:20:00.0[TAB]12.3
35:00:00.0[TAB]137:30:00.0[TAB]23.4
35:10:00.0[TAB]137:20:00.0[TAB]34.5
35:10:00.0[TAB]137:30:00.0[TAB]45.6

(dem/region12.dat)
35:00:00.0[TAB]137:40:00.0[TAB]56.7
35:00:00.0[TAB]137:50:00.0[TAB]67.8
35:10:00.0[TAB]137:40:00.0[TAB]78.9
35:10:00.0[TAB]137:50:00.0[TAB]89.0

(dem/region21.dat)
35:20:00.0[TAB]137:20:00.0[TAB]90.1
35:20:00.0[TAB]137:30:00.0[TAB]101.2
35:30:00.0[TAB]137:20:00.0[TAB]102.3
35:30:00.0[TAB]137:30:00.0[TAB]103.4

(dem/region22.dat)
35:20:00.0[TAB]137:40:00.0[TAB]104.5
35:20:00.0[TAB]137:50:00.0[TAB]105.6
35:30:00.0[TAB]137:40:00.0[TAB]106.7
35:30:00.0[TAB]137:50:00.0[TAB]107.8

ここで[TAB]はタブを表す。
Here, [TAB] represents a tab.


◆使用上の注意(Note)

作成したSTLファイルを3次元オブジェクトとして利用するためには 面が閉じている必要があり、 そのためには--add_straight_boundary=yesとした上で パラメータbottomを指定する必要がある。
To use the STL file as a 3-D object, the surface must be closed. To realize the closed surface, use --add_straight_boundary=yes and specify the parameter bottom.


◆アルゴリズム(Algorithm)