2016-05-30 3 views
1

У меня в моей БД список координат в формате EPSG 3857. Мне нужно преобразовать их в EPSG 4326 Я пытаюсь использовать DotSpatial, но мой код всегда перенастраивает двойной массив Infinity.Преобразование координат из EPSG 3857 в 4326 DotSpatial

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; 
    } 

xy массив всегда cointain бесконечность; Может кто-нибудь мне помочь?

ответ

1

В конце я нахожу математическую формулу для преобразования координат.

Я реализовал его в хранимой процедуре, потому что у меня есть список точек, и эта хранимая процедура вычисляет расстояние.

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

SET @StartLat3857 =(SELECT TOP 1 Latitude FROM Coordinates WHERE [email protected] ORDER By IdTDFPath ASC) 
SET @StartLng3857=(SELECT TOP 1 Longitude FROM Coordinates WHERE [email protected] 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 
+0

Можете ли вы помочь мне с переводом с 4326 на 3857? – ABH

+0

@ABH Для вычисления координат вам нужно использовать инвертированную формулу. В C# это будет 'private double [] ConvertCoordinate (double lat, double lng) { double x = lng * 20037508.34/180; double y = Math.Log (Math.Tan ((90 + lat) * Math.PI/360))/(Math.PI/180); y = y * 20037508.34/180; return new double [] {x, y}; } ' –

Смежные вопросы