Skip to main content

Hi,

I have been asked to complete some analysis to establish
vegetation heights using a combination from LAS and DTM datasets. But I have
some questions regarding the conversion of the LAS file to raster process. I am
aiming to create a raster version of the LAS file and then subtract the z
values from the DTM to find the vegetation heights

I am using FME 2015.1.0.2 build 15482.

I have read in the LAS file and have then used a point cloud
filter to retain only classification 5 data. I then push the output to a
numeric rasteriser to convert into a raster in advance of comparison with the DTM.
My issue is that there appears to be no option to; account for, or set, the
interpolation for instances where multiple point cloud data points fall within
my stipulated cell size.

I ran the process anyway and I have completed some tests; and
in the case where multiple points fall within a given cell, the resultant value
of the output raster appears to be that of the last point cloud data point which
goes through the cell (I think each value of the cell is overwritten each time
a point is seen in the cell. Therefore the resultant cell value is purely
derived on its order within the file and not through any ‘known’). I have also
then checked the assigned values of the cell against all of the points which
are were within the cell. Needless to say the delta can be substantially
different in some instances for all the values within a given cell. I would
really like to be able to control how the resultant cell value is assigned in
these instances of multiple containment, i.e. min, max, avg, etc. Can anyone
suggest a method to do this?

As an aside I have also created an alternate method of
exploding the point cloud into points and then obtaining the diff with the DTM
using a point on raster, but the problem is the amount of points within the LAS
file is huge (unsurprisingly) and it is slow (or impossible in some situations
for my computer to cope). Therefore I think that I definitely need to use a
raster approach in the first instance for fine the vegetation height.

Thanks in advance,

Regards,

Rob

Control of cellgeneration without interpolation would mean statisticcalculation based on cells or a grid.

There is a PointCloudStatistics calculator

I just tried it out A tiled PC of 24mil points clipped by 1500 objects (building is in my case) got me 1500 statistics sets in 2mins13sec.

Then you can use the PointCloudExpressionEvaluator to evaluate the points per cloudclip. (min, max, avg, etc)

Oh btw, after clipping the pointcloud you need to use a PointCloudConsumer (else the pc will still be the Original rather then clipped)

If you do this by some gridsize and then create a Raster with same gridsize you could use the RasterExpressionEvaluator tot calculate heightdifference between the 2 rasters.


Hi Gio,

Thanks for the pointers; I will check my understanding of your
suggestions in a minute. Typically after I posted my original question I found
the point cloud sorter.

Therefore; assuming that for
the given analysis, (when creating the raster from the point cloud,) it is
sufficient to use either the MIN or MAX value from the point cloud to assign to
the raster (and assuming that the numeric rasteriser does keep the last value for
the cell) then using the point cloud sorter before the numeric rasteriser will
suffice.

But you are right in what you
say, in that you might want to use a stat value which is not only MIN or MAX. Can
I please check my understanding of your post? Following your suggestion of the Point
Cloud Statistics Calculator I ran the post filtered PC though the stat calc,
and got a single set of stat values for the filtered point cloud (i.e. even
though the PC was class 5 points only, the stat values were for still just a single
set). Ok so far, but obviously the calculated stats are for the whole point
cloud and not for what will end up as the raster cells. Hence the reason you
say to clip the point cloud up first, so that you can obtain stats at a more granular
level.

So can I check the next part of
your suggestion? Namely; should I create a vector grid of cells of the size and
position that I want the raster to end up as? Then use these as multiple clippers
to clip the original single point cloud data? Once this is done, I will have
smaller point clouds, I can then use the stat calc to generate individual stats
for. Once this is done, should I then;

1.Push the stat value (that I want to use) back into the Vector grid
cells which I created for the clipping process in the first place. And then
test the vector grid against the raster DTM. I.e. I am using a vector on raster
process to compare the z values

2.Or, use the multiple point cloud and convert them to a Raster
AND then test this vegetation raster against the DTM raster? i.e. use a raster
on raster process to compare the z values

I am bit confused as when to
flip from vector to raster and which parts to do in which. I am not quite sure
whether I am effectively duplicating some processing tasks and therefore making
my process inefficient, as trying to complete some processes as vectors is extremely
processing heavy.

It seems a shame that when you
create a raster using the numeric rasteriser that it does not allow you to
select a cell assigning methods, i.e., centre cell, min, max, avg, sum, etc.
etc. if so then this issue would be circumvented to begin with.

Any further advice would be appreciated,
the pointers to the PC stat calc and clipping of PC is already a BIG help.

Thanks,

Rob


Hi You can do the proces without coercing to points.

When u clip the pc to a grid, you still have the overall pc.

If you use the stat calculator it will calculate stat on the clipped pc.

The stats are availabel per clip

1.Push the stat value (that I want to use) back into the Vector grid cells which I created for the clipping process in the first place. And then test the vector grid against the raster DTM. I.e. I am using a vector on raster process to compare the z values

No need for the push back.

You can then do the pc expressioncalculations.

Next you use a PointCLoudConsumer, it will output the filtered and or clipped objects.

You can use this then to create a raster ( i use a DEM- or surfacebuilder for its interpolation option and output the dem raster)

This you can use in the rasterexpressioncalculator together with your reference raster. You can then output a difference raster from there.

This is basicaly youre point 2.

2.Or, use the multiple point cloud and convert them to a Raster AND then test this vegetation raster against the DTM raster? i.e. use a raster on raster process to compare the z values.

 

You won't need to revert to pointobjects (vectors as you call it) No coersion i required.

 


Hi Gio,

Thanks again for the tips/advice.

I have done some more experimentation and I think I now understand things more clearly (slightly). More work still needs to be done as I have done things slightly differently, so I want to fully understand everything that you describe. But my temporary method is as follows, I have just described the part of moving and subtracting the z values from raster to pc.

1. read in GEOTIFF DTM

2. read in LAS PC

3. filter LAS PC classification 5 retain

4.connect outputs from 1 and 3 into PointCloudOnRasterComponentSetter. configure transformer to take band 0 (DTM_Z value) from GEOTIFF and create a new component in the point cloud called dtm_z

5. use a PointCloudExpressionEvaluator to subtract dtm_z value from PC_z.

Clearly at this stage the calculated delta z are not in an ordered ‘grid' format but associated
with the 'chaotic' pc data. So I need to decide for
the vegetation analysis whether I should create order first, in the form of a
grid first (i.e. perform a clip as you describe) or keep the PC data as was but with both z values recorded. I guess
the advantage of the latter is that the PC can be re-interpolated into a raster independently
at later date, according to any change of need? But I need to think about this.

Anyway thanks again for your help, I will look again at the clipping method.

rob


Reply