MapObjects2.2 在C#中的应用(基本地图功能)

MapObjects2.2 在C#中的应用(基本地图功能)

关键字:MapObjects 2.2 C#

 

仅仅实现了地图的放大、缩小、漫游、全图、距离、面积等功能。

 

/*

 * 杨雨田 blue_bat@126.com

 * 2004年7月27日

 */

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

 

namespace Artemis.IVS.Test

{

     /// <summary>

     /// 处理实例

     /// </summary>

     public class FrmMain : System.Windows.Forms.Form

     {

          private AxMapObjects2.AxMap mapMain;

          private System.Windows.Forms.MainMenu mainMenu1;

          private System.Windows.Forms.MenuItem miZoomIn;

          private System.Windows.Forms.MenuItem miZoomOut;

          private System.Windows.Forms.MenuItem miPan;

          private System.Windows.Forms.MenuItem miFullView;

          private int CurOperate = 0;

          private System.Windows.Forms.MenuItem miSelectByPoint;

          private System.Windows.Forms.MenuItem miDistance;

          private System.Windows.Forms.MenuItem miArea;

         /// <summary>

         /// 必需的设计器变量。

         /// </summary>

          private System.ComponentModel.Container components = null;

 

         public FrmMain()

         {

              //

              // Windows 窗体设计器支持所必需的

              //

              InitializeComponent();

         }

 

         /// <summary>

         /// 清理所有正在使用的资源。

         /// </summary>

          protected override void Dispose( bool disposing )

         {

              if( disposing )

              {

                   if (components != null)

                   {

                        components.Dispose();

                   }

              }

              base.Dispose( disposing );

         }

 

          #region Windows 窗体设计器生成的代码

         /// <summary>

         /// 设计器支持所需的方法 - 不要使用代码编辑器修改

         /// 此方法的内容。

          /// </summary>

          private void InitializeComponent()

         {

              System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FrmMain));

              this.mapMain = new AxMapObjects2.AxMap();

              this.mainMenu1 = new System.Windows.Forms.MainMenu();

              this.miZoomIn = new System.Windows.Forms.MenuItem();

              this.miZoomOut = new System.Windows.Forms.MenuItem();

              this.miPan = new System.Windows.Forms.MenuItem();

              this.miFullView = new System.Windows.Forms.MenuItem();

              this.miSelectByPoint = new System.Windows.Forms.MenuItem();

              this.miDistance = new System.Windows.Forms.MenuItem();

              this.miArea = new System.Windows.Forms.MenuItem();

              ((System.ComponentModel.ISupportInitialize)(this.mapMain)).BeginInit();

              this.SuspendLayout();

              //

              // mapMain

              //

              this.mapMain.Dock = System.Windows.Forms.DockStyle.Fill;

              this.mapMain.Location = new System.Drawing.Point(0, 0);

              this.mapMain.Name = "mapMain";

              this.mapMain.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("mapMain.OcxState")));

              this.mapMain.Size = new System.Drawing.Size(592, 401);

              this.mapMain.TabIndex = 0;

              this.mapMain.MouseDownEvent += new AxMapObjects2._DMapEvents_MouseDownEventHandler(this.mapMain_MouseDownEvent);

              //

              // mainMenu1

              //

              this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

                                                                                                    this.miZoomIn,

                                                                                                    this.miZoomOut,

                                                                                                    this.miPan,

                                                                                                    this.miFullView,

                                                                                                    this.miSelectByPoint,

                                                                                                    this.miDistance,

                                                                                                    this.miArea});

              //

              // miZoomIn

              //

              this.miZoomIn.Index = 0;

              this.miZoomIn.Text = "放大";

              this.miZoomIn.Click += new System.EventHandler(this.miZoomIn_Click);

              //

              // miZoomOut

              //

              this.miZoomOut.Index = 1;

              this.miZoomOut.Text = "缩小";

              this.miZoomOut.Click += new System.EventHandler(this.miZoomOut_Click);

              //

              // miPan

              //

              this.miPan.Index = 2;

              this.miPan.Text = "漫游";

              this.miPan.Click += new System.EventHandler(this.miPan_Click);

              //

              // miFullView

              //

              this.miFullView.Index = 3;

              this.miFullView.Text = "全图";

              this.miFullView.Click += new System.EventHandler(this.miFullView_Click);

              //

              // miSelectByPoint

              //

              this.miSelectByPoint.Index = 4;

              this.miSelectByPoint.Text = "点选";

              this.miSelectByPoint.Click += new System.EventHandler(this.miSelectByPoint_Click);

              //

              // miDistance

              //

              this.miDistance.Index = 5;

              this.miDistance.Text = "距离";

              this.miDistance.Click += new System.EventHandler(this.miDistance_Click);

              //

              // miArea

              //

              this.miArea.Index = 6;

              this.miArea.Text = "面积";

              this.miArea.Click += new System.EventHandler(this.miArea_Click);

              //

              // FrmMain

              //

              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

              this.ClientSize = new System.Drawing.Size(592, 401);

              this.Controls.Add(this.mapMain);

              this.Menu = this.mainMenu1;

              this.Name = "FrmMain";

              this.Text = "Artemis.IVS.Test";

              this.Load += new System.EventHandler(this.FrmMain_Load);

              ((System.ComponentModel.ISupportInitialize)(this.mapMain)).EndInit();

              this.ResumeLayout(false);

 

         }

          #endregion

 

         /// <summary>

         /// 应用程序的主入口点。

         /// </summary>

          [STAThread]

         static void Main()

         {

              Application.Run(new FrmMain());

         }

        

         /// <summary>

         /// 全图

         /// </summary>

          private void miFullView_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 4;

              mapMain.Extent = mapMain.FullExtent;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moDefault;

         }

        

         /// <summary>

         /// 漫游

         /// </summary>

          private void miPan_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 3;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moPan;

         }

 

         /// <summary>

         /// 缩小

         /// </summary>

          private void miZoomOut_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 2;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moZoomOut;

         }

 

         /// <summary>

         /// 放大

         /// </summary>

          private void miZoomIn_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 1;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moZoomIn;

         }

 

         /// <summary>

         /// 放大缩小等的处理过程

         /// </summary>

          private void mapMain_MouseDownEvent(object sender, AxMapObjects2._DMapEvents_MouseDownEvent e)

         {

              MapObjects2.Rectangle rect;

              MapObjects2.Point pt = mapMain.ToMapPoint(e.x,e.y);

 

              if(e.button == 2) this.CurOperate = 0;//右键点击取消

 

              switch(this.CurOperate)

              {

                   case 1://放大

                   {

                       rect = mapMain.TrackRectangle();

                      

                        if(rect == null|| (rect.Width < 0.00005) || (rect.Height < 0.00005))

                       {                          

                            rect = mapMain.Extent;

                            rect.ScaleRectangle(0.6667);

                            rect.Offset(-(rect.Center.X - pt.X),-(rect.Center.Y - pt.Y));

                       }

                        mapMain.Extent = rect;

                       break;

                   }

                   case 2://缩小

                   {

                       rect = mapMain.TrackRectangle();

                      

                       if ((null == rect) || (rect.Width < 0.00005) || (rect.Height < 0.00005))

                       {

                            rect = mapMain.Extent;

                            rect.ScaleRectangle(1.5);

                            rect.Offset(-(rect.Center.X - pt.X),-(rect.Center.Y - pt.Y));

                       }

                       else

                       {   

                            double dRate = mapMain.Extent.Width / rect.Width * 10; 

                            rect.ScaleRectangle(dRate);

                       }

 

                        mapMain.Extent = rect;

                       break;

                   }

                   case 3://漫游

                   {

                        mapMain.Pan();

                       break;

                   }

                   case 5://点选

                   {

                      

                       break;

                   }

                   case 6://距离

                   {

                        MapObjects2.Points  pts;

                       pts = (MapObjects2.Points)mapMain.TrackLine().Parts.Item(0);

                       double dDistance = 0;

                        for(int i=0;i<pts.Count-1;i++)

                       {

                            dDistance += Math.Sqrt(pts.Item(i).X*pts.Item(i).X + pts.Item(i).Y*pts.Item(i).Y);

                       }

                        this.Text = mapMain.ToMapDistance((float)dDistance).ToString();

                       break;

                   }

                   case 7://面积

                   {

                        MapObjects2.Polygon ply = mapMain.TrackPolygon();

                       double dArea = ply.Area;

                        this.Text = mapMain.ToMapDistance((float)dArea).ToString();

                       break;

                   }

                   default://箭头

                   {

                        mapMain.MousePointer = MapObjects2.MousePointerConstants.moDefault;

                       break;

                   }

              }

         }

 

         /// <summary>

         /// 点选

         /// </summary>

          private void miSelectByPoint_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 5;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moArrowQuestion;

         }

 

         /// <summary>

         /// 距离

         /// </summary>

          private void miDistance_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 6;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moCross;

         }

 

         /// <summary>

         /// 面积

         /// </summary>

          private void miArea_Click(object sender, System.EventArgs e)

         {

              this.CurOperate = 7;

              mapMain.MousePointer = MapObjects2.MousePointerConstants.moCross;

         }

     }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blue_bat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值