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 }