将坐标从EPSG 3857转换为4326 DotSpatial [英] Converting coordinates from EPSG 3857 to 4326 DotSpatial

查看:311
本文介绍了将坐标从EPSG 3857转换为4326 DotSpatial的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据库中有一个EPSG 3857格式的坐标列表. 我需要在EPSG 4326中将它们转换 我正在尝试使用DotSpatial,但是我的代码总是重新调整Infinity的双精度数组.

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

xy数组始终保持无穷大; 有人可以帮我吗?

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

推荐答案

最后,我找到了一个数学公式来转换坐标.

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 stored procedure calculates 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

这篇关于将坐标从EPSG 3857转换为4326 DotSpatial的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆