zoukankan      html  css  js  c++  java
  • 打开、保存地图

    打开地图:

     

    主要用到IMapDocument的Open()方法,此方法用于将数据导入IMapDocument的实例并与AxMapControl(主地图)控件实例相连;然后用IMapDocument的get_Map()方法将图层添加到地图控件中。

    保存地图:

    主要用到IMapDocument的Open()方法,必须的一步,用于将AxMapControl的实例的DocumentFileName传递给IMapDocument的实例,此处是我出问题严重的地方,幸好在志鸿师兄的指导下完成;此句的缺失会导致调用IMapDocument的get_IsReadOnly()方法时出现“完成该操作所需的数据不可用”的错误,其实是因为IMapDocument的实例没有赋值造成的,用断点调试可以查看。接下来调用IMapDocument的ReplaceContents()方法[AE帮助里是如此解释的:Replace the contents of the map document];下来就是调用IMapDocument的Save()或者SaveAs()方法,用于保存或者另存地图。

    地图另存为时还会出现一个问题,就是保存地图时出现同名的话,首次不出错,但第二次时会出现“发生锁定冲突”的错误。这个问题也请教了下师兄,改了多次boolean的值但问题还是会出现,不解。

    学习是一个过程,以后有更好的方法再说啦。

    代码如下:

    //打开地图

            IMapDocument pMapDoc;

            public void OpenMapDoc()

            {

                if (axMapControl1.LayerCount != 0)  //判断是否保存当前地图

                {

                    if(MessageBox.Show("是否保存当前地图?")==DialogResult .Yes )

                        SaveMapDoc ();

                    

                }

                try

                {

                    pMapDoc =new MapDocumentClass();

                    //打开对话框,选择地图文件

                    OpenFileDialog openFileDialog1 = new OpenFileDialog();

                    openFileDialog1.Title = "打开地图";

                    openFileDialog1.Filter = "地图文件(*.mxd)|*.mxd";

                    openFileDialog1.InitialDirectory = Application.StartupPath;

                    //openFileDialog1.ShowDialog();

                    if (openFileDialog1.ShowDialog() == DialogResult.OK)

                    {

                        string pFileName = openFileDialog1.FileName;

                        //将数据导入pMapDoc并与Map(主地图)控件相连

                        pMapDoc.Open(pFileName, "");

                        int i;

                        for (i = 0; i <= pMapDoc.MapCount - 1; i++)

                        {

                            axMapControl1.Map = pMapDoc.get_Map(i);//遍历每一个Map

                        }

                        axMapControl1.Refresh(); //刷新一下地图

                        //鹰眼地图更新

                        AddMapToMap2 addMap = new AddMapToMap2(axMapControl1, axMapControl2);

                        addMap.AddMxdToAxMapControl2();

                        axMapControl2.Extent = axMapControl2.FullExtent;

                        axMapControl2.Refresh();

                    }

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.ToString());

                }

     

            }

            //保存地图

            public void SaveMapDoc()

            {

                if (axMapControl1.DocumentFilename != null)

                {

                    if (axMapControl1.CheckMxFile(axMapControl1.DocumentFilename))

                    {

                        pMapDoc = new MapDocumentClass(); //实例化

                        pMapDoc.Open(axMapControl1.DocumentFilename, "");//必须的一步,用于将AxMapControl的实例的DocumentFileName传递给pMapDoc的

                        if (pMapDoc.get_IsReadOnly(pMapDoc.DocumentFilename))  //判断是否只读

                        {

                            MessageBox.Show("地图文档是只读的!");

                            pMapDoc.Close();

                            return;

                        }

                        pMapDoc.ReplaceContents((IMxdContents)axMapControl1.Map); //重置

                        pMapDoc.Save(pMapDoc.UsesRelativePaths, true);

                        pMapDoc.Close();

                        MessageBox.Show("地图图保存成功!");

                    }

                }

            }

            //地图另存为

            public void SaveMapDocAs()

            {

                pMapDoc = new MapDocumentClass();

                try

                {

                    SaveFileDialog saveFileDialog1 = new SaveFileDialog();

                    saveFileDialog1.Filter = "地图文档(*.mxd)|*.mxd";

                    saveFileDialog1.Title = "地图另存为";

                    saveFileDialog1.ShowDialog(); //打开保存对话框

                    //if (saveFileDialog1.ShowDialog() == DialogResult.OK) //用此句会出现“对COM组件的调用返回错误”

                    {

                        string sFileName = saveFileDialog1.FileName;

                        if (sFileName == "")  //|| pMapDoc.get_IsReadOnly(pMapDoc.DocumentFilename)==true )

                        {

                            return;

                        }

                        if (sFileName == axMapControl1.DocumentFilename)//此处开始用的是pMapDoc.DocumentFilename产生数据不可用的错误

                        {

                            SaveMapDoc(); //保存地图

                        }

                        else

                        {

                            pMapDoc.Open(axMapControl1.DocumentFilename, ""); //此句会出现“对COM组件的调用返回错误”

                            pMapDoc.ReplaceContents((IMxdContents)axMapControl1.Map); //重置

                            pMapDoc.SaveAs(sFileName, true  , false );//地图另存为 连续二次同名保存时,第二次会出“发生锁定的异常”true和false多种组合都是

                            pMapDoc.Open(sFileName, ""); //打开地图

                            MessageBox.Show("地图保存成功!");

                        }

                    }

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.ToString());

                }

            }

  • 相关阅读:
    丁夏畦同志去世
    [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.7
    [数分提高]2014-2015-2第10教学周第2次课 (2015-05-07)
    [数分提高]2014-2015-2第10教学周第1次课 (2015-05-04)
    [数分提高]2014-2015-2第9教学周第2次课 (2015-04-30)
    [数分提高]2014-2015-2第9教学周第1次课 (2015-04-28)
    [数分提高]2014-2015-2第8教学周第2次课 (2015-04-23)
    2014年江西省青年科学家名单
    2014年“江西青年五四奖章”名单
    [数学杂志]AML
  • 原文地址:https://www.cnblogs.com/sdustyuleyi/p/2674653.html
Copyright © 2011-2022 走看看