Drop a coordinate file, or click to browse
CSV/TXT (name,y,x,z — z optional), Excel, KML, or GPX
Name
Y
X
Z
Geoid N
Source
02 — Coordinate systems
→
Local or national grids: paste a Proj4 string under "Custom" — find one for any EPSG code at epsg.io. Column convention is Y, X, Z in that order — for UTM/most grids that's Northing, Easting; for the Hartebeesthoek94 / Cape Datum SA Survey Grids it's Westing, Southing, which is the native order surveyors already work in. Check this matches your file before converting.
Cape Datum accuracy note
The shift from Cape Datum to Hartebeesthoek94/WGS84 isn't uniform across South Africa — the historical network has real regional distortion. This app applies the single published 3-parameter shift (accurate to roughly 15m at best per the EPSG documentation), which is fine for general mapping but not for cadastral or precision engineering work. For that, NGI recommends dedicated point-based transformation rather than a blanket datum shift.
Converting updates your working data in place — From switches to match To automatically, so the next conversion builds on this result rather than the original file. To start over from scratch, re-upload.
2A — Cape (LO) → Hart94 (WG)▾
A better alternative to the blanket 3-parameter shift under Cape Datum: finds nearby trig beacons with known coordinates in both datums, fits a local Helmert transform from them, and applies that instead. Shows up when From is Cape Datum / SA Survey Grid (Cape → Hart94), or when From is Hartebeesthoek94 and To is Cape Datum (Hart94 → Cape).
Shown on the map below: ● red = used in the current fit, ● dim = ticked off / excluded.
Name
dY (m)
dX (m)
From Y
From X
To Y
To X
Drop a saved parameters .txt file, or click to browse
Same format as this app's own "Save parameters" output
Current fit parameters
03 — Map & Export
04 — Nearest control points▾
Searches the SA trig/town survey beacon list for the beacons closest to your uploaded points. The search itself runs in Lat/Long, then the results are converted into whatever "To" system is set above and added to the results.
"Nearest to each point" runs a separate search per uploaded point — the same beacon can show up more than once if it's close to several of your points. For a lot of points × a high count this can take a few seconds.
05 — Elevations (Google)▾
Looks up the ground elevation for every point in the table and replaces their Z values. If any point already has a height, you'll be asked to confirm first.
06 — Geoid separation (SA2010)▾
Calculates the SA2010 geoid separation (N) for every point against the national geoid grid, using the same 3-nearest-neighbour plane-fit method as before. Shows N per point in the table above — apply it to Z once you're happy with it. Only works on your uploaded/manually-added points, not control points from the beacon search.
07 — COGO / Traverse▾
Bearing is a standard compass bearing (0° = North, 90° = East, clockwise), entered as DDD.MMSS — e.g. 45.3015 means 45° 30' 15". Only works on projected/grid systems (UTM, Web Mercator, RSA Lo-grids) — not Lat/Long, since plane trig doesn't apply directly to a geographic coordinate. RSA's south-oriented grids (Westing/Southing) are handled automatically, same as the rest of the app.
Chain legs forward from a known Start point using bearing/distance, same as Forward (Polar), until you're back near the known End point. Then calculate misclosure and apply a Bowditch (compass rule) adjustment, distributing the error proportionally along the traverse before saving the corrected intermediate points to the table.
Leg
Distance
Bearing
Y
X
Cum. dist
Point
Raw Y
Raw X
Adjusted Y
Adjusted X
08 — Area & Perimeter▾
Build a boundary by adding points in order (walking the boundary, in either direction) — same restriction as COGO: projected/grid systems only, not Lat/Long. Area uses the Shoelace formula; the closing segment (last point back to the first) is added automatically.
#
Name
Y
X
09 — Units & Constants▾
If your points were captured off an old survey diagram in something other than metres — Cape feet, English feet, chains, etc. — convert the whole table here first. This must be run before Convert (step 02), on the raw upload — if you've already converted, clear the table and start over with the right units applied first.
→
Applies to Y and X only — Z is left untouched.
Add a constant
Adds a fixed amount to every Y and X — for a false origin, or to shift between a local grid and a national one. Leave a field empty to leave that axis alone, and use a negative number to subtract. Works in whatever system the table is currently in, and applies to your uploaded, manually-added and COGO points — not to control points from the beacon search, which are stored as Lat/Long and re-derived on every render.
There is no undo — but this is its own reverse: apply the same values with the signs flipped. Floating-point arithmetic means that returns each coordinate to within about a nanometre rather than bit-for-bit, which is six orders of magnitude below the millimetre shown in the table.
10 — RA Capture▾
A separate, dedicated tool for capturing points in the field — GPS capture with a code/description per point, its own table and map, export to CSV/Excel/KML/PDF, plus Inverse and Area & Perimeter calculations. Export from there as CSV or Excel and it uploads straight into this app's Section 01, no changes needed.