Mattia Giacone Mattia Giacone - 1 year ago 290
C# Question

Converting coordinates from EPSG 3857 to 4326 DotSpatial

I have in my DB a list of coordinates in EPSG 3857 format.
I need to convert them in EPSG 4326
I'm trying to use DotSpatial but my code always retun a double array of Infinity.

public double[] ConvertCoodinates()
double[] xy = new double[2];
xy[0] = 5085240.8300000000;
xy[1] = 1530088.9600000000;
//An array for the z coordinate
double[] z = new double[1];
z[0] = 0;
ProjectionInfo pStart = KnownCoordinateSystems.Geographic.World.WGS1984;
pStart.AuthorityCode = 3857;
ProjectionInfo pEnd = KnownCoordinateSystems.Geographic.World.WGS1984;
pEnd.AuthorityCode = 4326;
Reproject.ReprojectPoints(xy, z, pStart, pEnd, 0, 1);
return xy;

The xy array always cointain infinity;
Can someone help me?

Answer Source

In the end i find a math formula to convert the coordinates. I implemented it in a stored procedure because i have a list of point and this store procedure calculate the distance.

DECLARE @e FLOAT=2.7182818284
DECLARE @X DECIMAL(18,2) =20037508.34

SET @StartLat3857 =(SELECT TOP 1 Latitude FROM Coordinates WHERE IdCoord=@IdCoord ORDER By IdTDFPath ASC)
SET @StartLng3857=(SELECT TOP 1 Longitude FROM Coordinates WHERE IdCoord=@IdCoord ORDER By IdTDFPath ASC)

--converting the logitute from epsg 3857 to 4326
            SET @StartLng=(@StartLng3857*180)/@X

--converting the latitude from epsg 3857 to 4326
            SET @StartLat = @StartLat3857/(@X/180)
            SET @StartLat = ((ATAN(POWER(@e,((PI()/180)*@StartLat))))/(PI()/360))-90
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download