LAS 建物マルチパッチ (LAS Building Multipatch) (3D Analyst)

サマリー

LAS データセット内の屋根ポイントを使用して建物モデルを作成します。

LAS 建物マルチパッチ ツールの図

使用法

  • このツールは、LAS データセットの屋根ポイント、地表の高さデータ、建物フットプリント ポリゴンを使用して、建物をマルチパッチ フィーチャとして作成します。 それぞれの建物モデルは、建物フットプリント ポリゴンとオーバーラップする LAS ポイントから TIN を構築することによって生成されます。 フットプリントは、この TIN にクリップ ポリゴンとして組み込まれます。高さは、[地表の高さ] パラメーター値から取得されます。 その後、この TIN は基準高度で閉じられたマルチパッチに変換されます。 生成されたマルチパッチは TIN サーフェスに基づくため、このマルチパッチに建物の垂直断面に沿った詳細は含まれていません。

  • 入力 LAS ポイントは、建物の屋根を取り込んでいる必要があります。 通常、屋根以外の建物要素を表すポイントは出力に不要な特性を付加してしまうため、可能であれば除外します。 [LAS の建物分類 (Classify LAS Building)] ツールを使用して、クラス コード値 6 を建物の屋根ポイントに割り当てることができます。 このツールは、建物の屋根を表すポイントにクラス コード値 6 を割り当てますが、屋根の下と上にあるポイントを分類するためのオプションもあります。 これらのポイントを分類する場合、建物フィーチャの作成時に除外できるように、6 以外のクラス コードを使用して定義します。 建物の分類結果を確認し、対話的編集を通じて、または [LAS の建物分類 (Classify LAS Building)] ツールを別のパラメーター設定で再度実行することで、必要な修正を加えます。 LAS データセットで建物フットプリント上に建物でないポイントが含まれていない場合、すべてのポイントが屋根サーフェスの定義に使用できる可能性があります。

  • [サンプリング解像度] パラメーター値を使用して、TIN を構築する前に LAS データセット内のポイントを間引きます。 このパラメーターは、入力がポイント密度の高い点群である場合や、建物の垂直断面に沿ったポイントが処理されている場合に、ツールのパフォーマンスを最適化します。 パラメーター値は、間引きされるエリアの長さと幅を表すので、距離を 2 フィートにすると、点群を 2 フィートのグリッドにビン化します。 各ビンで最も高いポイントが、屋根の TIN の構築に使用されます。 このようにして、建物側面のポイントの影響を軽減できます。

  • このツールでは、円弧セグメントを含んでいる建物フットプリント ポリゴンはサポートされていません。 円弧セグメントをライン セグメントに置き換えるには、[頂点の挿入 (Densify)] ツールを使用します。

  • [地表の高さ] パラメーター値は、標高サーフェスまたはフットプリント ポリゴンの属性テーブル内のフィールドで指定できます。 サーフェスを使用する場合、建物の基準高度は、フットプリントの境界に沿った最小の Z 値になります。 サーフェスは、LAS データセットと同じ鉛直座標系である必要があります。 LAS データセットから地表を取得すると、作成元の点群の高さと建物を一致させることができます。 LAS データセットから標高サーフェスを作成するには、次の手順を実行します。

    1. 地表の分類ポイントが LAS データセット内に存在することを確認します。 存在しない場合は、[LAS の地表分類 (Classify LAS Ground)] ツールを使用して、クラス コード値 2 を地表ポイントに割り当てます。
    2. レイヤー プロパティまたは [LAS データセット レイヤーの作成 (Make LAS Dataset Layer)] ツールを使用して、地表ポイントの LAS データセット レイヤーをフィルターします。
    3. [LAS データセット → ラスター (LAS Dataset to Raster)] ツールまたは [LAS データセット → TIN (LAS Dataset to TIN)] ツールを使用して、このツールの入力として使用できるラスターまたは TIN サーフェスを作成します。
  • フットプリント ポリゴンの属性テーブル内のフィールドから地表の高さを取得した場合、高さの単位は、入力 LAS データセットの Z 単位と同じであると見なされます。 属性テーブル内の高さが別の距離単位である場合は、[フィールド演算 (Calculate Field)] ツールを使用して、LAS データセットの距離単位で新しい高さの値を計算します。 最小の地表の高さは、[サーフェス情報の追加 (Add Surface Information)] ツールを使用して、地表面の標高サーフェスから建物フットプリント ポリゴンに帰属させることができます。

  • 屋根の高さが大幅に異なる隣接する構造物に対して建物フィーチャを生成する場合、生成された各建物フィーチャが、近傍の建物のポイントによって定義される可能性があります。 この問題を最小限に抑える 1 つの方法は、各フィーチャに建物の屋根の高さ範囲を帰属させ、これらのフィールドを [最小高さフィールド] および [最大高さフィールド] パラメーター値として使用することです。

  • LAS データセットに統計情報が含まれている場合、LAS ポイントはより効率的に処理されます。 統計情報を計算するには、[LAS データセットの統計情報 (LAS Dataset Statistics)] ツールを使用します。

パラメーター

ラベル説明データ タイプ
入力 LAS データセット

建物の屋根を定義するポイントを含んでいる LAS データセット。

LAS Dataset Layer
入力フィーチャ

建物フットプリントを定義するポリゴン フィーチャ。

Feature Layer
地表の高さ

地表の高さの値のソースは、建物フットプリントの属性テーブル内の数値フィールド、あるいはラスターまたは TIN サーフェスにすることができます。 フィールドに基づく地表ソースは、サーフェスに基づく地表ソースよりも高速に処理されます。

Field; Raster Layer; TIN Layer
出力マルチパッチ フィーチャクラス

出力建物モデルを格納するマルチパッチ フィーチャクラス。

Feature Class
LAS 屋根ポイントの選択
(オプション)

建物の屋根の定義に使用される LAS ポイントを指定します。

  • 建物に分類されたポイント6 のクラス コード値が割り当てられた LAS ポイントが使用されます。 これがデフォルトです。
  • レイヤーでフィルターされたポイント入力レイヤーによってフィルターされた LAS ポイントが使用されます。
  • すべてのポイント建物フットプリントをオーバーレイするすべての LAS ポイントが使用されます。
String
単純化許容値
(オプション)

屋根のジオメトリを単純化するために使用される Z 許容値。 この値は、出力屋根モデルと、LAS ポイントを使用して作成された TIN サーフェスとの最大のずれを定義します。

Linear Unit
サンプリング解像度
(オプション)

屋根サーフェスを作図する前に、点群を間引くために使用するビン化サイズ。

Linear Unit
最小高さフィールド
(オプション)

屋根の定義に使用されるポイントの最小の高さが含まれる数値フィールド。 任意の数値フィールドを指定できます。 このフィールドの値より低いポイントは無視されます。

Field
最大高さフィールド
(オプション)

屋根の定義に使用されるポイントの最大の高さが含まれる数値フィールド。 任意の数値フィールドを指定できます。 このフィールドの値より高いポイントは無視されます。

Field

arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, {simplification}, {sampling_resolution}, {min_height_field}, {max_height_field})
名前説明データ タイプ
in_las_dataset

建物の屋根を定義するポイントを含んでいる LAS データセット。

LAS Dataset Layer
in_features

建物フットプリントを定義するポリゴン フィーチャ。

Feature Layer
ground

地表の高さの値のソースは、建物フットプリントの属性テーブル内の数値フィールド、あるいはラスターまたは TIN サーフェスにすることができます。 フィールドに基づく地表ソースは、サーフェスに基づく地表ソースよりも高速に処理されます。

Field; Raster Layer; TIN Layer
out_feature_class

出力建物モデルを格納するマルチパッチ フィーチャクラス。

Feature Class
point_selection
(オプション)

建物の屋根の定義に使用される LAS ポイントを指定します。

  • BUILDING_CLASSIFIED_POINTS6 のクラス コード値が割り当てられた LAS ポイントが使用されます。 これがデフォルトです。
  • LAYER_FILTERED_POINTS入力レイヤーによってフィルターされた LAS ポイントが使用されます。
  • ALL_POINTS建物フットプリントをオーバーレイするすべての LAS ポイントが使用されます。
String
simplification
(オプション)

屋根のジオメトリを単純化するために使用される Z 許容値。 この値は、出力屋根モデルと、LAS ポイントを使用して作成された TIN サーフェスとの最大のずれを定義します。

Linear Unit
sampling_resolution
(オプション)

屋根サーフェスを作図する前に、点群を間引くために使用するビン化サイズ。

Linear Unit
min_height_field
(オプション)

屋根の定義に使用されるポイントの最小の高さが含まれる数値フィールド。 任意の数値フィールドを指定できます。 このフィールドの値より低いポイントは無視されます。

Field
max_height_field
(オプション)

屋根の定義に使用されるポイントの最大の高さが含まれる数値フィールド。 任意の数値フィールドを指定できます。 このフィールドの値より高いポイントは無視されます。

Field

コードのサンプル

LasBuildingMultipatch の例 1 (Python ウィンドウ)

次のサンプルは、Python ウィンドウでこのツールを使用する方法を示しています。

arcpy.env.workspace = 'C:/data'

arcpy.LasBuildingMultipatch_3d('Highland.lasd', 'footprint.shp', 'dem.tif', 
                               'highland_3d_bldgs.shp', simplification='4 Feet')
LasBuildingMultipatch の例 2 (スタンドアロン スクリプト)

次のサンプルは、スタンドアロン Python スクリプトでこのツールを使用する方法を示しています。

'''****************************************************************************
       Name: Extract Building Footprints & Generate 3D Models
Description: Extract footprint from lidar points classified as buildings, 
             regularize its geometry, and calculate the building height.

****************************************************************************'''
import arcpy

lasd = arcpy.GetParameterAsText(0)
footprint = arcpy.GetParameterAsText(1)
model = arcpy.GetParameterAsText(2)

try:
    lasd_layer = 'building points'
    arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=6)
    temp_raster = 'in_memory/bldg_raster'
    arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
                                           'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
    temp_footprint = 'in_memory/footprint'
    arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
    arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint, 
                                          method='RIGHT_ANGLES')
    arcpy.ddd.LasPointStatsByArea(lasd_layer, footprint, ['MIN_Z', 'MAX_Z'])
    arcpy.management.AddField(footprint, 'Height', 'Double')
    arcpy.management.CalculateField(footprint, 'Height', 
                                    "round('!Z_Max! - !Z_Min!', 2)", 
                                    'PYTHON_9.3')
    simplification = arcpy.Describe(lasd).pointSpacing * 4
    arcpy.ddd.LasBuildingMultipatch(lasd_layer, footprint, 'Z_MIN', model, 
                                    'BUILDING_CLASSIFIED_POINTS', simplification)


except arcpy.ExecuteError:
    print(arcpy.GetMessages())

関連トピック