コード例 #1
0
ファイル: MercatorHelper.cs プロジェクト: lupc/MapControl
        /// <summary>
        /// 经纬度坐标转像素坐标
        /// </summary>
        /// <returns></returns>
        public static PointDouble LatLngToPixel(PointLatLng pLatLng, int zoom)
        {
            PointDouble pPix = new PointDouble();

            if (pLatLng != null)
            {
                var lat = MapHelper.Clip(pLatLng.LatY, MinLatY, MaxLatY);
                var lng = MapHelper.Clip(pLatLng.LngX, MinLngX, MaxLngX);

                double x           = (lng + 180) / 360;
                double sinLatitude = Math.Sin(lat * Math.PI / 180);
                double y           = 0.5 - Math.Log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);

                BSize <long> s        = MapHelper.GetTileMatrixSizePixel(zoom, TileSize);
                double       mapSizeX = s.Width;
                double       mapSizeY = s.Height;

                //pPix.X = MapHelper.Clip(x * mapSizeX + 0.5, 0, mapSizeX - 1);
                //pPix.Y = MapHelper.Clip(y * mapSizeY + 0.5, 0, mapSizeY - 1);
                pPix.X = MapHelper.Clip(x * mapSizeX, 0, mapSizeX - 1);
                pPix.Y = MapHelper.Clip(y * mapSizeY, 0, mapSizeY - 1);
            }

            return(pPix);
        }
コード例 #2
0
ファイル: MercatorHelper.cs プロジェクト: lupc/MapControl
        /// <summary>
        /// 像素坐标转经纬度坐标
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="zoom"></param>
        /// <returns></returns>
        public static PointLatLng PixelToLatLng(PointDouble pPix, int zoom)
        {
            PointLatLng ret = new PointLatLng();

            if (pPix != null)
            {
                BSize <long> s        = MapHelper.GetTileMatrixSizePixel(zoom, TileSize);
                double       mapSizeX = s.Width;
                double       mapSizeY = s.Height;

                double xx = (MapHelper.Clip(pPix.X, 0, mapSizeX - 1) / mapSizeX) - 0.5;
                double yy = 0.5 - (MapHelper.Clip(pPix.Y, 0, mapSizeY - 1) / mapSizeY);

                ret.LatY = 90 - 360 * Math.Atan(Math.Exp(-yy * 2 * Math.PI)) / Math.PI;
                ret.LngX = 360 * xx;
            }


            return(ret);
        }
コード例 #3
0
ファイル: MercatorHelper.cs プロジェクト: lupc/MapControl
 /// <summary>
 /// 获取像素分辨率(每像素代表多少米)
 /// </summary>
 /// <param name="zoom">层级</param>
 /// <param name="latitude">纬度</param>
 /// <returns></returns>
 public static double GetResolution(int zoom, double latitude)
 {
     return((Math.Cos(latitude * (Math.PI / 180)) * 2 * Math.PI * Axis) / MapHelper.GetTileMatrixSizePixel(zoom, TileSize).Width);
 }