在對地圖文檔進行修改後,常常須要對其進行保存。地圖文檔的保存有直接保存和另存爲兩種方式。這裏的地圖文檔的修改指的是修改地圖文檔文件記錄信息,不是對空間數據的編輯。html
具體實現的思路:函數
1)地圖文檔的保存主要使用IMapDocument接口,首先使用IMxdContents接口讀取已打開的地圖文檔的內容,並使之替換IMapDocument接口的實例對象。post
2)保存時使用IMapDocument接口的Save方法,函數原型爲 public void Save (bool)bUserelativePaths,bool bCreateThumbail).url
參數 | 描述 |
bUseRelativepaths | 是否保存爲相對路徑(區別於決定路徑) |
bCreatThumnbail | 表示保存的地圖在ArcCatalog中查看時顯示縮略圖 |
代碼:spa
private void btnSaveData_ItemClick(object sender, ItemClickEventArgs e) { try { string sMxdFileName = mainMapControl.DocumentFilename; IMapDocument pMapDocument = new MapDocumentClass(); if (sMxdFileName != null && mainMapControl.CheckMxFile(sMxdFileName)) { if (pMapDocument.get_IsReadOnly(sMxdFileName)) { MessageBox.Show("地圖本當爲只讀,不能保存!"); pMapDocument.Close(); return; } } else { SaveFileDialog pSaveFileDialog = new System.Windows.Forms.SaveFileDialog(); pSaveFileDialog.Title = "請選擇保存路徑"; pSaveFileDialog.Filter = "ArcMap文檔(*.mxd)|*.mxd|ArcMap模板(*.mxt)|*.mxt"; pSaveFileDialog.OverwritePrompt = true; pSaveFileDialog.RestoreDirectory = true; if (pSaveFileDialog.ShowDialog() == DialogResult.OK) { sMxdFileName = pSaveFileDialog.FileName; } else { return; } } pMapDocument.New(sMxdFileName); pMapDocument.ReplaceContents(mainMapControl.Map as IMxdContents); pMapDocument.Save(pMapDocument.UsesRelativePaths, true);//保存爲絕對路徑 pMapDocument.Close(); MessageBox.Show("保存文檔成功"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
實現的思路:code
1)地圖文檔的另存爲與保存的方法相似,保存前須要判斷保存的路徑是否存在相同的文件。orm
2)另存爲須要使用IMapDocument接口的New方法建立新的路徑。htm
代碼:對象
private void btnSaveAs_ItemClick(object sender, ItemClickEventArgs e) { try { SaveFileDialog pSaveDialog = new System.Windows.Forms.SaveFileDialog(); pSaveDialog.Title = "另存爲"; pSaveDialog.OverwritePrompt = true;//當相同的文件存在是提示錯誤 pSaveDialog.Filter = "ArcMap文檔(*.mxd)|*.mxd|ArcMap模板(*.mxt)|*.mxt"; pSaveDialog.RestoreDirectory = true; if (pSaveDialog.ShowDialog() == DialogResult.OK) { string sFilePath = pSaveDialog.FileName; IMapDocument pMapDocument = new MapDocumentClass(); pMapDocument.New(sFilePath); pMapDocument.ReplaceContents(mainMapControl.Map as IMxdContents); pMapDocument.Save(true, true); pMapDocument.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }