Поиск точек в файле LAS по координатам
Я пытаюсь найти точки в файле LAS (формат Lidar):
Сейчас я делаю это очень медленно:
from laspy.file import File
import numpy as np
inFile = File('inputfile.las', mode='r')
coord = np.vstack((inFile.x, inFile.y, inFile.z)).transpose()
def find_pt(coord, x, y, z):
found = []
for i in coord:
if(i[0] >= x and i[0] < x+1):
if(i[1] >= y and i[1] < y+1):
if(i[2] >= z and i[2] < z+1):
found.append(i)
return found
Тогда я называю это с:
find_pt(coord, 358397, 5280527, 550)
Что, конечно, занимает некоторое время, особенно когда в файле много точек.
Есть ли лучший / более быстрый способ? coords
имеет тип numpy.ndarray
1 ответ
Я не знаю ласки или ласки, но если inFile.x
и друзья - это отдельные массивы numpy (судя по vstack
call), вы можете просто использовать и сравнить их по отдельности, а затем объединить результаты:
xgood = (inFile.x >= x) & (inFile.x < x+1)
ygood = (inFile.y >= y) & (inFile.y < y+1)
zgood = (inFile.z >= z) & (inFile.z < z+1)
good = xgood & ygood & zgood
found = (inFile.x[good], inFile.y[good], inFile.z[good])
Результирующий found
немного отличается, так как это набор массивов координат x, y и z для действительной точки (точек).