2014-03-13 101 views
2

我想用libLAS Python API將點數據集寫入*.las文件。但我遇到了一些問題與浮動值被四捨五入浮點四捨五入libLAS Python API

>>> from liblas import point 
>>> pt=point.Point() 
>>> pt.x=2.323 
>>> pt.x 
2.0 
>>> 

如果我設置pt.raw_x,而不是pt.x我沒有看到的四捨五入問題,但沒有las文件寫入。

>>> pt.raw_x=2.323 
>>> pt.raw_x 
2.323 

我不知道我在想什麼。我將不勝感激任何幫助。

回答

3

mloskot的一些指針我找到了解決這個問題的方法。爲了將來的參考和其他libLAS新手的好處我發佈在我寫的一個小測試代碼下面。它使用來自libLAS website的示例las文件srs.las,修改z值並將它寫出到新的las文件中。

#!/usr/bin/python 
import os,string,glob,re,gdal,sys 
from liblas import file 
from liblas import header 
from liblas import point 
from datetime import datetime 

hout=header.Header() 

# Define the las file name 
infile="srs.las" 

# Create the output las filename 
inarr=infile.split('.') 
outfil=inarr[0]+"_newnorm.las" 

# Open the input las file 
l=file.File(infile,mode='r') 

# Get the header information 
hin=l.header 

# Now let's copy some of the header information from infile to outfile 
hout.major_version = hin.major_version 
hout.minor_version = hin.minor_version 
hout.guid = hin.guid 
hout.system_id = hin.system_id 
hout.software_id = "libLAS Python API" 
date = datetime(2014,03,17) 
hout.date = date 
hout.offset = hin.offset 
hout.scale = hin.scale 
hout.compressed = hin.compressed 
hout.count = hin.count 
hout.data_format_id = hin.data_format_id 
hout.dataformat_id = hin.dataformat_id 
hout.data_offset = hin.data_offset 
hout.point_return_count = hin.point_return_count 
hout.srs = hin.srs 
hout.version = hin.version 
hout.min = hin.min 
hout.max = hin.max 

print "Number of points: "+str(len(l)) 

lout=file.File(outfil,mode='w',header=hout) 
for p in l: 
    x=float(p.x) 
    y=float(p.y) 
    z=float(p.z) 

    # Modify z value 
    znorm = z-1 

    pt=point.Point() 
    pt.set_header(hout) 

    pt.x=float(p.x) 
    pt.y=float(p.y) 
    pt.z=float(znorm) 

    pt.intensity = p.intensity 
    pt.number_of_returns = pt.number_of_returns 
    pt.point_source_id = p.point_source_id 
    pt.raw_time = p.raw_time 
    pt.return_number = p.return_number 
    pt.scan_angle = p.scan_angle 
    pt.scan_direction = p.scan_direction 
    pt.scan_flags = p.scan_flags 
    pt.classification = p.classification 
    pt.color = p.color 
    pt.flightline_edge = p.flightline_edge 

    print "Writing to output las file" 
    lout.write(pt) 

l.close() 
lout.close()