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

サマリー

LIDAR データで取得された屋根のポイントから生成される建物モデルを作成します。

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

使用法

  • これは、LAS ポイントが建物の屋根の適切なカバレッジを提供すると想定しています。 最適な結果を得るには、屋根以外の建物の部分を表すポイントは、一般的に結果の建物モデルにノイズを加えてしまうため、除外するようにします。 建物に分類されたポイントが LAS データセットにない場合は、[LAS の建物分類 (Classify LAS Building)] ツールを使用してポイントを分類します。 ツールは、建物の屋上を表すポイントにクラス コード値 6 を割り当てます。 分類の結果を確認し、異なるパラメーターを選択してツールを再度実行するか、対話的に分類を編集して、必要な修正を行います。 建物の分類のカバレッジに問題がなければ、モデルを生成します。

  • このツールを実行する前に地表ポイントを分類します。 地表ポイントがまだ分類されていない場合は、[LAS の地表分類 (Classify LAS Ground)] ツールを使用してクラス コード値 2 を地表ポイントに割り当てます。

  • 建物モデルは、建物フットプリント ポリゴンと重なり合う LAS ポイントから TIN を構築することによって生成されます。 フットプリントは、この TIN にクリップ ポリゴンとして組み込まれます。高さは、[地表の高さ] パラメーターで指定されたソースによって定義されます。 [地表の高さ] パラメーター値は、フットプリント ポリゴンの属性テーブル内のフィールドまたは標高サーフェスで指定できます。

  • このツールでは、円弧セグメントを含んでいるポリゴンはサポートされていません。 このようなフィーチャが入力データに存在する場合は、これらのフィーチャのコピーを作成することを検討し、[頂点の挿入 (Densify)] ツールを使用して円弧ジオメトリをライン セグメントに置き換えます。

  • フットプリント ポリゴンの属性テーブル内のフィールドから地表の高さを取得した場合、高さの単位は、入力 LAS データセットの Z 単位と同じであると見なされます。 属性テーブル内の高さが別の距離単位で表現されている場合は、このツールを使用する前に、[フィールド演算 (Calculate Field)] ツールを使用して適切な変換係数を適用することを検討してください。 地表の高さは、次の方法で建物のフットプリント ポリゴンの属性から取得できます。

  • 地表の高さをサーフェスで定義する場合、ポリゴンの境界に沿った最小の Z 値が建物のベース高度を定義します。 サーフェスには、LAS データセットと同じ鉛直座標系を使用します。 分類された地表の LAS ポイントから地表の TIN またはラスター サーフェスを作成するには、分類された地表ポイントの LAS データセットをフィルター処理して、[LAS データセット → ラスター (LAS Dataset To Raster)] または [LAS データセット → TIN (LAS Dataset To TIN)] ツールを使用してサーフェスを生成します。

  • 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
単純化許容値

建物の屋根のモデリングで考慮される LAS ポイントの数を減らすために使用される Z 許容値。 この値は、出力屋根モデルと、最大解像度の LAS ポイントから作成された屋根サーフェスとの間のずれの最大閾値を定義します。

Linear Unit

arcpy.ddd.LasBuildingMultipatch(in_las_dataset, in_features, ground, out_feature_class, {point_selection}, simplification)
名前説明データ タイプ
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

建物の屋根のモデリングで考慮される LAS ポイントの数を減らすために使用される Z 許容値。 この値は、出力屋根モデルと、最大解像度の LAS ポイントから作成された屋根サーフェスとの間のずれの最大閾値を定義します。

Linear Unit

コードのサンプル

LAS 建物マルチパッチの例 1 (Python ウィンドウ)

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

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

arcpy.LasBuildingMultipatch_3d('Highland.lasd', 'footprint.shp', 'dem.tif', 
                               'highland_3d_bldgs.shp', simplification='4 Feet')
LAS 建物マルチパッチの例 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())

ライセンス情報

  • Basic: 次のものが必要 3D Analyst
  • Standard: 次のものが必要 3D Analyst
  • Advanced: 次のものが必要 3D Analyst

関連トピック