二、Arcgis engine-MapControl控件(中)

保存地图


            if(m_MapDocument.get_IsReadOnly(m_MapDocument.DocumentFilename)==true)//判断地图属性是否为可读
            {
                MessageBox.Show("This map document is read only!");return;
            }
            m_MapDocument.Save(m_MapDocument.UsesRelativePaths,true);//保存地图为当前的地址
            MessageBox.Show("Changes saved successfully");

其中m_MapDocument的定义见上篇博文,此处地图是通过IMapDocument接口打开的。

另存为地图

       	    saveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Title = "Save Map Document As";
            saveFileDialog1.Filter = "Map Document(*.mxd)|*.mxd";
            saveFileDialog1.ShowDialog();
            string sFilePath = saveFileDialog1.FileName;
            if (sFilePath == "")
            { return; }
            if(sFilePath==m_MapDocument.DocumentFilename)
            {
                SaveDocument();//保存改变至当前文档
            }
            else
            {
                m_MapDocument.SaveAs(sFilePath, true, true);//另存为
            }

SaveDocument()方法同上保存地图。

新建地图文档

	    MapDocument pMapDOcument = new MapDocumentClass();
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Title = "Creat New Map Document ";
            openFileDialog1.Filter = "Map Document(*.mxd)|*.mxd";
            openFileDialog1.ShowDialog();
            string sFilePath = openFileDialog1.FileName;
            pMapDOcument.New(sFilePath);
            pMapDOcument.Open(sFilePath, "");
            axMapControl1.Map = pMapDOcument.get_Map(0);

MapControl控件还可以使用AddLayerFromFile方法添加一个图层文件,使用AddshapeFile添加一个Shape文件;使用AddLayer快速添加图层、MoveLayerTo改变一个图层的位置等。

鼠标与控件的交互

使用鼠标拖曳确定地图显示的范围(拉框放大)

写在axMapControl1的MouseDown事件下

	    axMapControl1.Extent = axMapControl1.TrackRectangle();//改变地图控件显示范围为当前拖曳的区域
            axMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, null, null);//刷新地图

地图平移

同样写在axMapControl1的MouseDown事件下

	       axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPagePanning;
                axMapControl1.Pan();

绘制图形

MapControl提供了DrawShape和DrawText两种绘制方法在控件上进行绘制,但这两种方法绘制的图形都是缓存,而不能真正保存,一旦窗口重绘,这些图形就会消失。
首先在axMapControl的OnMouseDown事件下产生一个多边形,再使用DrawShape方法将该对象显示出来

		IGeometry PGeom = axMapControl1.TrackPolygon();//产生多边形并绘制
                DrawMapShape(PGeom);
               // axMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, null, null);//刷新地图

DrawMapShape方法:

	    IRgbColor pColor = new RgbColorClass();//设置多边形的颜色
            pColor.Red = 200;pColor.Green = 115;pColor.Blue = 60;
            ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();//新建一个绘制图形的填充符号
            simpleFillSymbol.Color = pColor;
            object osimpleFillSymbol = simpleFillSymbol;
            axMapControl1.DrawShape(pGeom, ref osimpleFillSymbol);

tips

  1. 在开发中会遇到很多与axMapControl交互的情况,一般需要写在OnMouseDown事件下,可以用枚举来区分不同需求下OnMouseDown的反应。
  2. axMapControl刷新有多种选项,可根据需求选择不同的刷新方式。
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值