程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [C#]火星坐標系 (GCJ-02)與百度坐標系 (BD-09) 轉換幫助類,

[C#]火星坐標系 (GCJ-02)與百度坐標系 (BD-09) 轉換幫助類,

編輯:C#入門知識

[C#]火星坐標系 (GCJ-02)與百度坐標系 (BD-09) 轉換幫助類,


關鍵代碼:

using System;
using YanZhiwei.DotNet2.Utilities.Models;
namespace YanZhiwei.DotNet2.Utilities.Common
{
    /// <summary>
    /// 火星坐標系 (GCJ-02)與百度坐標系 (BD-09) 轉換幫助類
    /// </summary>
    public class BDGCJLatLonHelper
    {
        /*
         *參考:
         *BD09坐標系:即百度坐標系,GCJ02坐標系經加密後的坐標系。
         */
        #region 常量
        const double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        #endregion 
        #region 將GCJ-02坐標轉換成BD-09坐標
        /// <summary>
        /// 將GCJ-02坐標轉換成BD-09坐標
        /// </summary>
        /// <param name="gcjPoint">GCJ-02坐標</param>
        /// <returns>BD-09坐標</returns>
        public LatLngPoint GCJ02ToBD09(LatLngPoint gcjPoint)
        {
            LatLngPoint _bdPoint = new LatLngPoint();
            double _x = gcjPoint.LonX, y = gcjPoint.LatY;
            double _z = Math.Sqrt(_x * _x + y * y) + 0.00002 * Math.Sin(y * x_pi);
            double _theta = Math.Atan2(y, _x) + 0.000003 * Math.Cos(_x * x_pi);
            _bdPoint.LonX = _z * Math.Cos(_theta) + 0.0065;
            _bdPoint.LatY = _z * Math.Cos(_theta) + 0.006;
            return _bdPoint;
        }
        #endregion 
        #region 將BD-09坐標轉換成GCJ-02坐標
        /// <summary>
        /// 將BD-09坐標轉換成GCJ-02坐標
        /// </summary>
        /// <param name="bdPoint">BD-09坐標</param>
        /// <returns>GCJ-02坐標</returns>
        public LatLngPoint BD09ToGCJ02(LatLngPoint bdPoint)
        {
            LatLngPoint _gcjPoint = new LatLngPoint();
            double _x = bdPoint.LonX - 0.0065, _y = bdPoint.LatY - 0.006;
            double _z = Math.Sqrt(_x * _x + _y * _y) - 0.00002 * Math.Sin(_y * x_pi);
            double _theta = Math.Atan2(_y, _x) - 0.000003 * Math.Cos(_x * x_pi);
            _gcjPoint.LonX = _z * Math.Cos(_theta);
            _gcjPoint.LatY = _z * Math.Sin(_theta);
            return _gcjPoint;
        }
        #endregion 
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved