Thanks to @jonm who brought this to my attention.
First: the easy one. In IFC4, grid north is defined through IfcProjectedCRS
and IfcMapConversion
, but specifically the north rotation (if a map conversion is used) is specified in IfcMapConversion.{XAxisAbscissa,XAxisOrdinate}
. (Note: In IFC2X3, replace this with EPset_MapConversion
on the IfcSite
, with properties {XAxisAbscissa,XAxisOrdinate}
). Awesome.
For true north, let’s consider some scenarios.
- Scenario 1: IFC4,
IfcProjectedCRS
+IfcMapConversion
is not present. Nothing else is defined. Proposed answer: grid, and true north are all undefined. Go fish. - Scenario 2: IFC4,
IfcProjectedCRS
+IfcMapConversion
is present, nothing else is defined. Proposed answer: grid north is defined, but true north is undefined. Boo. - Scenario 3: IFC4,
IfcProjectedCRS
+IfcMapConversion
is not present,IfcGeometricRepresentationContext.TrueNorth
is present.Proposed answer: true north is defined, but grid north is undefined. Still boo. The big problem is that very often BIM applications don’t make this distinction, and users sometimes store grid north in theEdit: @lee.gregory has clarified that in this scenario, true north is meaningless, as it can only be read in conjunction with a specific geodetic datum, which needs to be specified withTrueNorth
attribute. But this is a vendor error, not a problem with IFC.IfcProjectedCRS
. - Scenario 4: IFC4,
IfcProjectedCRS
+IfcMapConversion
is present,IfcGeometricRepresentationContext.TrueNorth
is present. Proposed answer: grid north is present. True north is present.
Note: IFC2X3 is the same but replace IfcMapConversion
with the pset.
Now, the devil in the details for scenario 4. My interpretation is that the rotation defined for grid north in IfcMapConversion and the rotation defined in TrueNorth are totally independent. In other words, they don’t stack. You don’t apply one, then apply the other. One simply points to grid north, the other points to true north. Both are relative to your project north.
My second interpretation is that in the same way that BIM authoring applications have a distinction between project north and grid north (i.e. you can potentially click a coordinate and survey it either in local or global coordinates), BIM authoring applications must also distinguish between project north and true north. In other words, they should not bake this transformation as part of the object placement transforms and hide it from the user. I don’t think any vendor actually bakes this, which is good, but I thought I’d mention it for completeness.
The issue comes in the wording in the documentation, which suggests that grid north can override true north, or, in other words, that they are dependent on one another. This seems incorrect as they are two different concepts. For example, this statement in the documentation:
NOTE If a geographic placement is provided using IfcMapConversion then the true north is for information only. In case of inconsistency, the value provided with IfcMapConversion shall take precedence.
Here’s another quote which seems incorrect (my commentary added in bold):
If a conversion to a geographic coordinate system is included by virtue of the HasCoordinateOperation attribute (this is IfcMapConversion, i.e. grid north), then the TrueNorth attribute shall be omitted or included only for informational purposes. It shall not be added to any transformation already applied by an IfcCoordinateOperation.
Am I the only one who is interpreting these sentences in the docs as suggesting that true north and grid north are being mixed up? I would’ve thought that these concepts are separate and one does not replace the other. If so, advice on how to reword the docs would be great.
Also, a bit of awkward inconvenience, that the MapConversion vector points in the X axis, and the TrueNorth vector points in the Y axis. Yikes. Is there a reason for this?
For magnetic north, no idea. Thoughts?
Edit, quote from @lee.gregory
Magnetic North wanders all over the place and so is not used in mapping applications.
Nice.
Also, related reading on how WorldCoordinateSystem fits into all this confusion.