I am seeking a way to generate surfaces (polygons in a 3D space) of different heights from LIDAR point clouds, whose spacing is 4 points per square meter. The typical application is like roofs, which may include holes, due to different heights.

However, most tools, which I can find, only generate the boundaries or footprints.

  1. ArcGIS: the examples are like: http://desktop.arcgis.com/en/arcmap/10.3/manage-data/las-dataset/lidar-solutions-data-area-delineation-from-lidar-points.htm and Creating boundary polygon shapefile from set of LAS files using ArcGIS Desktop?

  2. LAStools lasboundary.exe at http://www.cs.unc.edu/~isenburg/lastools/

  3. Python mayavi package: the example is like: https://stackoverflow.com/questions/33376657/from-point-cloud-to-surface-using-python

My initial thought is to do conversion from grid to polygons. Las file can be easy to convert to TIN, and then to grid, but grids are missing height information. Thus, the way is difficult to delineate detailed roof structures.

I also have a 30-centimeter and a 1-meter resolution orthophotos, if these do help, but no stereo photos.

The concrete expectation is like the following picture. The multi-color points are LIDAR point cloud, and the pink lines, which are 'digitized manually', indicate our expectation. However, it is easy to get the outside building boundary (the selected blue-green line), once buildings are classified, but no roofs with different heights (smaller inner polygons) are delineated.

enter image description here

  • Thanks. I stiil don't get it. Sorry. Do you want to create roof boundaries by means of vector polygons with their respective heights associated in the attribute table? Or are you trying to 3D reconstruct the buildings, like wrapping the LiDAR point in solid geometric figures? You gave examples showing what you don't want. Can you provide examples (articles, screenshots, etc) showing what is wanted? Commented May 31, 2016 at 0:45
  • @AndreSilva We want to create roof boundaries with respective heights, not just boundaries or footprints. Hope that answer your question. Thanks!
    – Vicky Liau
    Commented May 31, 2016 at 1:36
  • It seems you've already done the hard part in getting boundaries from classified LAS, features are easy to see but a lot more difficult to detect - the eye/brain interprets patterns that are hard to define mathematically. From the LAS create a surface raster and 'drape' your polygons over it with a tool like Add Surface Information resources.arcgis.com/en/help/main/10.1/index.html#//… or Zonal Statistics resources.arcgis.com/en/help/main/10.1/index.html#//… depending on how you want to store your height information. Commented May 31, 2016 at 1:57
  • @AndreSilva, in the question it states 'it is easy to get the outside building boundary', which can only mean that the OP can generate footprints but is having difficulty associating a height with these polygons... at least that's how I read the question; I found quite the opposite: easy to get heights but very difficult to get accurate boundaries from 1ppsm LiDAR (except on very clear/large buildings). All the examples I've seen (irrespective of software) use at least 8ppsm to generate boundaries to a satisfactory sub-metre accuracy. Perhaps you could clarify your statement Vicky. Commented May 31, 2016 at 2:45
  • @MichaelMiles-Stimson The outside building boundary really means the outside polygon. There are no detailed boundaries for roofs.
    – Vicky Liau
    Commented May 31, 2016 at 2:59

1 Answer 1


First of all, if you want to work with heights, normalize the LiDAR point cloud.

You have a dense point cloud (4 pts/m²) and also high resolution aerial photos, hence, as you said getting the outside roof perimeter is not an issue. Therefore, assuming you'll manage to have a shapefile with the outer roof boundaries, use it to horizontally clip the point cloud and so, isolating building-only points. See here, for example.

Then, from each new .las file generated in previous step retrieve the vertical profile to identify how many surfaces there are in the scene. Tweak the class interval in the histogram, in order to identify all major surfaces. Get the height breaks to be used in the next step.

Clip the point clouds vertically in order to isolate points within same vertical surface (for example, with Fusion use ClipData with switches zmin and zmax). Then, generate individual Digital Surface Models (DSMs; examples 1 and 2) and convert the outputs to polygons using tools of type Raster to Polygon. The polygons will have the surface height in the TOC.

Try to use a programming environment to automate all the processing steps (example).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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