Article Number: 76 | VC4 | VC3 | Post Date: January 8, 2019 | Last Updated: January 8, 2019
Is it possible to position my point cloud, total station, or dxf data in absolute global frame coordinates rather than relative coordinates? I want to overlap data from my photogrammetry study with my point cloud data.
It is possible to position total station data, point cloud data, and dxf data in their absolute positions in global space. It is also possible to align the positions of such data so long as their orientations are aligned before importing into Virtual CRASH.
Normally, when you import total station data or point cloud data into Virtual CRASH, the first point in the dataset is used as the reference value, and all other data is shifted with respect to that first point. This means that internally in a point array or point cloud object, the first point is stored as (0,0,0) within the data object’s own local reference frame. So, using the reference point (pivot point) of the data object, the full dataset can be moved anywhere in the Virtual CRASH global space, yet the internally stored points maintain their positions relative to one another. This is preferable for a few reasons. First, the x-y plane in Virtual CRASH is an absolute minimum for all objects; however, it is common for scene measurements to take on negative z values depending on the position of the measuring instrument relative to the lowest point in the scene (for example, scanning a scene from the top of a hill). When such measurements are imported into Virtual CRASH, in order to prevent those points from being beneath the x-y plane, the full dataset will be shifted upward so that the lowest point is on the x-y plane.
Second, in cases where data is measured with very large z values, such as hundreds or thousands of feet, it can become quite difficult to navigate and work within the 3D workspace. You would not want to edit your simulation or animation environment with datapoints hovering 5000 ft above the x-y plane if measured, for example, in Denver. It is often best to position your data as close to the x-y plane as possible. Finally, in cases where the (x,y,z) position values are extremely large, such as in the millions of feet as with state plane coordinates, numerical truncation can occur for extremely large values. To prevent this, it is common practice to translate points along each axis so that their range of values is smaller on an absolute scale (see this post from CloudCompare for example: https://www.cloudcompare.org/doc/wiki/index.php?title=Global_Shift_and_Scale). For example, if the x values in a point cloud range from 1,102,103 ft to 1,102,503 ft, it’s preferable to shift all x values so that the range is -200 ft to 200 ft.
Let’s examine an example case in more detail. In the data shown below, the original data from the total station is shown on the left (“ORIGINAL DATA”). Once the data is imported into Virtual CRASH, it is automatically shifted with respect to the first point in the dataset, and points are stored with respect to the point array object’s own internal reference frame (“RECENTERED DATA”). So in the example below, (-46.5369, -52.2085, 4.2875) is subtracted from all points when imported into Virtual CRASH, and a new point array object is created, with point 1 at (0,0,0). Remember, every point maintains the exact same position relative to one another.
You can also see the transformed (x,y,z) positions in the report:
Once the data is imported into Virtual CRASH 4, a point array object is created. The point array has its own reference point (pivot point) which by default is set to the first position in the dataset.
Positioning Total Station Data in Absolute Coordinates
Since the position-local property of any object is the location of its reference point, the easiest way to position your point array at its absolute position is simply to set the point array’s position-local x, y, and z value to the x, y, and z value of the first point in your total station data. This will work as long as you do not move the reference point’s position relative to the point array prior to setting position local.
Remember, the danger of moving points to absolute coordinates is that points in negative z will be beneath the x-y plane in the Virtual CRASH global space.
Positioning Point Cloud Data in Absolute Coordinates
Point cloud data is also shifted with respect to the first point in the dataset. Here we see the first few points of our point cloud:
Once imported into Virtual CRASH, all points are shifted with respect to (-522.144, -310.741, 594.727). Again, when the data is imported, a point cloud object is made, with shifted points stored internally. The point cloud object is positioned within Virtual CRASH such that the lowest point in the set sits on the x-y plane in the Virtual CRASH global space.
By default, the reference point (pivot point) of the point cloud object is set at its local (x,y) position of point 1, and global z = 0.
Therefore, to position the point cloud object at its absolute position in global space, we first want to read off point 1’s current z position in global space. To do this, we first set the x and y position of the point cloud object to (0,0). We then zoom into (0,0) in top-down orthographic view.
Next, we disable all snaps, then enable snap to point cloud. Create a sphere as a test object. Left-click on the sphere, drag it to (0,0). You should see the sphere snap to (0,0). Holding the left mouse button, we can now read off the global z-position of point 1. We then type in this z position into the position-local menu for the sphere.
Taking the difference between this value and the z value read off from the input point cloud file, we now know the local-position z value needed to position our points in global space.
Finally, let’s set the point cloud object’s position-local x and y positions to the x and y positions for point 1. This will position all points in our point cloud object at their proper absolute coordinates in global space.
Positioning Points in Absolute Coordinates and Align with Point Cloud
Now that we have our point cloud positioned in space, we want to import a DXF file consisting of both line and point elements, which were generated by a photogrammetry study of our scene. When a DXF file is imported into Virtual CRASH, its reference point’s local (x, y) position is set to the object’s geometrical center, and its z position is set to 0 both in local and global space. This way the bottom of the DXF object is sitting on the x-y plane.
You'll notice, however, that since this DXF file contains both points and lines, we can also import the file as a points file. Here we see them both side by side.
Just as with our first example total station file, the reference point here is set to the local (x,y,z) position of the first point defined in the DXF file.
Next, we want to align the two DXF objects in order to use point 1 as our reference point for both objects. We’ll simply snap the point array object to the wireframe object by using snap to vertex and the upper left corner of the mesh. After the two objects are aligned, we’ll snap the reference point (pivot) of the mesh object to sit on point 1 of the point array. The video below shows the process.
With the common reference point for both the mesh and point array objects, we can now set the position-local values for both to point 1’s x, y, and z position. This brings the points, lines, and point cloud data into final alignment.
The alignment process between points, point clouds, and DXF mesh objects will be simplified in a future update of Virtual CRASH.
Tags: Overlapping point cloud and points, positioning point cloud, absolute space, actual coordinates, relative coordinates, superimpose objects.
© 2019 vCRASH, Americas, Inc. All Rights Reserved