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
This topic also interests me but unfortunately this url does not work
Hi @jaan I've fixed the link. Thanks for pointing that out.
@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.