7

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

Vicky Liau
  • 727
  • 1
  • 9
  • 18
  • 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? – Andre Silva May 31 '16 at 00:45
  • @AndreSilva We want to create roof boundaries with respective heights, not just boundaries or footprints. Hope that answer your question. Thanks! – Vicky Liau May 31 '16 at 01: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 http://resources.arcgis.com/en/help/main/10.1/index.html#//00q900000016000000 or Zonal Statistics http://resources.arcgis.com/en/help/main/10.1/index.html#//009z000000w7000000 depending on how you want to store your height information. – Michael Stimson May 31 '16 at 01: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. – Michael Stimson May 31 '16 at 02:45
  • @MichaelMiles-Stimson The outside building boundary really means the outside polygon. There are no detailed boundaries for roofs. – Vicky Liau May 31 '16 at 02:59
  • Oh, internal boundaries, that's another story. The best you can hope for is a function of similar slopes and elevations to get the internals. If you're not a software developer yourself have a look at what ENVI can do, but before you do lower your expectations, 1ppsm isn't going to give you spot-on buildings; your models will be vaguely representative only. You will need to adjust parameters a bit but you should be able to come up with something meeting your lowered expectations fairly quickly. Disclaimer: I do not profit from or endorse ENVI, I base my opinion on examples that I've seen. – Michael Stimson May 31 '16 at 03:11
  • @MichaelMiles-Stimson I don't prefer commercial software. Any suggestion to develop algorithms? – Vicky Liau May 31 '16 at 03:25
  • A combination of slope, Aspect (to a lesser extent) and elevation will identify areas inside your boundaries that are likely to be patios, rooftops etc.. if you're very good at maths you can look at creating planes and finding edges/intersections. – Michael Stimson May 31 '16 at 03:47
  • @AndreSilva I revised the spacing, four points per square meter. – Vicky Liau Jun 01 '16 at 02:28
  • Careful when extracting rooftops from mono aerial imagery. Building lean due to perspective can set you off considerably especially if there are tall buildings in the area. The further away from the center of the image, the bigger the lean and as such the larger the shift between building footprint and rooftop. – Techie_Gus Jun 01 '16 at 11:36
  • @AndreSilva Thanks. I refer to many sources, such as Google 3D maps, LIDAR point clouds as well as orthophotos and I also did some field surveys to confirm. I intend to implement some algorithms later, as the deadline of the project is close. Yes, I agree that once the boundaries are derived, the height is easy to get, such as using Python rasterio package. – Vicky Liau Jun 01 '16 at 20:11
  • Related: https://gis.stackexchange.com/questions/246964/converting-las-data-from-buildings-to-detailed-shapes-using-arcgis-pro (ArcGIS Pro). – Andre Silva Jul 13 '17 at 01:19

1 Answers1

3

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).

Andre Silva
  • 10,259
  • 12
  • 54
  • 106