mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-28 15:53:00 +00:00
Write documentation for georeferencing
This commit is contained in:
@@ -1,95 +0,0 @@
|
||||
Georeferencing
|
||||
==============
|
||||
|
||||
In the AEC industry, works in the built environment are split between vertical
|
||||
construction (such as buildings and sites), and horizontal construction (such as
|
||||
transit, transmission, and subterranean networks). Blender and the BlenderBIM
|
||||
Add-on is only suitable for vertical construction.
|
||||
|
||||
IFC4 onwards supports georeferencing. The BlenderBIM Add-on has full support for
|
||||
IFC georeferencing. Here are the potential scenarios you will encounter in the
|
||||
wild for vertical construction.
|
||||
|
||||
1. Correctly georeferenced IFC4 with a map conversion transformation
|
||||
2. Correctly georeferenced IFC4 with a map conversion without a transformation
|
||||
3. Non-georeferenced IFC4
|
||||
4. Non-georeferenced IFC2X3
|
||||
|
||||
The first scenario is desired for most disciplines, such as architects and all
|
||||
engineers (except for civil). Typically, this results in small local engineering
|
||||
coordinates, which work well in Blender.
|
||||
|
||||
Correct georeferencing requires a projected CRS and a map conversion.
|
||||
Unfortunately, many users may be under the impression that their file is
|
||||
correctly georeferenced, but this is rarely the case. You can check whether your
|
||||
file is correctly georeferenced in the ``IFC Georeferencing`` scene panel. If
|
||||
you see "Not Georeferenced", your file is not correctly georeferenced. If your
|
||||
file is georeferenced, it is still no guarantee that the georeferencing data is
|
||||
actually correct, but how to determine this is out of scope of this article.
|
||||
|
||||
For scenarios 2, 3, and 4, coordinates may be quite large. To present this data
|
||||
in Blender, the BlenderBIM Add-on will automatically attempt to create a false
|
||||
origin to preserve the precision of the model. The first coordinate greater than
|
||||
1km will be detected and used as an offset coordinate. You can see the false
|
||||
origin, if any, in the ``Blender Offset`` section of the ``IFC Georeferencing``
|
||||
scene panel.
|
||||
|
||||
Instead of relying on an automatic false origin, you can also specify a custom
|
||||
origin coordinate. To do this, choose ``Enable Advanced Mode`` when loading an
|
||||
IFC project. Then enable the ``Import and Offset Model`` option and specify a
|
||||
new coordinate to replace the origin's default of 0,0,0 in the ``Model Offset
|
||||
Coordinates`` option.
|
||||
|
||||
Dealing with large coordinates
|
||||
------------------------------
|
||||
|
||||
In scenarios 2, 3, and 4, a BIM vendor will typically choose from two possible
|
||||
methods to offset their coordinates into large map coordinates.
|
||||
|
||||
The first method is to shift the origin point of objects in the model relative
|
||||
to the global coordinate system. We call this the ``OBJECT_PLACEMENT`` method.
|
||||
The second method is to shift the coordinates of geometry within the objects
|
||||
themselves relative to the object placement. We call this the
|
||||
``CARTESIAN_POINT`` method. Sometimes, BIM applications combine both of these
|
||||
methods in a single IFC project. To see which workaround was used on an object,
|
||||
check the "Blender Offset" property in the ``Transform`` object panel.
|
||||
|
||||
Sometimes, a model shifts their coordinates for some objects, but not all. For
|
||||
example, the walls in a model may have their object placement or cartesian
|
||||
points shifted to map coordinates, however, the object placement of the site is
|
||||
still at 0, 0, 0. Since these coordinates are so far apart, this creates a
|
||||
problem, because Blender needs to choose between displaying the walls accurately
|
||||
and sacrificing precision at the site placement, or vice versa, but it is
|
||||
impossible to satisfy both simultaneously in the same Blender session.
|
||||
|
||||
Many IFC viewers only show geometry, and don't show object placements. This may
|
||||
give users the false impression that their coordinates in their IFC project do
|
||||
not have such a large range. However, because the BlenderBIM Add-on is a full
|
||||
authoring platform, we do need to show these placements and thus it is the users
|
||||
responsibility to reconcile this inconsistency in their coordinates. Either the
|
||||
user needs to fix their file to consistently offset all coordinates, or the user
|
||||
needs to manually tell the BlenderBIM Add-on the coordinates of the desired
|
||||
false origin. In the absence of manual intervention, the BlenderBIM Add-on will
|
||||
make an intelligent guess, but it may be wrong.
|
||||
|
||||
Coordinates and precision limits
|
||||
--------------------------------
|
||||
|
||||
Blender, and subsequently the BlenderBIM Add-on, is not designed for map
|
||||
coordinate systems. Blender internally uses single precision floating point
|
||||
calculations. A full description of the precision implications are described in
|
||||
the `Blender working limits documentation
|
||||
<https://docs.blender.org/manual/en/latest/advanced/limits.html>`__.
|
||||
|
||||
From a software perspective, lengths greater than 5,000 meters start to
|
||||
accumulate precision errors that affect the nearest millimeter. Therefore, from
|
||||
a software perspective, it is unwise to embark on a project with coordinates
|
||||
ranging greater than +/- 5km.
|
||||
|
||||
However, if working in local engineering coordinates, a single transformation is
|
||||
required to convert from local engineering coordinates to map coordinates. This
|
||||
transformation includes a scale factor. The scale factor is only assumed to be
|
||||
constant for small sites (defined approximately as less than 1km square). This
|
||||
practical limit of georeferenced vertical construction is smaller than the
|
||||
software limit, so this surveying convention is the actual limiting factor, not
|
||||
the software.
|
||||
Reference in New Issue
Block a user