使用Python从XY位置提取半径范围内的激光雷达地面点?
我有一次扫描得到的地面激光雷达点云。我导入了点云(.las文件)并创建了GeoPandas数据框,其中包括每个点的XY坐标。有人能给我一些关于使用python3x从扫描位置(X=0,Y=0)提取20米半径内的点的指南吗。我建议使用并开发一个工具来实现您的工作流程。你可以很容易地做到 使用PDAL,您可以在指定点的2D或3D半径内保留点(分别使用使用Python从XY位置提取半径范围内的激光雷达地面点?,python,extract,geopandas,lidar,Python,Extract,Geopandas,Lidar,我有一次扫描得到的地面激光雷达点云。我导入了点云(.las文件)并创建了GeoPandas数据框,其中包括每个点的XY坐标。有人能给我一些关于使用python3x从扫描位置(X=0,Y=0)提取20米半径内的点的指南吗。我建议使用并开发一个工具来实现您的工作流程。你可以很容易地做到 使用PDAL,您可以在指定点的2D或3D半径内保留点(分别使用距离和点选项)。PDAL还具有接地滤波器,如和 我想您要使用的基本管道是这样的,尽管您可能需要根据数据调整它或设置一些高级选项 { "pipeli
距离
和点
选项)。PDAL还具有接地滤波器,如和
我想您要使用的基本管道是这样的,尽管您可能需要根据数据调整它或设置一些高级选项
{
"pipeline":[
{
"type":"filters.crop",
"point":"POINT (0 0)",
"distance":20.0
},
{
"type":"filters.smrf"
}
]
}
一旦您安装了PDAL并了解了处理管道需要的外观,您也可以在Python中使用它,最终结果是一个Numpy数组
更新
建议使用SMRF过滤器对点进行分类,但不提取点。您需要使用PDAL或Python通过检查逐点分类值来提取地面回波,其中值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()
@Sher可能还有其他问题,但至少有一个问题是您编写了POINT(10002000)
,而不是POINT(10002000)
(没有逗号)。这似乎是您尝试传递JSON文件路径的第一个示例。那不行。请参阅以获取示例。但您的管道不正确(JSON无效)。我看到两个问题。您的reader stage缺少文件名
键(它只列出值)。另外,读写器中的路径都不正确——斜杠应该颠倒(这表明两个文件都位于根目录中)。它真的在运行@Sher吗?据我所见,您已经创建并可能验证了管道。最后一个命令应该打印True
,显示管道是有效的,但您仍然没有执行它。尝试运行pipeline.execute()
。非常感谢@chambbj。添加pipeline.execute()
后,现在它正在运行并按预期创建子集。