我从单次扫描中得到了LiDAR点云。我导入了点云(.las文件)并创建了GeoPandas数据帧,包括每个点的XY坐标。有人可以指导我使用Python 3x从扫描位置(X = 0,Y = 0)半径20米范围内提取点。
答案 0 :(得分:2)
我建议您使用PDAL并开发pipeline来实施您的工作流程。您可以轻松install PDAL via Conda。
使用PDAL,您可以crop保留指定点的2D或3D半径内的点(分别使用distance
和point
选项)。 PDAL还有SMRF和PMF等地面过滤器。
我认为您要使用的基本管道是这样的,但您可能需要根据数据进行调整或设置一些高级选项。
{
"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()