Question

How to extract triangles from CityGML MultiSurfaces


Hello!

 

I have a CityGML dataset consisting of MultiSurfaces - atleast that is what FME tells me:

geometrytypes 

an example of a surface:

 

billedeI would like to extract the surfaces' triangles, so each triangle has its own feature/record in the output.

 

So far i have tried 3 methods:

  1. using the deaggregator. Looks like it didnt do anything.
  2. using the geometryPartExtractor. I have extracted the "IFMEface" geometry-type from the surface, but this just looks like original geometry, where all triangles are one geometry. Afterwards i added another geometryPartextractor and tried to extract the IFMEPolygon - but this seemed to just remove the triangles from the geometry.
  3. using the Triangulator. Using the triangles output, input these into a geometryPartExtractor where you extract the newly created faces. This worked somewhat, however the triangles it made do not always correspond with the original triangles. the example from above gets a new triangle:

billedeIf possible i would like the original triangles, or atleast be sure the new triangles if combined, match the original geometry.


3 replies

Userlevel 2
Badge +17

Hi @jonasenok​,

Deaggregating a MultiSurface or extracting the Faces from it will give you the base surface geometry. The triangles edges displayed within a Face in the Data Inspector are an artifact created by the rendering process. If you want to use the Triangulator to create triangular Faces instead, please try the following process:

  • Send surfaces to Triangulator to replace surfaces with triangulated mesh
  • Send TINSurface to Deaggregator set to Flatten All Levels
  • Send Deaggregated to GeometryCoercer to coerce to fme_composite_surface
  • Send Coerced to Deaggregator set to Flatten All Levels and Split Composites

The output faces from this process should match the Data Inspector display

Hi @daveatsafe​,

 

thanks for the suggestion!

I tried it, but it doesnt behave as i expected; I expected it would create an object/feature/row for each triangle. However it still retrieves the "entire" face:

billede(notice the number of features does not change throughout the process)

 

billede(1 feature from deaggregator_2)

 

So far my original method 3 seems to be the best option. And if you say the triangles in data inspector are simply "rendering" artifacts, maybe i shouldnt be so worried.

 

 

Userlevel 2
Badge +17

Hi @daveatsafe​,

 

thanks for the suggestion!

I tried it, but it doesnt behave as i expected; I expected it would create an object/feature/row for each triangle. However it still retrieves the "entire" face:

billede(notice the number of features does not change throughout the process)

 

billede(1 feature from deaggregator_2)

 

So far my original method 3 seems to be the best option. And if you say the triangles in data inspector are simply "rendering" artifacts, maybe i shouldnt be so worried.

 

 

Hi @jonasenok​,

Would you mind posting your workspace?

Reply