Working with different units (LASground)?

Skip to first unread message

Xavier Nogueira

May 18, 2020, 3:15:27 PM5/18/20
to LAStools - efficient tools for LiDAR processing
Hi all,

What good group here. Hoping to get some advice for what is likely going to sound like a dumb question. Essentially I am working with LiDAR data from a variety of sources (some originally projected in US feet, some in meters). I have a script that re-tiles and processes the data (, and uses LASground for ground classification.

I have a set of LASground parameters (spike, down-spike, bulge, step size, etc.) that work excellently, but are all in feet and have only been applied on data whose source collected with units of feet.

My question is: If I select 'US feet' as units for a dataset originally in meters, what happens? Does step-size functionally get increased with LASground interpreting the input step size in the units of the data? If so, how can I adapt these parameters, would a simple feet-to-meter conversion work even for parameters like bulge which are meant to exists between 0 and 1? I've tested some meter data with the feet parameters and telling LASground to use feet and it seems to work but since this is for a scientific application I want to be careful.

Essentially I want to know how exactly LASground implements the parameters and interprets units. Let me know if you have some knowledge about this or can help me out.

Xavier Nogueira

Martin Isenburg

Jul 15, 2021, 1:18:58 PM7/15/21
to LAStools - efficient command line tools for LIDAR processing
Hello Xavier,

If lasground and lasground_new know that the data is in feet they will adjust the default values (that are for meters) by multiplying them with 3. By running in verbose mode you can see what values are used. There are two ways you can tell lasground that the input data is in feet (1) either explicitly in the command line (add '-feet' and/or '-elevation_feet') or (2) implicitly if the LAS/LAZ files have correct geo-referencing information in the VRL part of the LAS header. If in doubt use the command line and override whatever the VLR entries per file may or may not say.

Below is the actual logic being used.




      bool feet = coordinate_units_were_set_to_feet;
      bool elevation_feet = elevation_units_were_set_to_feet;

      if (!coordinate_units_were_set || !elevation_units_were_set)
        if (lasreader->header.vlr_geo_ogc_wkt)
        if (!geoprojectionconverter.has_projection())
          if (lasreader->header.vlr_geo_keys)
            geoprojectionconverter.set_projection_from_geo_keys(lasreader->header.vlr_geo_keys[0].number_of_keys, (GeoProjectionGeoKeys*)lasreader->header.vlr_geo_key_entries, lasreader->header.vlr_geo_ascii_params, lasreader->header.vlr_geo_double_params);

        if (!coordinate_units_were_set)
          feet = (geoprojectionconverter.get_ProjLinearUnitsGeoKey() > 9001);

        if (!elevation_units_were_set)
          elevation_feet = (geoprojectionconverter.get_VerticalUnitsGeoKey() > 9001);

Download LAStools at
Be social with LAStools at
Manage your settings at
You received this message because you are subscribed to the Google Groups "LAStools - efficient tools for LiDAR processing" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
To view this discussion on the web visit
Reply all
Reply to author
0 new messages