2

We are using dot spatial library for transformation from one projection to other. We are planning to include the new release GDA 2020 projections. Is it as simple as just adding the proj string for the new projection.

Looking at the details here it looks like there is no support in proj4 for this new projection however there is a new version proj 6 which provides this support but there is no .net port available for this. Is there anyone who can guide on this.

3 Answers 3

4

I used the proj.4 declaration provided by JohnGom here:

Proj.4/GDAL/QGIS Transformation between CRSs that are defined the same

+proj=longlat +ellps=GRS80 +towgs84=-0.06155,0.01087,0.04019,-0.0394924,-0.0327221,-0.03289790,0.009994 +no_defs

You may also need to modify other projections, depending on your needs. For example, I want to convert from GDA94 to GDA2020. This does not work as-is, because DotSpatial does not provide any datum information for GDA94. I modified the GDA94 proj.4 string to be:

+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs

I just did this today and need to test more, but it does match the Alice Springs example in the GDA2020 Technical Manual.

1

You are correct. Dot spatial does use Proj v4 which is an out of date version unsuitable for modern GIS needs, particularly for anything on the Australian and Pacific plates.

TOWGS84 gets you part of the way, but without performing any NTv2 grid distortion it is not doing a complete job. I have got no idea whether it handles the time varying differences between 2020 and WGS84, but I do know that in proj4 everything goes via WGS84 with all its failings.

Your best bet is to put pressure on the .NET maintainers at DotSpatial and ProjNet to update to proj6 to show there is a community need for this: e.g. https://github.com/NetTopologySuite/ProjNet4GeoAPI/issues/89.

0

I have had some success using SharpProj (nuget) and transforming everything through the static GDA94_LL as recommended by Australia's ISCM. I have found this step removes the ~200m inaccuracies I was getting on some transforms due to the switch from AGD84 in 2000.

demo code based on unit tests in SharpProj:

Need the SharpProj.Core and SharpProj.Database nuget packages. Optionally can use the SharpProj.NetTopologySuite package to let the code use geometries from NTS.

var from = new List<double> { 386223.411339871935, 7381679.087447824888 });

var AGD84_MGAZ53 = 20353;
var GDA94_LL = 4283;
var GDA20_MGAZ53 = 7853;

using ProjContext pc = new ProjContext();
pc.EnableNetworkConnections = true;

// 'normalised axis' makes sure x = long and y = lat for consistency
using CoordinateReferenceSystem crsFrom = CoordinateReferenceSystem.CreateFromEpsg(AGD84_MGAZ53, pc).WithNormalizedAxis(pc);
using CoordinateReferenceSystem crsTo = CoordinateReferenceSystem.CreateFromEpsg(GDA20_MGAZ53, pc).WithNormalizedAxis(pc);
using CoordinateReferenceSystem crsVia = CoordinateReferenceSystem.CreateFromEpsg(GDA94_LL, pc).WithNormalizedAxis(pc);

using var ct1 = CoordinateTransform.Create(crsFrom, crsVia, pc);
using var ct2 = CoordinateTransform.Create(crsVia, crsTo, pc);

var intermediate = ct1.Apply(new PPoint(from[0], from[1]));
var result = ct2.Apply(intermediate);

With the EnableNetworkConnections option set to true, the system will fetch grid files from a CDN. I have yet to discover how to get my c# code to load the distortion files or how to get them to work in Azure.

If you get a FileNotFoundException, read the issues on github

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.