Your drone captured centimeter-accurate data, but it doesn't match your surveyor's control points. Or you need to deliver in State Plane when your cloud is in UTM. These are the two problems Viizor's Georeferencing Tools solve.
Key Takeaways
- GCP Alignment applies a 7-parameter Helmert transformation to match your cloud to surveyed control points
- CRS Converter transforms coordinates between any EPSG-defined systems using the PROJ library
- Minimum 3 GCPs required; 5+ recommended for identifying outliers and achieving construction-grade accuracy
- Always verify EPSG codes and units before any transformation—this is the most common source of errors
- Ellipsoidal vs orthometric height differences can reach 20-40 meters depending on location
Introduction
Viizor Desktop's georeferencing tools solve two critical problems in professional point cloud work:
1. GCP Alignment: Align a point cloud to ground control points when the cloud doesn't match field-surveyed coordinates. Even with RTK GPS, drone data can deviate centimeters or decimeters from total station measurements.
2. CRS Converter: Convert a point cloud from one coordinate reference system to another—for example, from WGS84 geographic coordinates to UTM projected coordinates, or from UTM to State Plane.
Both tools preserve the internal geometry of your point cloud while transforming its position in space.
GCP Alignment: Align to Ground Control Points
What Problem It Solves
When you fly a drone with RTK or PPK GPS, the coordinates depend on GPS precision. Even with RTK corrections, systematic errors can cause deviations of centimeters or decimeters compared to ground control points measured with a total station or high-precision GNSS.
GCP Alignment applies a 7-parameter Helmert transformation to adjust the entire point cloud to match your GCPs.
Helmert Transformation Parameters
The Helmert transformation (also called a similarity transformation) adjusts seven parameters:
7 Parameters of Helmert Transformation
- 3 translation parameters (TX, TY, TZ): Displacement along X, Y, and Z axes
- 3 rotation parameters (RX, RY, RZ): Rotation around each axis
- 1 scale parameter: Uniform scale factor across all dimensions
This transformation is rigid—it preserves relative distances between points. It's ideal for correcting systematic GPS errors without distorting the cloud's internal geometry.
Why Helmert? Unlike affine transformations that can introduce shearing, Helmert maintains the shape of your data. A sphere in the original cloud remains a sphere after transformation—just translated, rotated, and uniformly scaled.
Step-by-Step Workflow
Requirements
- Minimum 3 GCPs with known coordinates (5+ recommended)
- CSV or TXT file with GCP coordinates
- Point cloud loaded in Viizor
- Knowledge of the GCPs' coordinate system (EPSG code) and units
Step 1: Prepare the GCP File
Create a CSV file with your control point data:
Name,Easting,Northing,Elevation
GCP-01,2567891.234,1234567.890,45.123
GCP-02,2567923.456,1234598.012,44.987
GCP-03,2567856.789,1234512.345,45.456
GCP-04,2567912.111,1234589.222,45.234
GCP-05,2567878.333,1234545.444,45.089
The system automatically detects:
- Delimiter (comma, semicolon, tab, or space)
- Whether the file has a header row
- Column types (coordinates, names, descriptions)
- Probable coordinate system based on value ranges
Step 2: Import GCPs
- Open Tools > Georeferencing Tools
- Select the point cloud to align
- Click Import File...
- Select your CSV file
Viizor displays a professional import modal with:
- Column Mapping: Assign which column is X (Easting), Y (Northing), Z (Elevation), and Name
- GCP EPSG: The EPSG code of your GCPs' coordinate system
- GCP Units: Meters, International Feet, or US Survey Feet
Critical: If your GCPs are in a different coordinate system than your point cloud (e.g., GCPs in EPSG:4326 WGS84, cloud in EPSG:32617 UTM), Viizor automatically transforms the GCPs to the cloud's system using proj4. You must specify the correct EPSG for this to work.
Step 3: Pair GCPs with Points in the Cloud
After import, GCPs appear as red markers in the 3D viewer.
For each GCP:
- Click on the red GCP marker
- Click on the corresponding location in the point cloud where that control point is physically located
- A green marker (observed point) appears, connected to the red marker by a yellow line
The GCP list shows the status of each pair:
Each paired GCP displays its residual error—the distance in meters between the GCP coordinate and the observed point before transformation.
Step 4: Calculate Transformation
With 3 or more pairs created:
- Click Calculate Transformation
- Viizor computes the optimal Helmert parameters and displays:
- RMSE (Root Mean Square Error): Overall accuracy metric
- Max/Min Error: Largest and smallest individual residuals
- Helmert Parameters: Scale factor, rotations (degrees), translations (meters)
- Per-point errors: Residual for each GCP to identify outliers
Example Results:
RMSE: 0.024 m (2.4 cm)
Max Error: 0.031 m (GCP-03)
Min Error: 0.018 m (GCP-01)
Scale: 1.0000023
Rotation X: 0.0012°
Rotation Y: -0.0008°
Rotation Z: 0.0034°
Translation: (0.234, -0.156, 0.089) m
Step 5: Apply Alignment
If the RMSE meets your accuracy requirements:
- Click Align Cloud
- Confirm the output file location
- Viizor generates a new LAS/LAZ file with transformed coordinates
- Option to automatically import the aligned cloud into the viewer
The original file remains unchanged—alignment always creates a new file.
Automatic Height Detection
If your CSV contains both Elevation (orthometric) and Ellipsoidal Height columns:
- Viizor compares both heights against the Z value in the point cloud at that location
- Recommends which height type to use based on the smaller discrepancy
- Displays the difference for each option versus the cloud
This is critical because:
- Drone GPS (RTK/PPK) typically captures ellipsoidal height
- Traditional surveying usually provides orthometric height (above mean sea level)
- The difference can be 20-40 meters depending on geographic location
Formula: Horthometric = hellipsoidal - N
Where N is the geoid undulation (height of geoid above ellipsoid at that location)
Professional Tolerances
| Application | Acceptable RMSE |
|---|---|
| Construction | < 3 cm |
| Topographic Survey | < 5 cm |
| Mining/Stockpiles | < 5 cm |
| Cadastral | < 10 cm |
| Agriculture/Forestry | < 15 cm |
If RMSE exceeds expectations:
- Verify the EPSG code of your GCPs is correct
- Check units (meters vs feet vs US Survey feet)
- Confirm observed points are accurately placed in the cloud
- Review individual residuals—consider removing GCPs with anomalously high errors
- Ensure orthometric/ellipsoidal height is correctly specified
CRS Converter: Coordinate System Transformation
What Problem It Solves
You need to combine point clouds from different sources:
- A drone cloud in WGS84 (EPSG:4326)
- A terrestrial scanner cloud in UTM Zone 17N (EPSG:32617)
- Reference data in State Plane (EPSG:6570)
CRS Converter transforms an entire point cloud from one coordinate system to another, preserving precision.
Conversion Workflow
Step 1: Select Cloud and Detect CRS
- Open Tools > Georeferencing Tools
- Click the CRS Converter tab
- Select the point cloud to convert
Viizor reads the LAS file metadata and displays:
- Detected EPSG
- CRS Name
- Units
If the CRS isn't detected, you can search manually by EPSG code or name.
Step 2: Select Target CRS
The selector shows contextual suggestions based on the source CRS:
If source is geographic (lat/lon):
- Suggested UTM zone calculated from cloud center
- Adjacent UTM zones
- Web Mercator (EPSG:3857)
If source is projected:
- WGS84 Geographic (EPSG:4326)
- Web Mercator
- Other common systems
Step 3: Advanced Options
Transform Z (Height):
- Default: Only transforms X, Y coordinates
- With checkbox enabled: Also transforms Z (required when changing ellipsoids or datums)
Step 4: Execute Conversion
- Click Convert Cloud
- Confirm parameters
- Viizor generates a new file:
original_EPSG{target}_{timestamp}.laz - Option to automatically import the converted cloud
Common Use Cases
Combine Drone + Terrestrial Scanner
Scenario
- Terrestrial scanner data in State Plane (EPSG:6570, US Survey Feet)
- Drone data in WGS84 Geographic (EPSG:4326)
- Convert drone data to State Plane
- Both clouds now share the same coordinate system
Export for Google Earth
Scenario
- Cloud in UTM (EPSG:32617)
- Google Earth requires WGS84 (EPSG:4326)
- Convert to EPSG:4326
- Export to KML/KMZ for visualization
Meet Client Deliverable Requirements
Scenario
- Client requires NAD83(2011) / South Carolina (ftUS) - EPSG:6570
- Your cloud is in WGS84 UTM 17N - EPSG:32617
- Convert to EPSG:6570
- Deliver in the required coordinate system
Technical Concepts
EPSG Codes
An EPSG code uniquely identifies a coordinate reference system. Common examples:
| EPSG | System | Common Use |
|---|---|---|
| 4326 | WGS84 Geographic | GPS, Google Maps |
| 4269 | NAD83 Geographic | North America |
| 32617 | WGS84 UTM Zone 17N | Florida, Georgia, South Carolina |
| 6570 | NAD83(2011) SC (ftUS) | State Plane South Carolina |
| 3857 | Web Mercator | Web maps (Google, Bing, OSM) |
| 26917 | NAD83 UTM Zone 17N | NAD83-based UTM |
To find your EPSG code: epsg.io
Units
- Meters: Most metric systems (UTM, most international CRS)
- International Feet: 1 ft = 0.3048 m exactly
- US Survey Feet: 1 ft = 0.3048006096 m (slightly different)
Warning: Many US State Plane systems use US Survey Feet. Confusing this with International Feet causes errors of approximately 2 mm per kilometer—significant over large sites.
Geodetic Transformations
When changing datums (e.g., WGS84 to NAD83):
- This is not a simple coordinate conversion
- Requires geodetic transformation parameters
- Viizor uses pyproj (PROJ library) with official transformation grids
Ellipsoidal vs Orthometric Height
- Ellipsoidal: Height above the mathematical ellipsoid (WGS84, GRS80)
- Orthometric: Height above the geoid (mean sea level)
- Geoid Undulation (N): Varies globally from -20m to +80m
Relationship:
Horthometric = hellipsoidal - N
Example: 45.0m (ellipsoidal) - 28.5m (geoid) = 16.5m (orthometric)
Viizor can query the GEOID18 model (NOAA) to obtain N values for locations in the United States.
Complete Workflow Example
Scenario: Drone survey over a construction site. You need to align the cloud to the topographer's GCPs and deliver in the client's required coordinate system.
Input Data
Drone point cloud: site_20241210.laz
- System: WGS84 UTM 17N (EPSG:32617)
- Units: Meters
- Height: Ellipsoidal
Surveyor's GCPs: control_points.csv
- System: NAD83(2011) State Plane SC (EPSG:6570)
- Units: US Survey Feet
- Height: Orthometric (NAVD88)
Workflow Steps
Complete Process
- Load point cloud into Viizor
- Open Georeferencing Tools (Tools menu)
- Import GCPs:
- Select
control_points.csv - Map columns: Name, Easting, Northing, Elevation
- Set EPSG: 6570
- Set Units: US Survey Feet
- Select
- Viizor transforms GCPs from EPSG:6570 to EPSG:32617 automatically
- Height detection: Viizor detects orthometric heights and applies geoid correction
- Pair points:
- Click red GCP → click corresponding mark in cloud
- Repeat for each GCP (minimum 3, recommended 5+)
- Calculate transformation:
- Review RMSE (target: < 3cm for construction)
- Check individual residuals
- Remove outlier GCPs if necessary
- Align cloud:
- Generates
site_20241210_aligned_1733856000000.laz - Coordinates now match the GCPs
- Generates
- Convert to client's system (if required):
- CRS Converter: EPSG:32617 → EPSG:6570
- Enable "Transform Z" for orthometric heights
- Deliver final file in required coordinate system
Troubleshooting
GCPs Appear Outside the Point Cloud
Probable cause: Incorrect EPSG code for the GCPs
Solutions:
- Verify the actual EPSG of the GCPs (ask your surveyor)
- Check units (meters vs feet)
- If coordinates are large numbers (> 1000), they're not lat/lon (EPSG:4326)
- Compare coordinate ranges—UTM Eastings are typically 166,000–834,000
RMSE Too High (> 50cm)
Probable causes:
- Incorrect EPSG code
- Observed points placed inaccurately in the cloud
- Errors in the CSV file
- Mixing orthometric and ellipsoidal heights
Solutions:
- Verify EPSG for both cloud and GCPs
- Zoom to each GCP and verify placement
- Recalculate and review individual residuals
- Remove GCPs with anomalously high errors
- Verify height type selection
CRS Conversion Drastically Changes Position
Probable cause: Source CRS incorrectly detected
Solutions:
- Verify the EPSG that Viizor detected
- If incorrect, use the manual search
- Compare with the original file's coordinates
Z Height Incorrect After Conversion
Probable cause: "Transform Z" not enabled
Solutions:
- Re-convert with "Transform Z" checkbox enabled
- Or apply geoid correction separately
Best Practices
- Always verify EPSG before any transformation—this is the #1 source of errors
- Document the coordinate system of each file in the filename or metadata
- Use 5+ GCPs distributed evenly across the site
- Review individual residuals before accepting an alignment
- Keep original files—transformations always generate new files
- Verify units especially with US data (feet vs meters)
- Check heights when combining data from different sources
- Test with known points after transformation to verify accuracy
Technical Specifications
Alignment Algorithm
| Component | Specification |
|---|---|
| Method | 7-parameter Helmert transformation |
| Rotation algorithm | Kabsch (SVD-based) |
| Library | NumPy + SciPy |
| Precision | Float64 (double precision) |
Coordinate Conversion
| Component | Specification |
|---|---|
| Library | pyproj (PROJ 9.x) |
| Database | Official EPSG database |
| Transformations | Includes datum shift grids when available |
Supported Formats
| Type | Formats |
|---|---|
| Input | LAS 1.2-1.4, LAZ |
| Output | LAS (same version as input), LAZ if input was LAZ |
| Metadata | VLRs preserved (except COPC structure, which is regenerated) |
| GCP import | CSV, TXT (auto-detected delimiter) |
Try Viizor Desktop Free
GCP alignment with Helmert transformation. CRS conversion between 8,000+ coordinate systems. Professional georeferencing tools.
$540 One-time payment
Windows 10/11 • No credit card required for trial