Извлечь наземные точки LiDAR в радиусе от позиции XY, используя Python? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть облако точек LiDAR от одного сканирования.Я импортировал облако точек (файл .las) и создал фрейм данных GeoPandas, включающий координаты XY для каждой точки.Может кто-нибудь дать мне рекомендации по извлечению точек в радиусе 20 метров от позиции сканирования (X = 0, Y = 0) с использованием Python 3x.

1 Ответ

0 голосов
/ 05 июня 2018

Я предлагаю использовать PDAL и разработать конвейер для реализации вашего рабочего процесса.Вы можете легко установить PDAL через Conda .

. С помощью PDAL вы можете обрезать , чтобы сохранить точки в пределах 2D или 3D радиуса указанной точки (используя distance иpoint варианты соответственно).У PDAL также есть наземные фильтры, такие как SMRF и PMF .

Я думаю, что basic конвейер, на который вы идете, выглядит примерно так, хотя выможет потребоваться адаптировать его к вашим данным или установить некоторые дополнительные параметры.

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

После того, как вы установили PDAL и выяснили, как должен выглядеть ваш конвейер обработки, вы можете выполнить его также в Python, конечным результатом является массив Numpy.

UPDATE

Предлагаемое использование фильтра SMRF классифицирует точки, но не извлекает их.Вам нужно будет либо использовать PDAL, либо Python для извлечения возвратов с земли, проверяя точечные значения Classification, где значение 2 обозначает возврат с земли.

UPDATE

Ранее приведенный пример, показанный на 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()
...