У меня есть этот небольшой код для манипулирования лидарными точками в файле Las. Цель состоит в том, чтобы взять 1 пункт из файла 1 и искать ближайшую точку в файле 2. Затем создать новую точку, которая использует координаты точек, а затем сохранит ее. Я столкнулся с 2 проблемы до сих пор, которые описаны ниже:Сохранить Лас указывает на файл las: аргумент error и indexerror
import laspy
import laspy.file
import liblas
from liblas import header
h = header.Header()
inFile2 = laspy.file.File("C:\\Users\\Geri\\Desktop\\Sync\\Sync\\pythonlas\\mapperclip\\2clip.las", mode = "r")
inFile3 = laspy.file.File("C:\\Users\\Geri\\Desktop\\Sync\\Sync\\pythonlas\\mapperclip\\3clip.las", mode = "r")
point_records = inFile2.points
point_records = inFile3.points
t=0
for points in inFile3.points:
z=0
q=0
p=0.1
while z==0:
xmin=inFile3.x[t]-p
ymin=inFile3.y[t]-p
xmax=inFile3.x[t]+p
ymax=inFile3.y[t]+p
n=0
for points in inFile2.points:
ax=inFile2.x[n]
ay=inFile2.y[n]
if ax > xmin and ax < xmax and ay < ymax and ay > ymin:
f = liblas.file.File("C:\\Users\\Geri\\Desktop\\Sync\\Sync\\pythonlas\\mapperclip\\proba.las",mode='w', header= h)
newx = inFile3.x[t]-((inFile3.x[t]-inFile2.x[n])/2)
newy = inFile3.y[t]-((inFile3.y[t]-inFile2.y[n])/2)
newz = inFile3.z[t]-((inFile3.z[t]-inFile2.z[n])/2)
pt = liblas.point.Point(newx, newy, newz)
Проблема здесь, после этой строки. Я хочу сохранить newx, y, z как координаты X Y и значение z для новых точек в новом файле las.
Получение следующее сообщение об ошибке:
ctypes.Argumenterror: argument 1: : wrong type
f.write(pt)
f.close()
print t
print newx
print newy
print newz
print inFile2.y[n]
print inFile2.z[n]
print inFile3.z[t]
n+=1
q+=1
t+=1
else:
n+=1
if q>0:
z+=1
else:
p+=0.1
Когда я вынимаю попытку записать файл с кодом, то я получил следующее: (скрипт работает 415 раз успешно)
Traceback (most recent call last):
File "........
newx = inFile3.x[t]-((inFile3.x[t]-inFile2.x[n])/2)
IndexError: индекс 416 выходит за пределы для оси 0 с размером 416
Fun вещь о Python: 'если ах> Xmin и топор ymin', вероятно, более четко написано как 'if xmin
Evert
Можете ли вы показать полную трассировку, а не только однострочный? В частности, вызов функции вызывает ArgumentError? Потому что тогда вы можете посмотреть, какой тип аргумента ожидает функция, и вместо этого использовать правильный аргумент. – Evert
Когда вы повторяете точки в файле ('для точки inFile3.points'), эта точка затем доступна в переменной' point'. Вместо этого, используя индексы ('n',' t'), вы можете просто сравнить значения координат этих самих переменных «point». Это исключило бы возможность «IndexErrors» в этой области. –