墨卡托和经纬度相互转

2016-06-03 11:47:27  访问(1286) 赞(0) 踩(0)


        /// <summary>
        /// 经纬度转墨卡托
        /// </summary>
        /// <param name="lon"></param>
        /// <param name="lat"></param>
        /// <returns></returns>
        public string LonLat2Mercator(double lon, double lat)
        {
            double M_PI = Math.PI;

            double x = lon * 20037508.342789 / 180;
            double y = Math.Log(Math.Tan((90 + lat) * M_PI / 360)) / (M_PI / 180);

            y = y * 20037508.34789 / 180;

            return x.ToString() + "," + y.ToString();
        }


        /// <summary>
        /// 经纬度转墨卡托
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public SignInfoXY LonLat2MercatorInfo(SignInfoXY info)
        {
            double lon = info.X;
            double lat = info.Y;

            double M_PI = Math.PI;

            double x = lon * 20037508.342789 / 180;
            double y = Math.Log(Math.Tan((90 + lat) * M_PI / 360)) / (M_PI / 180);

            y = y * 20037508.34789 / 180;

            return new SignInfoXY(x, y);
        }

        /// <summary>
        /// 墨卡托转经纬度
        /// </summary>
        /// <param name="mercatorX"></param>
        /// <param name="mercatorY"></param>
        /// <returns></returns>
        public string Mercator2LonLat(double mercatorX, double mercatorY)
        {
            double M_PI = Math.PI;

            double x = mercatorX / 20037508.34 * 180;
            double y = mercatorY / 20037508.34 * 180;

            y = 180 / M_PI * (2 * Math.Atan(Math.Exp(y * M_PI / 180)) - M_PI / 2);

            return x.ToString() + "," + y.ToString();
        }


        /// <summary>
        /// 墨卡托转经纬度
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public SignInfoXY Mercator2LonLatInfo(SignInfoXY info)
        {
            double mercatorX = info.X;
            double mercatorY = info.Y;

            double M_PI = Math.PI;

            double x = mercatorX / 20037508.34 * 180;
            double y = mercatorY / 20037508.34 * 180;

            y = 180 / M_PI * (2 * Math.Atan(Math.Exp(y * M_PI / 180)) - M_PI / 2);

            return new SignInfoXY(x, y);
        }


标签:墨卡托和经纬度相互转 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)