2

I have lidar LAS data that contains a number of points that represent returns 6 or 7. The data is supposed to be in ASPRS LAS 1.2 specification, which does not allow return numbers (echos) greater than 5. With returns of 6 and 7, my data is not 1.2 spec compliant.

For all of you point cloud junkies, what are my options to get the data into 1.2 compliance, without deteriorating its integrity?

EDIT:

LiDAR Sensor: Riegl LMS_Q680i

Recording Software: Riegl Ri-Acquire

Raw Data Processing Software: Riegl RiANALYZE 6.0.2 (build: 2013-12-04)

Screen cap showing header of sample data with lasinfo enter image description here

  • Maybe I misread something, but doesn't it say on page 8 that class 6 and 7 is allowed? – Martin Mar 5 '14 at 20:32
  • That is classification. I am asking about return number (page 7) – Barbarossa Mar 5 '14 at 20:58
  • 1
    @Andre Silva, Spec 1.2 it's just a requirement for my customer. The percentage of points in these return groups vary but is usually less than 1%. – Barbarossa Mar 6 '14 at 0:28
  • What sensor/software is producing more than 5 return data? – Howard Butler Mar 20 '14 at 17:06
  • @HowardButler From the documentation, it appears that the sensor can collect unlimited returns – Barbarossa Mar 20 '14 at 17:50
2

I used OPALS (which has its own data format, .odm) to process my LiDAR data, but then ran into the same problem when I exported my points into .las 1.2 for visualization by FugroViewer.

My solution was to set all return numbers greater than seven to seven before export to .las. This discards some information, (the exact order of those rare echoes that are more than seventh) but at least all points are kept.

Here is an example for a python script controlling the OPALS module OpalsAddinfo that edits this attribute:

#-------------------------mess up echo numbers for compatibility with .las 1.2

print "messing up echo numbers"

import opals
from opals import AddInfo

addinf = AddInfo.AddInfo()

addinf.reset()
addinf.set_inFile(my_odm)
addinf.set_attribute("NrOfEchos=NrOfEchos < 8 ? NrOfEchos : 7")
addinf.run()
addinf.reset()


addinf.reset()
addinf.set_inFile(my_odm)
addinf.set_attribute("EchoNumber=EchoNumber < 8 ? EchoNumber : 7")
addinf.run()
addinf.reset()

print "messing up ready"
  • Interesting work around. Please, format your code next time for readability. I did it for you this time, as you can see. – John Powell Mar 16 '15 at 7:57
1

I don't know any good, portable options to write a las 1.2 file with too many returns per point without not losing any integrity; however, since you only have a small number points with a return number over five, you might not care too much if you have to throw those points away. PDAL allows you to drop points with return numbers outside of the valid bounds. To do so, you use the pdal translate command:

pdal translate -i infile.las -o outfile.las --writers.las.discard_high_return_numbers=true

From your screen capture I'm just guessing that you're on a Windows system. PDAL is built for Windows as part of the OSGeo4W project.

1

Having return counts 6 and 7 in an LAS 1.2 or LAS 1.3 file is really no big issue at all. The only downside is that their number is not recorded in the histogram that is stored in the LAS file header. But LAStools does not use these histograms anyways for anything serious (and I think that other LiDAR software does not either). So be happy that you have so many returns per shot because you may get ground points even under dense forest canopies ... (-:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.