ArcGIS Engine開發之地圖基本操作(2)


地圖數據的加載

1.加載地圖文檔

ArcGIS Engine支持加載多種類型的數據,有矢量數據的Coverage、Shapefile、dwg/dxf文件,柵格數據的BMP、GRID、控件數據庫等。很多情況下加載通過ArcGIS桌面制作的地圖文檔是最合適的(*.mxd格式)。

加載地圖的第三種方式:

  1. 使用IMAPControl接口的LoadMxfile方法加載。
  2. 通過IMAPDocument接口加載。
  3. 使用ArcGIS Engine中封裝好的類庫資源ControlsOpenDocCommandClass加載。

1.使用IMAPControl接口的LoadMxFile方法加載地圖文檔

思路如下:

  1. 通過.NET框架類提供的打開文件對話框選擇要打開的地圖文檔。
  2. 用IMapControl接口提供的CheckMxFile方法檢查是否為有效的地圖數據,若有效則調用IMapControl接口提供的LoadMxfile方法進行加載。
    1. CheckMxFile方法:該方法的作用就是確定選中的地圖文檔是否是一個可以記載到MapControl控件中的有效地圖文檔。它能驗證文件是否存在、文件的內部結構是否符合預期的存儲格式。
    2. LoadMxFile方法:該方法的作用是想MapControl控件中加載地圖文檔,地圖文檔可以用索引或文件名指示。函數原型為public void LoadMxFile(string mxPath,object mapNameOrIndex,object password).
    3. 參數的說明表:
      參數 描述
      mxPath 選擇,表示文件路徑的字符串表達式
      mapNameOrIndex 可選,表示地圖名或者索引號
      password 可選,表示密碼

 

 

 

 

 代碼:

 OpenFileDialog pOpenFileDialog = new OpenFileDialog();
            pOpenFileDialog.CheckFileExists = true;
            pOpenFileDialog.Title = "打開地圖文檔";
            pOpenFileDialog.Filter = "ArcMap文檔(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|.mxt|發布地圖文件(*.pmf)|*pmf|所有地圖格式(*.mxd;*.mxt;*.pmf)|*,mxd;*.mxt;*.pmf";
            pOpenFileDialog.Multiselect = false;//不允許多個文件同時選擇
            pOpenFileDialog.RestoreDirectory = true;//存儲打開的文件路徑
            if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                string pFileName = pOpenFileDialog.FileName;
                if (pFileName == "")
                {
                    return;
                }
                if (axMapControl1. CheckMxFile(pFileName))//檢查地圖文檔是否有效
                {
                   // ClearAllData();
                    axMapControl1. LoadMxFile(pFileName);
                }
                else
                {
                    MessageBox.Show(pFileName + "是無效的地圖文檔!", "信息提示");
                    return;
                }
            }

 2、通過IMapDocument接口加載地圖文檔

IMapDocument接口定義了操作和管理地圖文檔對象的方法和屬性。使用這個對象可以獲取,更新一個文檔的內容,設置文檔文件的屬性以及讀寫和保存一個文檔文件等。IMapDocument接口同時扮演者數據顯示和數據容器的雙重身份,可以通過ActivieView獲取Map數據視圖。通過FocusMap屬性獲取當期那正在使用的Map對象的數據容器身份。一個文檔可能有多個Map對象,但是在同一個時刻內,只能有一份Map處於使用狀態。

實例的代碼:

OpenFileDialog pOpenFileDialog = new OpenFileDialog();
            pOpenFileDialog.CheckFileExists = true;
            pOpenFileDialog.Title = "打開地圖文檔";
            pOpenFileDialog.Filter = "ArcMap文檔(*.mxd)|*.mxd;|ArcGIS模板(*.mxt)|*.mxd|發布地圖文件(*.pmf)|*.pmf|所有的地圖格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf";
            pOpenFileDialog.Multiselect = false;
            pOpenFileDialog.RestoreDirectory = true;
            if (pOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                string pFileName = pOpenFileDialog.FileName;
                if (pFilreName == "")
                {
                    return;
                }
                if (MapControl1.checkMxFiile(pFileName))//檢查地圖文檔有效性
                {
                    //將數據在載入pMapDocument並與Map控件關聯
                    //using Esri.ArcGIS .Carto 
                    IMapDocument pMapDocument = new MapDocument();
                    pMapDocument.Open(pFileName);
                    //獲取Map中激活的地圖文檔
                    mainMapControl.Map = pMapDocument.ActiveView.FocusMap;
                    mainMapControl.ActiveView.Refresh();
                }
                else
                {
                    MessageBox(pFileName + "是無效的地圖文檔!", "信息提示");
                    return;
                }
            }

3、使用ControlOpenDocCommandClass加載地圖

使用ArcGIS Engine中封裝好的類庫資源ControlsOpenDocCommandClass實現地圖文檔的加載,核心的代碼:

 ICommand command = new ControlsOpenDocCommandClass();
            command.OnCreate(mainMapControl.Object);
            command.OnClick();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM