使用最新版的cloudcompare(cloudcomapre v2.12 beta)进行取点:
-
加入模型 ,File->open->选择LAS 1.3 or 1.4( .las .laz);
-
点击模型激活picking list point
-
模型取点 点击picking list point->得到las文件中点的index->取出文件进行保存->global index, x,y,z->保存为csv文件;
-
数据计算 通过laspy 1.5.1对las文件进行处理,找到中心点并且根据上面保存的index找到想要的点相对中心点的偏移;
from laspy.file import File
import csv
import os
def main():
# 读取整个模型
f = File("E:/BaiduNetdiskDownload/Merged Data(1).las", mode='r')
# 计算模型中心点并且打印输出
centerX = (f.header.min[0] + f.header.max[0]) / 2
centerY = (f.header.min[1] + f.header.max[1]) / 2
centerZ = (f.header.min[2] + f.header.max[2]) / 2
print('center: ',(f.header.min[0]+f.header.max[0])/2,(f.header.min[1]+f.header.max[1])/2,(f.header.min[2]+f.header.max[2])/2)
# 读取cloudcompare中取到的相对位置的文件
f1=csv.reader(open('E:/cloudcompare/CloudCompare/picking_list3.csv','r'))
os.remove('E:/cloudcompare/CloudCompare/picking_list4.csv')
# 只读第一列因为index不变但是cloudcompare位置会有一定的偏移,所以在las文件中通过index取到真实的x,y,z,写入新的文件内
for row in f1:
f2 = csv.writer(open('E:/cloudcompare/CloudCompare/picking_list4.csv', 'a',newline=''))
index=int(row[0])
# 计算相对于模型中心的偏移量
difX=f.x[index]-centerX
difY=f.y[index]-centerY
difZ=f.z[index]-centerZ
f2.writerow((difX,difY,difZ))
print("写完")
f.close()
if __name__ == "__main__":
main()