Author: Darko Nedic · Contact: office@geo-biz.com · License: GNU GPL v2+ · Min. QGIS: 3.0
Orthogonal Measure is a QGIS plugin that lets you define a local orthogonal coordinate system directly on the map canvas and then construct points by entering X and Y offsets in metres. It is designed for surveyors, civil engineers, and GIS professionals who need to quickly stake out or digitize points relative to a custom baseline — without leaving QGIS.
Both axes are visualized on the map canvas:
| Axis | Colour | Positive direction | Negative direction |
|---|---|---|---|
| Y | Blue | Solid dashed line | Faint dotted line |
| X | Green | Solid dashed line | Faint dotted line |
Once the axes are defined, the dockable panel (right side by default) becomes active:
The plugin places a red × marker at the computed map position and draws:
You can construct as many points as you need. Each point is added to the results table in the panel.
Click Export to Layer to create a temporary memory layer named “Orthogonal Measure Points” containing all constructed points:
| Field | Type | Description |
|---|---|---|
id | Integer | Sequential point number |
x_offset | Double | X offset in metres |
y_offset | Double | Y offset in metres |
map_e | Double | Easting in map CRS |
map_n | Double | Northing in map CRS |
The layer uses the current project CRS and can be saved to any spatial format (Shapefile, GeoPackage, etc.) using standard QGIS tools.
The panel can be:
| Section | Description |
|---|---|
| Status | Instructions and status messages; shows origin and Y-axis coords once defined. |
| Enter offset (m) | Y and X spinboxes (range ±999 999 m, 3 decimal places, 0.1 m step). |
| Constructed Points | Table listing all constructed points with offsets and map coordinates. |
| Buttons | Reset — clear everything. Export to Layer — export points. |
| Key | Action |
|---|---|
| Enter | Construct point (when a spinbox is focused) |
| Escape | Reset the tool (clear axes and all points on the canvas) |
When the map tool is active, vertex + segment snapping is automatically enabled on all layers with a 20 px tolerance. This lets you precisely snap the origin or Y-axis point to existing features. The previous snapping configuration is restored when the tool is deactivated.
All visual elements are drawn directly on the map canvas and automatically reposition when you pan or zoom.
| Element | Appearance |
|---|---|
| Origin marker | Red double-triangle, 12 px |
| Y-axis point marker | Blue triangle, 10 px |
| Y-axis (positive) | Blue dashed, 2 px |
| Y-axis (negative) | Blue dotted, 1 px, faded |
| X-axis (positive) | Green dashed, 2 px |
| X-axis (negative) | Green dotted, 1 px, faded |
| Constructed point | Red ×, 12 px |
| Y projection line | Blue dashed, origin → projection |
| X projection line | Green dashed, projection → point |
| Right-angle indicator | White □, 6 px at the corner |
| Offset label | Compact text, white background, thin border |
1. Open your project in QGIS (any CRS).
2. Click the Orthogonal Measure toolbar icon.
3. Click on a known point on the map → origin is set (red marker).
4. Click a second point that defines the Y-direction (blue marker).
→ Axes appear on the canvas; the panel becomes active.
5. Enter Y = 10.000, X = 0.000 → click Construct Point.
→ A point is placed 10 m along the Y-axis.
6. Enter Y = 5.000, X = -3.500 → click Construct Point.
→ A point is placed 5 m along Y and 3.5 m to the left of Y.
7. Repeat for all needed points.
8. Click Export to Layer → memory layer is added to the project.
9. Right-click the layer → Export → Save As… to save permanently.
10. Close the panel or press Reset to start a new measurement.
QgsDistanceArea with the project ellipsoid to convert between
map-CRS units and ground distances, so it works accurately in EPSG:3857,
UTM zones, state planes, and even geographic CRS.(a, b) → (b, -a).QgsMapCanvasItem objects that reposition on pan/zoom. Labels use a
fixed pixel size for consistent readability."memory"). The layer inherits the project CRS.orthogonal_measure folder to your QGIS plugins directory:
%APPDATA%\QGIS\QGIS3\profiles\default\python\plugins\~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/~/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/orthogonal_measure/
├── __init__.py # Plugin entry point (classFactory)
├── orthogonal_measure.py # Main plugin class (OrthogonalMeasure)
├── ortho_map_tool.py # Map tool + canvas items
├── orthogonal_measure_dialog.py # Dockable panel (QDockWidget)
├── orthogonal_measure_dialog_base.ui # Qt Designer UI form
├── resources.py # Compiled Qt resources (icon)
├── resources.qrc # Qt resource definition
├── metadata.txt # QGIS plugin metadata
├── icon.png # Plugin icon
├── README.md # Markdown documentation
├── README.html # This file
└── i18n/ # Translations