LAS オーバーラップの分類 (Classify LAS Overlap) (3D Analyst)

サマリー

航空機 LIDAR 測量のオーバーラップ スキャンから LAS ポイントを分類します。

LAS オーバーラップの分類ツールの図

使用法

  • ポイントを規則的な分布にすることで下流ツールのパフォーマンスが向上することがよくあります。 分布が不規則なポイントから得られたデータでは、不要な誤差が生じる可能性があります。 航空機 LIDAR 測量でオーバーラップしているフライト ラインの LAS ポイントがある場合、LAS データのオーパーラップ エリア内は通常、ポイントの密度が高くなります。 フライト ラインごとにポイントのスキャン角度が大きく異なる場合もあります。 通常、スキャン角度が大きいポイントはスキャン角度が天底に近いポイントよりも誤差が大きくなります。 オーバーラップ ポイントを分類することで、LAS データをフィルタリングして、ポイント密度を一定にすることができます。 オーバーラップ指定により、ポイントをフィルタリングして、視覚化および下流の解析処理から除外することができます。

  • LAS ポイントのポイント ソース ID 属性は、ポイント収集元のフライト ラインを識別します。 この属性を使用して、オーバーラップ ポイントの存在が確立されます。 指定されたサンプリング距離で LAS データが評価されます。 評価対象のエリアでポイント ソース ID が異なるポイントが見つかった場合、スキャン角度を使用して、オーバーラップしていないポイントを表すポイント ソース ID が確立されます。 スキャン角度が 0 (天底) に最も近いポイントのポイント ソース ID はオーバーラップしていないポイントとして維持されます。 残りのポイント ソース ID に関連付けられているポイントはオーバーラップとしてマークされます。

    LAS ポイントの評価に使用されるサンプル サイズを LAS データの名目ポイント間隔の約 2 ~ 3 倍のサイズにする必要があります。 大きいサンプリング距離を使用するとポイントが間違って分類される可能性があり、小さいサンプリング サイズを使用すると、オーバーラップ ポイントを適切に識別するのに十分なポイントが捕捉されない可能性があります。

  • このツールは、複数のフライト ラインのポイント レコードを結合するタイル化された .las または .zlas ファイルで動作します。 各ファイルは個別に処理されます。つまり、各フライト ラインが個別のファイルに格納されている場合、オーバーラップ ポイントは検出されません。 そのようなファイルをマージするには [LAS タイルの作成 (Tile LAS)] ツールを使用します。

  • LAS バージョン 1.4 ファイル内のポイント レコード形式 6 ~ 8 のオーバーラップ ポイントにオーバーラップ分類フラグが割り当てられます。 これにより、各ポイントは元の分類値を維持することができます。 サポートされるその他すべての .las ファイル内のオーバーラップ ポイントには、クラス コード値 12 が割り当てられます。 オーバーラップ スキャン以外を表すためにクラス コード値 12 が入力 .las ファイルで使用されている場合は、このツールを実行する前に、[LAS クラス コードの変更 (Change LAS Class Codes)] ツールを使用して、それらのポイントに別の値を再割り当てすることができます。

パラメーター

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

処理されるタイル化された LAS データセット。

LAS Dataset Layer
サンプリング距離

LAS データの評価に使用される正方形領域のいずれかのディメンションの距離。 距離単位として [不明] が指定された場合、単位は入力 .las ファイルの空間参照によって定義されます。

Linear Unit
処理範囲
(オプション)

評価されるデータの範囲。

  • [現在の表示範囲] Current Display Extent - 範囲は、アクティブなマップまたはシーンに基づきます。 このオプションは、アクティブなマップが存在する場合にのみ使用できます。
  • [範囲の描画] Draw Extent - 範囲は、マップまたはシーンに描画された四角形に基づきます。 このオプションは、プロジェクト ジオデータベースにフィーチャクラスを作成し、レイヤーをマップに追加します。 フィーチャクラスの座標系はマップと同じです。
    注意:

    このオプションは、[環境] ダイアログ ボックスでは使用できません。 範囲データ タイプを使用するツール パラメーターまたはツール ダイアログ ボックスの [環境] タブからのみ使用できます。

    注意:

    編集タブで編集を有効/無効にする編集オプションがオンの場合、範囲を描画するには [編集] リボン タブで編集を有効化する必要があります。

  • [レイヤーの範囲] Layer - 範囲は、アクティブなマップ レイヤーに基づきます。 ドロップダウン リストを使用して使用可能なレイヤーを選択するか、[すべてのレイヤーのデータの範囲] オプションを使用して、ベースマップを除くすべてのアクティブなマップ レイヤーを組み合わせた範囲を取得します。 このオプションは、レイヤーを含むアクティブなマップが存在する場合にのみ使用できます。

    各マップ レイヤーには、次のオプションがあります。

    • [すべてのフィーチャ] Select All - レイヤーのすべてのフィーチャの範囲。
    • [選択フィーチャ]Area from Selected Features - レイヤーの選択フィーチャの範囲。
    • [表示フィーチャ] Extent Indicator - レイヤーの表示フィーチャの範囲。
      注意:

      [選択フィーチャ] Area from Selected Features[表示フィーチャ] Extent Indicator オプションの範囲は、フィーチャ レイヤーでのみ使用できます。

  • [参照] Browse - 範囲は、既存のデータに基づきます。
  • [入力データの共通領域] Intersect - 範囲は、すべての入力データの最小範囲または共通範囲に基づきます。 重なり合う入力データがない場合は、すべてゼロの null 範囲が生成されます。
  • [入力データのすべての領域] Union - この範囲は、すべての入力データの最大範囲または結合された範囲に基づきます。
  • [クリップボード] Paste - 範囲をクリップボードにコピーしたり、クリップボードから貼り付けたりできます。
    • [範囲をコピー] Copy - 範囲の座標と座標系をクリップボードにコピーします。
    • [範囲を貼り付け] Paste - 範囲の座標と、必要に応じて座標系をクリップボードから貼り付けます。 クリップボードの値に座標系が含まれていない場合、マップの座標系が範囲に使用されます。
    注意:

    範囲の座標は、ArcPy Extent オブジェクトと同じ書式と順序 (x-min、y-min、x-max、y-max、空間参照) を使用して、クリップボードからコピーおよびクリップボードから貼り付けられます。

  • [範囲をリセット] Reset - 範囲はデフォルト値にリセットされます。
  • 手動入力した座標値 - 座標値は数値であり、アクティブなマップの座標系で表示する必要があります。
    注意:

    マップで、入力された座標と異なる表示単位が使用されることがあります。 基本方向 (N、S、E、W) を使用することはできません。 南と西の座標にはマイナス値の記号を使用します。

Extent
範囲と重なる LAS ファイル全体を処理
(オプション)

.las ファイルの処理方法の決定に対象地域をどのように使用するかを指定します。 対象地域は、[処理範囲] パラメーター値、[処理境界] パラメーター値、またはこれら 2 つの組み合わせによって定義されます。

  • オフ - 対象地域と交差している LAS ポイントだけが処理されます。 これがデフォルトです。
  • オン - .las ファイルの一部が対象地域と交差している場合、対象地域の外側にあるポイントも含め、そのファイル内のすべてのポイントが処理されます。
Boolean
統計情報の計算
(オプション)

LAS データセットで参照されている .las ファイルの統計情報を計算するかどうかを指定します。 統計情報を計算することで、.las ファイルごとの空間インデックスが提供され、解析と表示のパフォーマンスが向上します。 また統計によって、分類コードやリターン情報などの LAS 属性の表示が .las ファイルに存在する値に制限されるので、フィルターとシンボルのエクスペリエンスも強化されます。

  • オン - 統計情報を計算します。 これがデフォルトです。
  • オフ - 統計情報を計算しません。
Boolean
ピラミッドの更新
(オプション)

クラス コードが変更された後に、LAS データセットのピラミッドを更新するかどうかを指定します。

  • オン - LAS データセットのピラミッドを更新します。 これがデフォルトです。
  • オフ - LAS データセットのピラミッドを更新しません。
Boolean

派生した出力

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

変更対象の LAS データセット。

LAS Dataset Layer

arcpy.ddd.ClassifyLasOverlap(in_las_dataset, sample_distance, {extent}, {process_entire_files}, {compute_stats}, {update_pyramid})
名前説明データ タイプ
in_las_dataset

処理されるタイル化された LAS データセット。

LAS Dataset Layer
sample_distance

LAS データの評価に使用される正方形領域のいずれかのディメンションの距離。 この値は、3 メートルなど、数字と距離単位の値で表すことができます。 距離単位が指定されないか、Unknown と入力された場合、単位は入力 .las ファイルの空間参照によって定義されます。

Linear Unit
extent
(オプション)

評価されるデータの範囲。

  • MAXOF - すべての入力データの最大範囲が使用されます。
  • MINOF - すべての入力データに共通する最小領域が使用されます。
  • DISPLAY - 範囲は、表示範囲と同じになります。
  • レイヤー名 - 指定したレイヤーの範囲が使用されます。
  • Extent オブジェクト - 指定したオブジェクトの範囲が使用されます。
  • 座標のスペース区切りの文字列 - 指定した文字列の範囲が使用されます。 座標は、x-min、y-min、x-max、y-max の順序で表されます。
Extent
process_entire_files
(オプション)

処理範囲の適用方法を指定します。

  • PROCESS_EXTENT対象地域と交差している LAS ポイントだけが処理されます。 これがデフォルトです。
  • PROCESS_ENTIRE_FILES.las ファイルの一部が対象地域と交差している場合、対象地域の外側にあるポイントも含め、そのファイル内のすべてのポイントが処理されます。
Boolean
compute_stats
(オプション)

LAS データセットで参照されている .las ファイルの統計情報を計算するかどうかを指定します。 統計情報を計算することで、.las ファイルごとの空間インデックスが提供され、解析と表示のパフォーマンスが向上します。 また統計によって、分類コードやリターン情報などの LAS 属性の表示が .las ファイルに存在する値に制限されるので、フィルターとシンボルのエクスペリエンスも強化されます。

  • COMPUTE_STATS統計情報を計算します。 これがデフォルトです。
  • NO_COMPUTE_STATS統計情報を計算しません。
Boolean
update_pyramid
(オプション)

クラス コードが変更された後に、LAS データセットのピラミッドを更新するかどうかを指定します。

  • UPDATE_PYRAMIDLAS データセットのピラミッドを更新します。 これがデフォルトです。
  • NO_UPDATE_PYRAMIDLAS データセットのピラミッドを更新しません。
Boolean

派生した出力

名前説明データ タイプ
out_las_dataset

変更対象の LAS データセット。

LAS Dataset Layer

コードのサンプル

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

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

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

arcpy.ddd.ClassifyLasOverlap('Denver_2.lasd', '1 Meter')
ClassifyLasOverlap の例 2 (スタンドアロン スクリプト)

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

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

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

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

try:
    desc = arcpy.Describe(lasd)
    if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
        unit = 'Feet'
    else:
        unit = 'Meters'
    ptSpacing = desc.pointSpacing * 2.25
    sampling = '{0} {1}'.format(ptSpacing, unit)
    # Classify overlap points
    arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
    # Classify ground points
    arcpy.ddd.ClassifyLasGround(lasd)
    # Filter for ground points
    arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
    # Generate DEM
    arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION', 
                                        'BINNING NEAREST NATURAL_NEIGHBOR', 
                                        sampling_type='CELLSIZE', 
                                        sampling_value=desc.pointSpacing)
    # Classify noise points
    arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY', 
                               withheld='WITHHELD', ground=dem, 
                               low_z='-2 feet', high_z='300 feet', 
                               max_neighbors=ptSpacing, step_width=ptSpacing, 
                               step_height='10 feet')
    # Classify buildings
    arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
    #Classify vegetation
    arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55], 
                                  compute_stats='COMPUTE_STATS')
    # Filter LAS dataset for building points
    lasd_layer = 'building points'
    arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
    # Export raster from lidar using only building points
    temp_raster = 'in_memory/bldg_raster'
    arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
                                           'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
    # Convert building raster to polygon
    temp_footprint = 'in_memory/footprint'
    arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
    # Regularize building footprints
    arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint, 
                                          method='RIGHT_ANGLES')

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

関連トピック