この記事は 点群データ Advent Calendar 2025 21日目の記事です。
はじめに
車載写真レーザシステム(MMS)で取得した点群データ(LAS)をまとめて処理し、
最終的に DSM(数値表層モデル)を作成するまでの一連のPDAL処理 をまとめます。
本記事では、以下の流れを実施します。
- 複数LASのマージ
- LAS → LAZ 変換
- メタ情報の確認
- グリッド(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. LASファイルのマージ
まず、複数のLASファイルを1つにまとめます。
pdal pipelineでmerge-pipeline.json を指定して、LASファイルのマージを行います。
{
"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)を採用している。
{
"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 などでそのまま利用可能
まとめ
PDALを使うことで、
- LASの一括処理
- LAZ化による軽量化
- 点群 → DSM変換
を CLIだけで再現性高く処理 できます。
とくに pipeline JSON を分けておくと、
- 再実行しやすい
- パラメータ管理が楽
- 業務フローに組み込みやすい
というメリットがあります。



