SuperMap開發入門4——保存的坑


工作空間、地圖等的打開、保存、刪除是最基本的操作,可我居然卡在保存工作空間的問題上了。

功能需求

需求很簡單:打開工作空間中的某一地圖,縮放一下,保存地圖。(下次打開時,已經縮放到上次修改過的地方)

想得簡單

按超圖的模式,工作空間(Workspace)是通過其中的數據源集合對象( Datasources),地圖集合對象( Maps)來管理其下的數據源和地圖。工作空間中的地圖集合( Maps)中存儲的是地圖的配置信息,如地圖包含圖層的個數,圖層引用的數據集,地圖范圍,背景風格等。

那么我的操作是先保存Map,再保存Workspace,而Map沒有Save相關方法,順利找到了Workspace的Save,可能是Workspace保存時,會對所有的Map,Layout, Datasource等進行檢查保存吧,經過測試,然並沒有!

桌面測試

由於對桌面軟件還不熟悉,於是,在桌面軟件里來測試一下:

當縮放地圖后,關閉地圖窗口會彈出如下提示(菜單欄或右鍵並沒有找到保存地圖的按鍵,只能關閉地圖窗口時,才有此提示)

如果不關閉修改過的地圖窗口,直接保存工作空間,也會提示保存地圖。

還有自動保存功能。

很顯然,應該是我沒有找到地圖保存接口和方法。

官方幫助

官方的幫助文檔,可謂是唯一的"葯",可並不奏效。在Workspace類有一個示例代碼:

public void OpenWorkspace()
{
    // 打開工作空間,取出工作空間中名為“World”的數據集,查詢其描述信息
    Workspace workspace = new Workspace();
    WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
    workspaceConnectionInfo.Type=WorkspaceType.SXWU;
    String file = @"D:\world\world.sxwu";
    workspaceConnectionInfo.Server=file;
    workspace.Open(workspaceConnectionInfo);
    Datasource datasource = workspace.Datasources[0];
    DatasetVector dataset = (DatasetVector) datasource.Datasets["World"];
    Console.WriteLine("數據集的描述信息為:"+dataset.Description);

    // 保存工作空間
    workspace.Save();
    // 另存工作空間
    String file_saveAs = "D:/world/world_saveAs.sxwu";
    WorkspaceConnectionInfo workspaceConnectionInfo_saveAs = new WorkspaceConnectionInfo(file_saveAs);
    if (workspace.SaveAs(workspaceConnectionInfo_saveAs))
    {
        Console.WriteLine("另存工作空間成功!");
    }

    // 釋放資源
    dataset.Close();
    workspaceConnectionInfo.Dispose();
    workspaceConnectionInfo_saveAs.Dispose();
    workspace.Close();
    workspace.Dispose();
}

  

這里面的玄機真的很深,官方也是這樣保存的,難道與數據、環境有關?經過測試,然並沒有!

技術支持

無奈,請求官方的技術支持,終於告訴我保存地圖的奧秘:

string xml = map.ToXML();
mapctrl.Maps.SetMapXML(mapName, xml);
workspace.Save();

  

我可以理解地圖是由XML配置而成,展現時按規則解析即可,但這個保存方式符合哪國人的習慣?workspace的Save方法為什么不把前兩步包括進去,不包括為什么沒有任何官方資料這樣介紹?6C的保存接口已經廢棄;記住9D的保存方式,不要問為什么;希望以后的10X不要再進行大幅度的修改,或者修改了說一聲。


免責聲明!

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



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