1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MMS道路点群データからDSMを作成する方法について

Last updated at Posted at 2025-12-21

この記事は 点群データ Advent Calendar 2025 21日目の記事です。

はじめに

車載写真レーザシステム(MMS)で取得した点群データ(LAS)をまとめて処理し、
最終的に DSM(数値表層モデル)を作成するまでの一連のPDAL処理 をまとめます。

本記事では、以下の流れを実施します。

  1. 複数LASのマージ
  2. LAS → LAZ 変換
  3. メタ情報の確認
  4. グリッド(DSM)データの作成

筆者は過去に、道路管理の高度化を検討するため、気象に起因する交通異常(道路冠水による通行止め等)の検知の可能性を検討する業務に携わった経験がある。
その際、地形把握にはDEMが用いられることが多かったが、道路構造物や縁石、中央分離帯などの微地形が考慮されないため、実際の冠水箇所の特定には限界があると感じた。

この経験から、MMSで取得した高密度道路点群を用いてDSMを作成することができれば、道路構造物を含めた地形表現が可能となり、道路冠水が発生しやすい箇所の把握に活用できるのではないか、と考えたことが本記事作成のきっかけである。

本記事では解析手法そのものには踏み込まず、DSMを作成するための前処理として、
PDALを用いた点群処理手順とパラメータ設定の考え方を整理する。

PC処理環境

  • OS:Windows 11 Pro(WSL2/Ubuntu)
  • CPU:AMD Ryzen 7 5700X 8-Core Processor
  • メモリ:64GB
  • SSD:4TB(空き容量 1TB)

使用ツール

使用データ

  • 埼玉県 道路点群データ

車載写真レーザシステム(MMS)により取得し、統合して活用できる3次元点群データです。令和3年~令和5年に取得したデータです。

図郭単位で、ZIP圧縮したファイルのダウンロードができます。
データの座標参照系は、JGD_2011_Japan_Zone_9​です。

データは、CC BY 4.0 ライセンスに従って利用することができます。

└─las
        10d1054-045.las
        10d1054-046.las

縮尺 1/2,000
image.png

縮尺 1/500
image.png

1. LASファイルのマージ

まず、複数のLASファイルを1つにまとめます。
pdal pipelineでmerge-pipeline.json を指定して、LASファイルのマージを行います。

merge-pipeline.json
{
  "pipeline": [
    {
      "type": "readers.las",
      "filename": "las/*.las"
    },
    {
      "type": "writers.las",
      "filename": "merged.las"
    }
  ]
}

この設定では、las/ ディレクトリ配下のLASをすべて読み込み、
1つのLASファイルに統合します。

実行コマンド
pdal pipeline merge-pipeline.json

2. LAS → LAZ 変換(軽量化)

マージ後のLASはサイズが大きくなりがちなので、可逆圧縮形式の LAZ に変換します。

実行コマンド
pdal translate merged.las merged.laz
  • データ内容は変わらず
  • ファイルサイズを大幅に削減可能
  • 以降の処理もLAZのままでOK

3. メタ情報の確認

点群の範囲・点数・座標系などを確認します。

pdal info --metadata merged.laz クリックしてください
$ pdal info --metadata merged.laz
{
  "file_size": 726375904,
  "filename": "merged.laz",
  "metadata":
  {
    "comp_spatialreference": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",GEOGCS[\"JGD2011\",DATUM[\"Japanese_Geodetic_Datum_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1128\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6668\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",139.833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST],AUTHORITY[\"EPSG\",\"6677\"]]",
    "compressed": true,
    "copc": false,
    "count": 132550317,
    "creation_doy": 0,
    "creation_year": 2025,
    "dataformat_id": 3,
    "dataoffset": 554,
    "filesource_id": 0,
    "global_encoding": 0,
    "global_encoding_base64": "AAA=",
    "gtiff": "Geotiff_Information:\n   Version: 1\n   Key_Revision: 1.0\n   Tagged_Information:\n      End_Of_Tags.\n   Keyed_Information:\n      GTModelTypeGeoKey (Short,1): ModelTypeProjected\n      GTRasterTypeGeoKey (Short,1): RasterPixelIsArea\n      GTCitationGeoKey (Ascii,40): \"JGD2011 / Japan Plane Rectangular CS IX\"\n      GeogCitationGeoKey (Ascii,8): \"JGD2011\"\n      GeogAngularUnitsGeoKey (Short,1): Angular_Degree\n      ProjectedCSTypeGeoKey (Short,1): Code-6677 (JGD2011 / Japan Plane Rectangular CS IX)\n      ProjLinearUnitsGeoKey (Short,1): Linear_Meter\n      End_Of_Keys.\n   End_Of_Geotiff.\n",
    "header_size": 227,
    "major_version": 1,
    "maxx": 1068.15,
    "maxy": -19865.58,
    "maxz": 55.99,
    "minor_version": 2,
    "minx": 452.87,
    "miny": -20101.91,
    "minz": -12.42,
    "offset_x": 0,
    "offset_y": 0,
    "offset_z": 0,
    "point_length": 34,
    "project_id": "00000000-0000-0000-0000-000000000000",
    "scale_x": 0.01,
    "scale_y": 0.01,
    "scale_z": 0.01,
    "software_id": "PDAL 2.6.2 (Releas)",
    "spatialreference": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",GEOGCS[\"JGD2011\",DATUM[\"Japanese_Geodetic_Datum_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1128\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6668\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",139.833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST],AUTHORITY[\"EPSG\",\"6677\"]]",
    "srs":
    {
      "compoundwkt": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",GEOGCS[\"JGD2011\",DATUM[\"Japanese_Geodetic_Datum_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1128\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6668\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",139.833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST],AUTHORITY[\"EPSG\",\"6677\"]]",   
      "horizontal": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",GEOGCS[\"JGD2011\",DATUM[\"Japanese_Geodetic_Datum_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1128\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6668\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",139.833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST],AUTHORITY[\"EPSG\",\"6677\"]]",    
      "isgeocentric": false,
      "isgeographic": false,
      "json": {
  "type": "ProjectedCRS",
  "name": "JGD2011 / Japan Plane Rectangular CS IX",
  "base_crs": {
    "name": "JGD2011",
    "datum": {
      "type": "GeodeticReferenceFrame",
      "name": "Japanese Geodetic Datum 2011",
      "ellipsoid": {
        "name": "GRS 1980",
        "semi_major_axis": 6378137,
        "inverse_flattening": 298.257222101
      }
    },
    "coordinate_system": {
      "subtype": "ellipsoidal",
      "axis": [
        {
          "name": "Geodetic latitude",
          "abbreviation": "Lat",
          "direction": "north",
          "unit": "degree"
        },
        {
          "name": "Geodetic longitude",
          "abbreviation": "Lon",
          "direction": "east",
          "unit": "degree"
        }
      ]
    },
    "id": {
      "authority": "EPSG",
      "code": 6668
    }
  },
  "conversion": {
    "name": "unnamed",
    "method": {
      "name": "Transverse Mercator",
      "id": {
        "authority": "EPSG",
        "code": 9807
      }
    },
    "parameters": [
      {
        "name": "Latitude of natural origin",
        "value": 36,
        "unit": "degree",
        "id": {
          "authority": "EPSG",
          "code": 8801
        }
      },
      {
        "name": "Longitude of natural origin",
        "value": 139.833333333333,
        "unit": "degree",
        "id": {
          "authority": "EPSG",
          "code": 8802
        }
      },
      {
        "name": "Scale factor at natural origin",
        "value": 0.9999,
        "unit": "unity",
        "id": {
          "authority": "EPSG",
          "code": 8805
        }
      },
      {
        "name": "False easting",
        "value": 0,
        "unit": "metre",
        "id": {
          "authority": "EPSG",
          "code": 8806
        }
      },
      {
        "name": "False northing",
        "value": 0,
        "unit": "metre",
        "id": {
          "authority": "EPSG",
          "code": 8807
        }
      }
    ]
  },
  "coordinate_system": {
    "subtype": "Cartesian",
    "axis": [
      {
        "name": "Northing",
        "abbreviation": "",
        "direction": "north",
        "unit": "metre"
      },
      {
        "name": "Easting",
        "abbreviation": "",
        "direction": "east",
        "unit": "metre"
      }
    ]
  },
  "id": {
    "authority": "EPSG",
    "code": 6677
  }
},
      "prettycompoundwkt": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",\n    GEOGCS[\"JGD2011\",\n        DATUM[\"Japanese_Geodetic_Datum_2011\",\n            SPHEROID[\"GRS 1980\",6378137,298.257222101,\n                AUTHORITY[\"EPSG\",\"7019\"]],\n            AUTHORITY[\"EPSG\",\"1128\"]],\n        PRIMEM[\"Greenwich\",0,\n            AUTHORITY[\"EPSG\",\"8901\"]],\n        UNIT[\"degree\",0.0174532925199433,\n            AUTHORITY[\"EPSG\",\"9122\"]],\n        AUTHORITY[\"EPSG\",\"6668\"]],\n    PROJECTION[\"Transverse_Mercator\"],\n    PARAMETER[\"latitude_of_origin\",36],\n    PARAMETER[\"central_meridian\",139.833333333333],\n    PARAMETER[\"scale_factor\",0.9999],\n    PARAMETER[\"false_easting\",0],\n    PARAMETER[\"false_northing\",0],\n    UNIT[\"metre\",1,\n        AUTHORITY[\"EPSG\",\"9001\"]],\n    AXIS[\"Northing\",NORTH],\n    AXIS[\"Easting\",EAST],\n    AUTHORITY[\"EPSG\",\"6677\"]]",
      "prettywkt": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",\n    GEOGCS[\"JGD2011\",\n        DATUM[\"Japanese_Geodetic_Datum_2011\",\n            SPHEROID[\"GRS 1980\",6378137,298.257222101,\n                AUTHORITY[\"EPSG\",\"7019\"]],\n            AUTHORITY[\"EPSG\",\"1128\"]],\n        PRIMEM[\"Greenwich\",0,\n            AUTHORITY[\"EPSG\",\"8901\"]],\n        UNIT[\"degree\",0.0174532925199433,\n            AUTHORITY[\"EPSG\",\"9122\"]],\n        AUTHORITY[\"EPSG\",\"6668\"]],\n    PROJECTION[\"Transverse_Mercator\"],\n    PARAMETER[\"latitude_of_origin\",36],\n    PARAMETER[\"central_meridian\",139.833333333333],\n    PARAMETER[\"scale_factor\",0.9999],\n    PARAMETER[\"false_easting\",0],\n    PARAMETER[\"false_northing\",0],\n    UNIT[\"metre\",1,\n        AUTHORITY[\"EPSG\",\"9001\"]],\n    AXIS[\"Northing\",NORTH],\n    AXIS[\"Easting\",EAST],\n    AUTHORITY[\"EPSG\",\"6677\"]]",
      "proj4": "+proj=tmerc +lat_0=36 +lon_0=139.833333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
      "units":
      {
        "horizontal": "metre",
        "vertical": ""
      },
      "vertical": "",
      "wkt": "PROJCS[\"JGD2011 / Japan Plane Rectangular CS IX\",GEOGCS[\"JGD2011\",DATUM[\"Japanese_Geodetic_Datum_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1128\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6668\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",36],PARAMETER[\"central_meridian\",139.833333333333],PARAMETER[\"scale_factor\",0.9999],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Northing\",NORTH],AXIS[\"Easting\",EAST],AUTHORITY[\"EPSG\",\"6677\"]]"
    },
    "system_id": "PDAL",
    "vlr_0":
    {
      "data": "AQABAAAABwAABAAAAQABAAEEAAABAAEAAgSxhygAAAABCLGHCAAoAAYIAAABAI4jAAwAAAEAFRoEDAAAAQApIw==",
      "description": "GeoTiff GeoKeyDirectoryTag",
      "record_id": 34735,
      "user_id": "LASF_Projection"
    },
    "vlr_1":
    {
      "data": "SkdEMjAxMSAvIEphcGFuIFBsYW5lIFJlY3Rhbmd1bGFyIENTIElYfEpHRDIwMTF8AA==",
      "description": "GeoTiff GeoAsciiParamsTag",
      "record_id": 34737,
      "user_id": "LASF_Projection"
    },
    "vlr_2":
    {
      "data": "AgAAAAMEAwAAAAAAUMMAAP////////////////////8DAAYAFAACAAcACAACAAgABgACAA==",
      "description": "http://laszip.org",
      "record_id": 22204,
      "user_id": "laszip encoded"
    }
  },
  "now": "2025-12-21T10:56:17+0900",
  "pdal_version": "2.6.2 (git-version: Release)",
  "reader": "readers.las"
}

ここで特に見るポイント:

  • count(点数)
  • minx / maxx / miny / maxy(XYの範囲)
  • srs(座標参照系)

DSM作成時の解像度設定や範囲確認に重要です。

国土地理院「車載写真レーザ測量システムを用いた三次元点群測量マニュアル(案)(令和元年12月)」
https://www.gsi.go.jp/common/000260366.pdf

① 座標系および単位の確認

  • 点群データは JGD2011 / 平面直角座標系(IX系) であり、水平座標の単位はメートルである。

② 点群データの位置精度要求との整合

  • 国土地理院
    「車載写真レーザ測量システムを用いた三次元点群測量マニュアル(案)」では、
    i-Construction の ICT土工に用いる三次元点群データの精度について、
    調整点等との較差が ±5cm以内 と示されている。

  • これは三次元点群データの 絶対位置精度が概ね 5cm 程度 であることを示すものであり、DSMの格子間隔についても、精度要求と同オーダーの解像度とすることが合理的である。

③ 点群データの量子化精度との整合

当該点群データの LASのスケールは以下のとおりである。

"scale_x": 0.01,
"scale_y": 0.01

これは XY 方向の量子化精度が 1cm であることを意味する。
DSM解像度を 0.05m とすることで、点群の表現精度(1cm)を十分に活かしつつ
過剰に細かい格子によるノイズ増幅や計算負荷を回避できる

④ 点密度との整合(数値による根拠)

pdal info --metadata により得られた点群の諸元は以下のとおりである。

点数

"count": 132,550,317

XY方向のデータ範囲

"minx": 452.87,
"maxx": 1068.15    615.28 m

"miny": -20101.91,
"maxy": -19865.58   236.33 m

対象面積

615.28 m × 236.33 m ≒ 145,400 m²

平均点密度

132,550,317 ÷ 145,400 ≒ 約 912 点 / m²

DSM解像度 0.05m との関係

DSM解像度を 0.05m とした場合、

1 m² あたりのグリッド数
= (1 / 0.05) × (1 / 0.05)
= 20 × 20
= 400 セル / m²

1グリッドあたりの平均点数

912 ÷ 400 ≒ 約 2.3 点 / グリッド(平均)

評価

  • 0.05m グリッドに対して
    1セルあたり平均2点以上の点群が存在
  • DSM(output_type: max)を作成する上で
    空グリッドの発生やスカスカなグリッドとなる可能性は低い
  • 点密度の観点から、DSM解像度 0.05m は妥当である

4. グリッド(DSM)データの作成

最後に、点群から DSM(GeoTIFF) を作成します。
ここでは 最大値(max) を使ったDSMを生成します。
※ 本記事では地物の上端形状を保持することを目的とし、最大値(max)を採用している。

grid-pipeline.json
{
  "pipeline": [
    "merged.laz",
    {
      "type": "writers.gdal",
      "filename": "merged.tif",
      "output_type": "max",
      "resolution": 0.05
    }
  ]
}
  • output_type: max
    → DSM(構造物・路面・ガードレール等の上端)
  • resolution: 0.05
    → 5cmグリッド(MMS想定)
実行コマンド
pdal pipeline grid-pipeline.json

出力結果

  • merged.tif

    • DSM(GeoTIFF)
    • QGIS などでそのまま利用可能

縮尺 1/2,000
image.png

縮尺 1/500
image.png

まとめ

PDALを使うことで、

  • LASの一括処理
  • LAZ化による軽量化
  • 点群 → DSM変換

CLIだけで再現性高く処理 できます。

とくに pipeline JSON を分けておくと、

  • 再実行しやすい
  • パラメータ管理が楽
  • 業務フローに組み込みやすい

というメリットがあります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?