Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从XY位置提取半径范围内的激光雷达地面点?_Python_Extract_Geopandas_Lidar - Fatal编程技术网

使用Python从XY位置提取半径范围内的激光雷达地面点?

使用Python从XY位置提取半径范围内的激光雷达地面点?,python,extract,geopandas,lidar,Python,Extract,Geopandas,Lidar,我有一次扫描得到的地面激光雷达点云。我导入了点云(.las文件)并创建了GeoPandas数据框,其中包括每个点的XY坐标。有人能给我一些关于使用python3x从扫描位置(X=0,Y=0)提取20米半径内的点的指南吗。我建议使用并开发一个工具来实现您的工作流程。你可以很容易地做到 使用PDAL,您可以在指定点的2D或3D半径内保留点(分别使用距离和点选项)。PDAL还具有接地滤波器,如和 我想您要使用的基本管道是这样的,尽管您可能需要根据数据调整它或设置一些高级选项 { "pipeli

我有一次扫描得到的地面激光雷达点云。我导入了点云(.las文件)并创建了GeoPandas数据框,其中包括每个点的XY坐标。有人能给我一些关于使用python3x从扫描位置(X=0,Y=0)提取20米半径内的点的指南吗。

我建议使用并开发一个工具来实现您的工作流程。你可以很容易地做到

使用PDAL,您可以在指定点的2D或3D半径内保留点(分别使用
距离
选项)。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()
后,现在它正在运行并按预期创建子集。