Ejemplo n.º 1
0
 public static int GetUtmZone(UtmPosition position)
 {
     if (position.Zone == 0) // lat / long
     {
         return(GetUtmZone(position.Northing, position.Easting));
     }
     else
     {
         return(GetUtmZone(position.TransformToWGS()));
     }
 }
Ejemplo n.º 2
0
        private void DrawLatLongGrid(Graphics vGraphics, UtmPosition pOrigoUtm33, UtmPosition pBottomRightUtm33, float pZoom, SizeF vLabelRectSize)
        {
            var vOrigoWGS       = pOrigoUtm33.TransformToWGS();
            var vBottomRigthWGS = pBottomRightUtm33.TransformToWGS();
            var vBottomLeftWGS  = new UtmPosition(0, pOrigoUtm33.Easting, pBottomRightUtm33.Northing).TransformToWGS();
            var vTopRightWGS    = new UtmPosition(0, pBottomRightUtm33.Easting, pOrigoUtm33.Northing).TransformToWGS();

            double vStartEasting = Math.Min(vOrigoWGS.Easting, vBottomLeftWGS.Easting);

            vStartEasting = Math.Floor(vStartEasting / 0.1) * 0.1;
            double vEndEasting = Math.Max(vTopRightWGS.Easting, vBottomRigthWGS.Easting);

            vEndEasting = Math.Ceiling(vEndEasting / 0.1) * 0.1;

            double vStartNorthing = Math.Min(vBottomLeftWGS.Northing, vBottomRigthWGS.Northing);

            vStartNorthing = Math.Floor(vStartNorthing / 0.1) * 0.1;
            double vEndNorthing = Math.Max(vOrigoWGS.Northing, vTopRightWGS.Northing);

            vEndNorthing = Math.Ceiling(vEndNorthing / 0.1) * 0.1;

            Pen vLinePen      = new Pen(Color.FromArgb(150, Color.Red), (float)(Setup.PixelsPerMeter * Setup.ScaleAndTileSize.Scale / 3000.0));
            Pen vSolidLinePen = new Pen(Color.FromArgb(200, Color.Red), (float)(Setup.PixelsPerMeter * Setup.ScaleAndTileSize.Scale / 2000.0));

            for (double x = vStartEasting; x <= vEndEasting; x += 0.1)
            {
                var vStartWGS = new UtmPosition(0, x, vStartNorthing);
                var vMidWGS   = new UtmPosition(0, x, vStartNorthing + (vEndNorthing - vStartNorthing) / 2.0);
                var vEndWGS   = new UtmPosition(0, x, vEndNorthing);

                var    vStartUtm33 = vStartWGS.TransformFromWGS(33);
                var    vMidUtm33   = vMidWGS.TransformFromWGS(33);
                var    vEndUtm33   = vEndWGS.TransformFromWGS(33);
                PointF vStart      = Utm33ToBitmapPosition(vStartUtm33, pOrigoUtm33, pZoom);
                PointF vMid        = Utm33ToBitmapPosition(vMidUtm33, pOrigoUtm33, pZoom);
                PointF vEnd        = Utm33ToBitmapPosition(vEndUtm33, pOrigoUtm33, pZoom);
                if (Math.Round(x, 1) % 1.0 == 0.0)
                {
                    vGraphics.DrawCurve(vSolidLinePen, new PointF[] { vStart, vMid, vEnd });
                }
                else
                {
                    vGraphics.DrawCurve(vLinePen, new PointF[] { vStart, vMid, vEnd });
                }

                float      vIncline       = (vEnd.X - vStart.X) / (vEnd.Y - vStart.Y);
                PointF     vLabelPosition = new PointF(vStart.X - vIncline * vStart.Y, 0);
                RectangleF vLabelRect     = new RectangleF(vLabelPosition.X - vLabelRectSize.Width / 2F, vLabelPosition.Y, vLabelRectSize.Width, vLabelRectSize.Height);
                DrawLabelWGS(vGraphics, vLabelRect, vStartWGS.Easting);

                vLabelPosition = new PointF(vStart.X - vIncline * (vStart.Y - vGraphics.VisibleClipBounds.Height), vGraphics.VisibleClipBounds.Height - vLabelRectSize.Height);
                vLabelRect     = new RectangleF(vLabelPosition.X - vLabelRectSize.Width / 2F, vLabelPosition.Y, vLabelRectSize.Width, vLabelRectSize.Height);
                DrawLabelWGS(vGraphics, vLabelRect, vStartWGS.Easting);
            }
            for (double y = vStartNorthing; y <= vEndNorthing; y += 0.1)
            {
                var vStartWGS = new UtmPosition(0, vStartEasting, y);
                var vMidWGS   = new UtmPosition(0, vStartEasting + (vEndEasting - vStartEasting) / 2.0, y);
                var vEndWGS   = new UtmPosition(0, vEndEasting, y);

                var    vStartUtm33 = vStartWGS.TransformFromWGS(33);
                var    vMidUtm33   = vMidWGS.TransformFromWGS(33);
                var    vEndUtm33   = vEndWGS.TransformFromWGS(33);
                PointF vStart      = Utm33ToBitmapPosition(vStartUtm33, pOrigoUtm33, pZoom);
                PointF vMid        = Utm33ToBitmapPosition(vMidUtm33, pOrigoUtm33, pZoom);
                PointF vEnd        = Utm33ToBitmapPosition(vEndUtm33, pOrigoUtm33, pZoom);
                if (Math.Round(y, 1) % 1.0 == 0.0)
                {
                    vGraphics.DrawCurve(vSolidLinePen, new PointF[] { vStart, vMid, vEnd });
                }
                else
                {
                    vGraphics.DrawCurve(vLinePen, new PointF[] { vStart, vMid, vEnd });
                }

                float      vIncline       = (vEnd.Y - vStart.Y) / (vEnd.X - vStart.X);
                PointF     vLabelPosition = new PointF(0, vStart.Y - vIncline * vStart.X);
                RectangleF vLabelRect     = new RectangleF(vLabelPosition.X, vLabelPosition.Y - vLabelRectSize.Height / 2F, vLabelRectSize.Width, vLabelRectSize.Height);
                DrawLabelWGS(vGraphics, vLabelRect, vStartWGS.Northing);

                vLabelPosition = new PointF(vGraphics.VisibleClipBounds.Width - vLabelRectSize.Width, vStart.Y - vIncline * (vStart.X - vGraphics.VisibleClipBounds.Width));
                vLabelRect     = new RectangleF(vLabelPosition.X, vLabelPosition.Y - vLabelRectSize.Height / 2F, vLabelRectSize.Width, vLabelRectSize.Height);
                DrawLabelWGS(vGraphics, vLabelRect, vStartWGS.Northing);
            }
        }