Question

LiDAR (las) to LOD2

  • 16 November 2017
  • 4 replies
  • 27 views

I want to create LOD2 objects from very dense LiDAR data approx 20 points/sqm. As input i only have 2D buildings as polygons, representing outer boundary of building, with no roof-ridges or other roof details.

I have tried transformers like TINGeneretor, SurfaceModeller and PointCloudSurfaceBuilder but I can't get a neat result. My main issue is going from the high resolution TIN to larger generalised planar roof surfaces.

Main question: How do I use FME to make planar areas to represent a simple roof with two (or more) roof sides?

Greatful for any ideas.


4 replies

Userlevel 2
Badge +17

Hi @gisase,

I think this article will help you:

https://knowledge.safe.com/content/kbentry/1353/point-cloud-to-3d-terrain-model-with-buildings-dwg.html

It details how to clip the lidar into individual clouds for each roof, and how to use them to both create roof tops and extract the roof elevation to extrude the walls from the building outlines:

 

 

Hi @gisase,

I think this article will help you:

https://knowledge.safe.com/content/kbentry/1353/point-cloud-to-3d-terrain-model-with-buildings-dwg.html

It details how to clip the lidar into individual clouds for each roof, and how to use them to both create roof tops and extract the roof elevation to extrude the walls from the building outlines:

 

 

This topic also interests me but unfortunately this url does not work

Userlevel 2
Badge +14

This topic also interests me but unfortunately this url does not work

Hi @jaan I've fixed the link. Thanks for pointing that out.

Badge +1

@jaan

To determine angled roof sections you need to determine coplanarity of points within the building polygon outlines. An excellent breakdown of coplanarity and a function written in c++ are here:

https://stackoverflow.com/questions/22426748/check-if-four-points-are-on-the-same-plane-only-by-using-distances-verify-coli

You should be able to take the coplanarity function demonstrated there and apply that to each set of 3d points within a building outline to determine 3d surfaces, but you will need to process them in order of distance, then process them for coplanarity. As I'm typing out this answer I'm thinking it probably gets much more complex than you are likely to want to dig through, so maybe a better answer would be as follows:

Group the points by a rounded height for each building, (Group by rounded_height, buildingid) and then generate a convex hull for each rounded height value, adding a unique roof level number to each polygon resulting from the convex hull for each height value. Now you have what looks like a stepped pyramid of roof heights. Use a generalizer on the polygons to remove some of the extra midline coordinates. Now you have a much smoother collection of outlines for the roof.

You can take these lines (maybe drop some of the middle heights) and turn them into breaklines for TINGenerator to use with your point cloud, thinned using pointcloudthinner, or just connect each corner of highest polygon to nearest point on lowest polygon within x distance (to handle multi-tiered roofs).

Probably a bit of overkill to do all of this, and it may take additional breakdowns to make fancy roofs, but if you truly want high definition roofs fully beautified, then this would get you close to that.

Reply