Comecei a aprender a manipular dados LAS em python e queria ver como outras pessoas lidam com arquivos LAS. Gostaria de ler os pontos (estou usando uma matriz numpy) e filtrar as classes 1 e 2 (não classificadas e fundamentadas) em uma matriz separada. Eu tenho o código a seguir, mas não consigo obter os pontos filtrados.
# Import modules
from liblas import file
import numpy as np
if __name__=="__main__":
'''Read LAS file and create an array to hold X, Y, Z values'''
# Get file
las_file = r"E:\Testing\ground_filtered.las"
# Read file
f = file.File(las_file, mode='r')
# Get number of points from header
num_points = int(f.__len__())
# Create empty numpy array
PointsXYZIC = np.empty(shape=(num_points, 5))
# Load all LAS points into numpy array
counter = 0
for p in f:
newrow = [p.x, p.y, p.z, p.intensity, p.classification]
PointsXYZIC[counter] = newrow
counter += 1
Eu vi arcpy.da.featureClassToNumpyArray, mas não queria importar o arcpy nem precisar converter para o shapefile.
De que outra forma posso filtrar / ler dados do LAS em uma matriz numpy?
Respostas:
Seu
PointsXYZIC
agora é uma matriz numpy. O que significa que você pode usar a indexação numpy para filtrar os dados nos quais está interessado. Por exemplo, você pode usar um índice de booleanos para determinar quais pontos buscar.Agora você deve ter uma matriz numpy com todos os valores em que os dados não são classificados ou fundamentados. Para obter os valores que foram classificados, você pode usar:
fonte
Use laspy para ler arquivos LAS e retornar facilmente os dados como matrizes numpy com as quais você pode interagir. laspy é python puro, é quase tão rápido quanto libLAS, possui mais recursos do que as ligações libLAS Python e é muito mais fácil de implementar.
fonte
Peço desculpas se você já sabe disso, mas o LASTools é uma ferramenta fantástica de código-fonte aberto que agora se integra ao ArcGIS e ao QGIS 2.0 - Isso tem opções para filtrar os dados da maneira que você está olhando.
fonte