RA CONVERTER
COORDINATE CONVERSION & DATUM TRANSFORM
FORMAT: NAME,Y,X,Z
ENGINE: PROJ4 / WGS84
01 — Upload
Drop a coordinate file, or click to browse CSV/TXT (name,y,x,z — z optional), Excel, KML, or GPX
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.
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)
Fetches ground elevation for every current point from Google's Elevation API, via your own Cloudflare Worker (so the API key stays server-side, never in this page). Overwrites Z for every point in the table — there's no per-point protection yet, so make sure that's what you want before running it on a table with manually-entered heights you care about.
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.
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.
09 — Units
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.