@agron Although 2 units can be written in the IFC file, only the CRS defined system is considered authoritative (@Hans_Lammerts, this also answers your question). See this statement in my blog post:
In addition to ordinary coordinates, the IfcSite
provides RefLatitude
, RefLongitutde
, and RefElevation
attributes. As the prefix âRefâ suggests, this is the latitude and longitutde for the reference point. It was introduced as a way for vendors to easily migrate between IFC2X3 and IFC4. This is because the concept of map conversions did not exist in IFC2X3. In the case of IFC4, it is in fact a duplication of data. If there is a discrepancy between the IfcMapConversion
and the data provided in IfcSite
, the IfcMapConversion
takes priority.
As you can see, the lat/longs were only there for a 2X3 fallback, and should not be used. If they both exist, the lat/longs should be ignored. In addition:
After all of this information is recorded, itâs interesting to note that the IfcGeometricRepresentationContext additionally has a TrueNorth attribute. Assuming the IfcMapConversion is already provided, there is actually no need for a TrueNorth attribute, and so if it is provided, it is merely duplicate data and there for convenience. IFC readers should not parse it and should not apply the same rotation twice. The IfcMapConversion takes priority over the TrueNorth attribute.
Also, you state that âOn the IfcProject level the coorâŚâ - this statement is not that accurate. It is defined at the IfcGeometricRepresentationContext
level. Therefore, this statement in my article should be emphasized:
I would like to emphasize that the inheritance of coordinate transformation is not done due to spatial containment, but instead due to the selection of IfcRepresentationContext
. This allows different IfcSite
elements to have a different IfcRepresentationContext
, and therefore have a different MapConversion
. This is useful if you are working on a small town or any geographically large projects, as different sites will likely require different Helmert transformations.
In conclusion, IFC only defines one authoritative unit and one authoritative location for georeferencing, through the map conversion and target CRS (exact unit, e.g. metres, feet, etc, depends on the CRS definition). Here is an example output implementation by Blender BIM:
#27=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#9,$);
#32=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#33=IFCPROJECTEDCRS('EPSG:28356','Sydney','GDA94','AHD','MGA','56',#32);
#34=IFCMAPCONVERSION(#27,#33,334902.775,6252274.139,4.,0.,1.,0.98);
Hope it helps and clarifies things!