使用Python从XY位置提取半径内的LiDAR地面点?

时间:2018-06-05 01:53:00

标签: python extract geopandas lidar

我从单次扫描中得到了LiDAR点云。我导入了点云(.las文件)并创建了GeoPandas数据帧,包括每个点的XY坐标。有人可以指导我使用Python 3x从扫描位置(X = 0,Y = 0)半径20米范围内提取点。

1 个答案:

答案 0 :(得分:2)

我建议您使用PDAL并开发pipeline来实施您的工作流程。您可以轻松install PDAL via Conda

使用PDAL,您可以crop保留指定点的2D或3D半径内的点(分别使用distancepoint选项)。 PDAL还有SMRFPMF等地面过滤器。

我认为您要使用的基本管道是这样的,但您可能需要根据数据进行调整或设置一些高级选项。

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

一旦您安装了PDAL并找出了处理管道需要的样子,您也可以在Python中execute it,最终结果是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()