Arc 1960 / UTM zone 36S to Lat Long for Google Maps

I have this coordinate (778597.3125000001, 9148353). I am told this coordinate is Arc 1960 / UTM zone 36S.

When I go here: https://epsg.io/21036 and click "Get Position on Map" and enter in the above utm coordinates, it places the point in the correct place on the map (At the corner of a field).

What kind of transform/projection do I have to do to make it Lat Long, and then go to the same point in Google Maps?

I have tried various ways but seem to end up 400 - 200m diagonal offset.

The correct lat long should be: Lat: -7.699944 Long: 35.5262575 (corner of the field, see link below):

I am using DotSpatial.

``````            var Arc1960UTMZone36S = KnownCoordinateSystems.Projected.UtmOther.Arc1960UTMZone36S;
Arc1960UTMZone36S.AuthorityCode = 21036;

var WGS1984 = KnownCoordinateSystems.Geographic.World.WGS1984;
WGS1984.AuthorityCode = 3857;

double[] xy = new double[2] { 778597.3125000001, 9148353 };
double[] z = new double[1] { 0d };

Reproject.ReprojectPoints(xy, z, Arc1960UTMZone36S, WGS1984, 0, 1);

var latitude = xy[1];
var longitude = xy[0];

Debug.WriteLine(\$"Lat: {latitude} Long: {longitude}");
``````

Would anybody know why it is offset?

The solution was to use proj4 string instead of the Known Coordinate System.

``````var Arc1960UTMZone36S = KnownCoordinateSystems.Projected.UtmOther.Arc1960UTMZone36S;
Arc1960UTMZone36S.AuthorityCode = 21036;
``````

Use

``````String proj4_21036_str = "+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs";
ProjectionInfo proj21036 = ProjectionInfo.FromProj4String(proj4_21036_str);
``````

but I don't know why.

• The proj4 string includes a datum transformation, +towgs84=-160,-6,-302,0,0,0,0, which the "known" definition must not include. Older datums (geographic coordinate reference systems) will be offset from modern ones (anything after 1984 or so) by a few meters to few hundred meters. Commented Dec 28, 2020 at 19:28