С плавающей точкой округляется в libLAS Python API
Я пытаюсь использовать libLAS Python API для записи точечных наборов данных в *.las
файл. Но я испытываю некоторые проблемы с округлением значений с плавающей точкой
>>> 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
Я не уверен, что мне не хватает. Буду признателен за любую помощь в этом.
1 ответ
С помощью некоторого указателя от mloskot я разобрался с решением проблемы. Для дальнейшего использования и для других libLAS
новичков я размещаю ниже небольшой тестовый код, который я написал. Он использует образец las
файл srs.las с веб-сайта libLAS, изменяет 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()