绘制标准比例尺分幅

回到首页  往前  往后

该范例程序会演示如何绘制国家基本比例尺地形图分幅网格和图幅编号

注意1:太乐地图.NET控件 名称统一命名为:MapControl

注意2:该范例程序会调用国家基本比例尺地形图分幅生成接口:SheetLineUtil.GetChinaSheetLineTilesByBounds

注意3:该范例程序涉及到1个地图事件:DrawRectangle

范例运行后界面如下图所示:

绘制标准比例尺分幅

源码  

 

      /// <summary>

      /// 勾选:显示国家基本比例尺地形图分幅

      /// </summary>

      /// <param name="sender"></param>

      /// <param name="e"></param>

      private void checkBox1_CheckedChanged(object sender, EventArgs e)

       {

          if (checkBox1.Checked)

           {

               comboBox4.Items.Clear();

              // 支持如下比例尺

               comboBox4.Items.Add("1:100万");

               comboBox4.Items.Add("1:50万");

               comboBox4.Items.Add("1:25万");

               comboBox4.Items.Add("1:10万");

               comboBox4.Items.Add("1:5万");

               comboBox4.Items.Add("1:2.5万");

               comboBox4.Items.Add("1:1万");

           }

       }

 

      private void comboBox4_SelectedIndexChanged(object sender, EventArgs e)

       {

           GenerageSheetLinesByScaleAndDrawIt(comboBox4.SelectedItem.ToString(), checkBox2.Checked);

       }

 

      private void checkBox2_CheckedChanged(object sender, EventArgs e)

       {

           GenerageSheetLinesByScaleAndDrawIt(comboBox4.SelectedItem.ToString(), checkBox2.Checked);

       }

 

      /// <summary>

      /// 根据选择的比例尺生成地形分幅并进行绘制

      /// </summary>

      /// <param name="scaleStr"></param>

      /// <param name="dispName"></param>

      private void GenerageSheetLinesByScaleAndDrawIt(String scaleStr, bool dispName = true)

       {

           _graphicLayer.Clear();

 

          int scale;

          switch (scaleStr)

           {

              case "1:100万":

                   scale = 100;

                  break;

              case "1:50万":

                   scale = 50;

                  break;

              case "1:25万":

                   scale = 25;

                  break;

              case "1:10万":

                   scale = 10;

                  break;

              case "1:5万":

                   scale = 5;

                  break;

              case "1:2.5万":

                   scale = 3;

                  break;

              case "1:1万":

                   scale = 1;

                  break;

              default:

                   scale = 100;

                  break;

           }

 

          MapRoute polygon = null;

          foreach (var m in _graphicLayer.Polygons)

           {

               polygon = m;

              break;

           }

 

          var sheetLineTiles = new List<SheetLineTile>();

          // 根据比例尺和当前地图视野生成地形分幅

          var rect = MapControl.ViewArea;

           sheetLineTiles = SheetLineUtil.GetChinaSheetLineTilesByBounds(scale, rect);

          //// 也可根据比例尺和绘制的图形生成地形分幅(polygon为绘制的图形)

          //sheetLineTiles = SheetLineUtil.GetChinaSheetLineTilesByPolygon(scale, polygon);

 

          // 绘制图幅

          foreach (var tile in sheetLineTiles)

           {

              var finalRect = new AZMapRectangle(tile.TopLeft, tile.RightBottom)

               {

                   IsHitTestVisible = true,

                   Name = tile.Name,

                   Stroke = new Pen(Color.FromArgb(200, Color.Red)) // 边线颜色

                   {

                       Width = 1, // 粗细

                       DashStyle = DashStyle.Solid // 样式(这里使用 实心线 的样式)

                   },

                   Fill = new SolidBrush(Color.FromArgb(20, Color.Red)), // 填充色

               };

 

              // 显示图幅编号

              if (dispName)

               {

                   finalRect.Title = tile.Name;

                   finalRect.TitleColor = Brushes.Blue;

                   finalRect.TitleFont = new Font("Segoe UI", 14, FontStyle.Bold, GraphicsUnit.Pixel);

               }

               _graphicLayer.Polygons.Add(finalRect);

           }

       }