MXD文档保存和地图浏览

MXD保存

 1         private void btnSaveMap_Click(object sender, EventArgs e)
 2         {
 3             try 
 4             {
 5                 string sMxdFileName = mainMapControl.DocumentFilename;//获取文件名
 6                 IMapDocument pMapDocument = new MapDocument();
 7                 if(sMxdFileName!=null&&mainMapControl.CheckMxFile(sMxdFileName))
 8                 {
 9                     if(pMapDocument.get_IsReadOnly(sMxdFileName))
10                     {
11                        MessageBox.Show("该文档制度","Warning");
12                        pMapDocument.Close();
13                        return;
14                     }
15                     else
16                     {
17                         SaveFileDialog pSaveFileDialog=new SaveFileDialog();
18                         pSaveFileDialog.Title="请选择保存路径";
19                         pSaveFileDialog.OverwritePrompt=true;//获取一个布尔类型值,用来提示当存在文件名时,SaveAs对话框是否显示警告
20                         pSaveFileDialog.Filter="Mxd文档(*.mxd)|*.mxd|ArcMap模板(*.mxt)|.mxt";
21                         pSaveFileDialog.RestoreDirectory=true;//获取一个布尔类型值,用来指示对话框再关闭前是否还原当前目录
22                         if(pSaveFileDialog.ShowDialog()==DialogResult.OK)
23                         {
24                             sMxdFileName =pSaveFileDialog.FileName;//将文件名赋值给sMxdfileName;
25                         }
26                         else
27                         {
28                             return;
29                         }
30                     }
31                     pMapDocument.New(sMxdFileName);//创建并打开一个以sMxdFileName为文件名的mxd文档
32                     pMapDocument.ReplaceContents(mainMapControl.Map as IMxdContents);//利用IMxdContents读取地图文档内容,并使之替换IMapDocment借口的实例对象
33                     pMapDocument.Save(true,true);
34                     pMapDocument.Close();
35                     MessageBox.Show("地图文档保存成功","提示");
36                 }
37             }
38             catch (Exception ex)
39             {
40                 MessageBox.Show(ex.Message);
41             }
42         }

MXD另存

 1  private void btnSaveAsMap_Click(object sender, EventArgs e)
 2         {
 3             try
 4             {
 5                 SaveFileDialog pSfd = new SaveFileDialog();
 6                 pSfd.Title = "另存为";
 7                 pSfd.OverwritePrompt = true;
 8                 pSfd.Filter = "Mxd文档(*.mxd)|*.mxd|ArcMap模板(*.mxt)|.mxt";
 9                 pSfd.RestoreDirectory = true;
10                 if (pSfd.ShowDialog() == DialogResult.OK)
11                 {
12                     string sFilePath = pSfd.FileName;
13                     IMapDocument pMapDoc = new MapDocumentClass();
14                     pMapDoc.New(sFilePath);////创建并打开一个以sFilePath为文件名的mxd文档
15                     pMapDoc.ReplaceContents(mainMapControl.Map as IMxdContents);//利用IMxdContents读取地图文档内容,并使之替换IMapDocment借口的实例对象
16                     pMapDoc.Save(true, true); ;
17                     pMapDoc.Close();
18                 }
19             }
20             catch (Exception ex)
21             {
22                 MessageBox.Show(ex.Message);
23             }
24         }

 总结:

文档的保存和另存用到的接口是ImapDocument,二者本质上没有区别,都需要在保存前判断文件是否存在即可。

 

放大和缩小固定尺寸

ps:利用包络线类(Envelope)和MapControl当前视图的Extent属性实现

Envelope对象的Expand方法中:为false时,变化以加法的形式进行,为true时,变化以乘法的形式进行。但中心不变。

 

1         private void btnZoomInStep_Click(object sender, EventArgs e)
2         {
3             IEnvelope pEnvelope;
4             pEnvelope = mainMapControl.Extent;//以当前视图大小为显示框
5             pEnvelope.Expand(0.5, 0.5, true);//这里设置放大为2倍,可以根据需要进行设置
6             mainMapControl.Extent = pEnvelope;
7             mainMapControl.ActiveView.Refresh();
8         }
 1         private void btnZoomOutStep_Click(object sender, EventArgs e)
 2         {
 3             IActiveView pActiveView=mainMapControl.ActiveView;
 4             IPoint centerPoint=new PointClass();
 5             centerPoint.PutCoords((pActiveView.Extent.XMin+pActiveView.Extent.XMax)/2,(pActiveView.Extent.YMin+pActiveView.Extent.YMax)/2);//获取当前视图的中心点
 6             IEnvelope pEvenlope=pActiveView.Extent;
 7             pEvenlope.CenterAt(centerPoint);
 8             ////expand()方法第三个参数:为false时,变化以加法的形式进行,为true时,变化以乘法的形式进行。但中心不变。////
 9             pEvenlope.Expand(1.5, 1.5, false);//与放大的区别在在于参数不同
10             pActiveView.Extent = pEvenlope;
11             mainMapControl.ActiveView.Refresh();
12         }

 

posted @ 2017-07-03 22:01  /*苍山飞雪*/  阅读(700)  评论(0编辑  收藏  举报