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

概要

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

LAS 建物マルチパッチ (LAS Building Multipatch) の図

使用法

  • このツールは、処理される LAS ポイントが建物の屋根の適切なカバレッジを提供すると想定しています。最適な結果を得るには、屋根以外の建物の部分を表すポイントは、一般的に結果の建物モデルにノイズを加えてしまうため、含めないようにします。

  • 建物モデルは、建物フットプリント内にある選択された LAS ポイントからの TIN を構築することによって生成されます。フットプリントは、この TIN にクリップ ポリゴンとして組み込まれます。高さは、範囲内で最低の LAS ポイントによって定義されます。地表の高さは建物のベースを提供します。これは、フットプリント ポリゴンの属性テーブル内のフィールドまたは標高サーフェスから取得できます。

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

    1. レイヤー プロパティまたは [LAS データセット レイヤーの作成 (Make LAS Dataset Layer)] ツールを使用して、地表ポイントの LAS データセットをフィルター処理します。
    2. [サーフェス情報の追加 (Add Surface Information)] ツールを実行します。入力フィーチャを建物フットプリント ポリゴン、入力サーフェスをフィルター処理された地表の LAS データセット、出力プロパティは建物が最小の Z 値になるように Z_MIN 値に設定します。
  • 地表の高さをサーフェスで定義する場合、ポリゴンの境界に沿った最小の Z 値が建物のベース高度を定義します。サーフェスは、LAS データセットと同じ鉛直座標系を使用する必要があります。分類された地表の LAS ポイントから地表の TIN またはラスター サーフェスを作成するには、分類された地表ポイントの LAS データセットをフィルター処理してから、[LAS データセット → ラスター (LAS Dataset To Raster)] または [LAS データセット → TIN (LAS Dataset To TIN) ツールを使用してサーフェスを生成します。

  • 地表ポイントは、このツールを実行する前に分類する必要があります。地表ポイントがまだ分類されていない場合は、[LAS の地表分類 (Classify LAS Ground)] ツールを使用して地表ポイントを分類することを検討してください。

  • 特に屋根に植物が覆いかぶさっているのが一般的である場合、建物の屋根を表すポイントを識別するために、[LAS の建物分類 (Classify LAS Building)] ツールを使用することを検討してください。分類された建物のポイントを使用してこのツールを実行する前に、自動分類の結果を確認して、対話的に分類を編集して必要な修正を行うことを検討します。

  • LAS データセットに統計情報が存在する場合、LAS ポイントはより効率的に処理されます。必要に応じて、統計情報を計算するために [LAS データセットの統計情報 (LAS Dataset Statistics)] ツールを使用することを検討してください。

構文

arcpy.3d.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

コードのサンプル

LasBuildingMultipatch (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')
LasBuildingMultipatch (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

関連トピック