Hi @virtualcitymatt,
If you arrange the readers so that the model is read first, you can set the FeatureMerger to the Suppliers First mode, which should improve the performance merging the instance ids. Please also ensure that the output format supports shared models - if not, then the models will be instanced before writing, which can also take a lot of time. Also check that Enable Feature Caching is disabled.
Hi @virtualcitymatt,
If you arrange the readers so that the model is read first, you can set the FeatureMerger to the Suppliers First mode, which should improve the performance merging the instance ids. Please also ensure that the output format supports shared models - if not, then the models will be instanced before writing, which can also take a lot of time. Also check that Enable Feature Caching is disabled.
@daveatsafe - Great that these is perhaps some way to control this!
It does seem like the models are getting instanced before writing - I'm writing out to CityGML and before output I'm using an aggregator and a GeometryProperySetter. My guess is that one (or both) of these are causing the models to get instantiated. The aggregator is used to provide multiple LOD's to the same feature and the GeometryPropertySetter is providing a transformation matrix. I will experiment to see if there is a way I can work around these or figure out what is going on.
Do you know if the CityGML writer supports geometry definitions? I couldn't see anything in the doc about GeometryDefinitions being supported or not.
Hi @virtualcitymatt,
The GeometryPropertySetter is most likely the culprit - try using the 3DAffiner instead to add a matrix.
Hi @virtualcitymatt,
The GeometryPropertySetter is most likely the culprit - try using the 3DAffiner instead to add a matrix.
After testing it is pretty clear that this is where performance it taking the hit. Great to see the 3DAffiner works well here as an alternative, however, I'm struggling to also set a citygml_lod_name on the feature without the GeometryProperySetter. 😤
After testing it is pretty clear that this is where performance it taking the hit. Great to see the 3DAffiner works well here as an alternative, however, I'm struggling to also set a citygml_lod_name on the feature without the GeometryProperySetter. 😤
Tried a lot of different things yesterday @daveatsafe but no luck. Geometries don't seem to be getting instanced when using the GeoemtryPropertySetter but it does seems to really slow things down. Seems I might need a more creative solution. But perhaps I'm just missing something.
If anyone finds this - I found that using a PythonCaller to add the traits gave a huge boost to the performance over the GeometryPropertySetter.
def input(self, feature: fmeobjects.FMEFeature):
#get geom
geom=feature.getGeometry()
#set variables
lodName=feature.getAttribute('citygml_lod_name')
matrix=feature.getAttribute('citygml_transformation_matrix')
#apply traits
geom.setTrait("citygml_lod_name",lodName)
geom.setTrait("citygml_transformation_matrix",matrix)
#update geometry
feature.setGeometry(geom)
self.pyoutput(feature)