我有一个用于操作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保存为新的las文件中新点的X Y坐标和z值。
收到以下错误:
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
的范围答案 0 :(得分:1)
所以这是我到目前为止所得到的:
对于第一个问题,我只是省略了liblas模块并使用laspy来保存创建的新文件。
对于第二个问题,我更换了
for points in inFile3.points:
与
while t < 415: