Сохранение точек Las в файле las: ошибка аргумента и ошибка indexerror

У меня есть этот маленький код для манипулирования лидарными точками в файле Las. Цель состоит в том, чтобы взять 1 точку из файла 1 и найти ближайшую точку в файле 2. Затем создать новую точку, используя координаты точек, и затем сохранить ее. До сих пор я столкнулся с 2 проблемами, которые объясняются ниже:

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: аргумент 1: неправильный тип

                                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

1 ответ

Итак, вот что я получил так далеко:

Для первой проблемы я просто пропустил модуль liblas и использовал laspy для сохранения созданного нового файла.

Для второй проблемы я заменил

for points in inFile3.points:

с

 while t < 415:
Другие вопросы по тегам