Я предлагаю использовать 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()