Zacząłem uczyć się, jak manipulować danymi LAS w pythonie i chciałem zobaczyć, jak inni obsługują pliki LAS. Chciałbym przeczytać punkty (używam tablicy numpy) i odfiltrować klasy 1 i 2 (niesklasyfikowane i uziemione) do osobnej tablicy. Mam następujący kod, ale nie mogę odfiltrować punktów.
# 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
Widziałem arcpy.da.featureClassToNumpyArray, ale nie chciałem importować arcpy ani konwertować do pliku shapefile.
Jak inaczej mogę filtrować / odczytywać dane LAS do tablicy numpy?
Odpowiedzi:
Twój
PointsXYZIC
jest teraz tablicą numpy. Co oznacza, że możesz użyć indeksowania numpy do filtrowania interesujących Cię danych. Na przykład możesz użyć indeksu booleanów, aby określić, które punkty chcesz zdobyć.Powinieneś teraz mieć tablicę numpy ze wszystkimi wartościami, w których dane są niesklasyfikowane lub uziemione. Aby uzyskać wartości, które zostały sklasyfikowane, możesz użyć:
źródło
Użyj laspy, aby odczytać pliki LAS i łatwo zwrócić dane jako tablice numpy, z którymi możesz wchodzić w interakcje. laspy to czysty python, jest prawie tak szybki jak libLAS, ma więcej funkcji niż wiązania libLAS Python i jest znacznie łatwiejszy do wdrożenia.
źródło
Przepraszam, jeśli już o tym wiesz, ale LASTools to fantastyczne narzędzie Open Source, które teraz integruje się zarówno z ArcGIS, jak i QGIS 2.0 - Ma opcje filtrowania danych w sposób, w jaki patrzysz.
źródło