1

我通过一次扫描获得了地面 LiDAR 点云。我导入了点云(.las 文件)并创建了 GeoPandas 数据框,包括每个点的 XY 坐标。有人可以给我关于使用 Python 3x 从扫描位置(X = 0,Y = 0)提取半径 20 米内的点的指南。

4

1 回答 1

2

我建议使用PDAL并开发一个管道来实现您的工作流程。您可以通过 Conda 轻松安装 PDAL

使用 PDAL,您可以裁剪以保留指定点的 2D 或 3D 半径内的点(分别使用distancepoint选项)。PDAL 也有接地滤波器,如SMRFPMF

我想您要使用的基本管道是这样的,尽管您可能需要对其进行调整以适应您的数据或设置一些高级选项。

{
    "pipeline":[
        {
            "type":"filters.crop",
            "point":"POINT (0 0)",
            "distance":20.0
        },
        {
            "type":"filters.smrf"
        }
    ]
}

一旦你安装了 PDAL 并弄清楚你的处理管道需要是什么样子,你也可以在 Python 中执行它,最终结果是一个 Numpy 数组。

更新

SMRF 过滤器的建议用法对点进行分类,但不提取它们。您需要使用 PDAL 或 Python 通过检查逐点Classification值来提取地面返回,其中值 2 表示地面返回。

更新

如评论中所讨论的,前面提到的示例以 Python 显示。

import pdal

json = """{
    "pipeline":[
        "/path/to/input.laz",
        {
            "type":"filters.crop",
            "point":"POINT (0 0)",
            "distance":20.0
        },
        {
            "type":"filters.smrf"
        },
        "/path/to/output.laz"
    ]
}"""

pipeline = pdal.Pipeline(json)
pipeline.validate()
pipeline.execute()
于 2018-06-05T12:25:55.217 回答