打开地图:

 

主要用到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());

            }

        }