--- title: "transform local panorama locations to a global georegistered coordinate system" slug: "how-to-transform-local-panorama-locations-to-a-global-georegistered-coordinate-system" description: "Convert local pano_poses.csv panorama positions to global control point coordinates by adding the origin.json vector. Applies to Desktop Processing Software, NavVis VLX and NavVis M6; no NavVis tool exists, use Eigen or pyquaternion." tags: ["How to ..."] updated: 2024-03-18T10:07:26Z published: 2024-03-18T10:07:26Z canonical: "knowledge.navvis.com/how-to-transform-local-panorama-locations-to-a-global-georegistered-coordinate-system" --- > ## Documentation Index > Fetch the complete documentation index at: https://knowledge.navvis.com/llms.txt > Use this file to discover all available pages before exploring further. # How to transform local panorama locations to a global georegistered coordinate system ## Introduction ### Purpose When importing NavVis data into 3rd party development toolkits or software applications, we need to have the panorama locations and the Point cloud represented within the same global coordinate system. For this there is a manual transformation from the local coordinate system of the scan to the control point coordinate system necessary. NavVis is not able to provide any tool or command for this transformation. Instead we encourage customers to set up their own automatic transformation by code or a 3rd party tool. ### Scope This solution applies to Desktop Processing Software (all versions), Mobile Mapping Systems (NavVis VLX and NavVis M6) ## Procedure ### Necessary Files The local coordinates of each panorama is given within the file **pano_poses.csv**, which is located in the folder `datasets_proc/<dataset_id>/pano`. **For every pano position, there is the translation vector [pano_pos_x, pano_pos_y, pano_pos_z]** and the orientation given as a **quaternion [pano_ori_w, pano_ori_x, pano_ori_y, pano_ori_z].** Each panorama row also contains a timestamp and corresponds to a panorama info file present in `datasets_proc/<dataset_id>/info`. ![](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/how-to-transform-local-panorama-locations-to-a-global-georegistered-coordinate-system-image-9xeab0ex.png?sv=2026-02-06&spr=https&st=2026-10-14T08%3A05%3A20Z&se=2026-10-14T09%3A05%3A20Z&sr=c&sp=r&sig=zdM63XD2g4JYnwDANdGfkO%2B%2B7LyJ%2BdqK990SsjbccwU%3D) When control point have been used for processing, the origin of the scan within the global coordinate system is written within the file `datasets_proc/<datasets_id>/internal/anchors/origin.json`. The transformation from the local coordinate system of the scan to the global coordinate system of the control points is also given by a position vector and an orientation quaternion. ```plaintext { "Pose": { "orientation": { "w": "-0.23318700107838936", "x": "0", "y": "0", "z": "0.97243191151260933" }, "position": { "x": "551.38237098655372", "y": "291.49346207311419", "z": "24.213919423444075" } } ``` > [!NOTE] > **Note**: If no control points have been used during post-processing, this file will only list a location vector equaling 0 and a quaternion being an identity vector. ```plaintext { "Pose": { "position": { "x": "-0", "y": "-0", "z": "-0" }, "orientation": { "w": "1", "x": "0", "y": "0", "z": "0" } } } ``` ### Convert pano_poses.csv to global coordinates Each panorama position in local coordinates needs to be translated by the position vector of the origin: **[pano_pos_x, pano_pos_y, pano_pos_z] + [origin_x, origin_y, origin_z]** If the orientation of the panorama needs to be determined as well, each panorama quaternion needs to be transformed by the quaternion of the origin. For that both quaternions need to be multiplied with a 3rd party library due to the complexity of the mathematical operation. We recommend the C++-library **Eigen** or the python-library **pyquaternion.** ### **What if the control point file was transferred to local coordinates <20000m for processing?** If control point coordinates are beyond 20000m, they need to be translated to a basepoint [x,y,z] = [0,0,0]. This can be done by setting the first control point to 0. [cp_x, cp_y, cp_z] -> [0,0,0] If this has been done before processing, this vector needs to be added to each pano location as well. Additionally in this case, this translation needs to be applied to the processed point cloud as well. A Point Cloud is as a collection of data points in space that typically represent the external surface of an object or environment. Point clouds are used in various applications, including 3D scanning and mapping, and can be visualized and manipulated using Navvis IVION. You can perform actions such as panning, orbiting, cleaning up noise, cropping, and downloading data in formats like .e57 or .ply. The resolution of point clouds processed with NavVis Software achieves a minimum detail of 5mm, indicating the precision of the spatial data points.