我通过一次扫描获得了地面 LiDAR 点云。我导入了点云(.las 文件)并创建了 GeoPandas 数据框,包括每个点的 XY 坐标。有人可以给我关于使用 Python 3x 从扫描位置(X = 0,Y = 0)提取半径 20 米内的点的指南。
问问题
1209 次
1 回答
2
我建议使用PDAL并开发一个管道来实现您的工作流程。您可以通过 Conda 轻松安装 PDAL。
使用 PDAL,您可以裁剪以保留指定点的 2D 或 3D 半径内的点(分别使用distance
和point
选项)。PDAL 也有接地滤波器,如SMRF和PMF。
我想您要使用的基本管道是这样的,尽管您可能需要对其进行调整以适应您的数据或设置一些高级选项。
{
"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 回答