• 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:worldworld.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不要再进行大幅度的修改,或者修改了说一声。

  • 相关阅读:
    js中 var let const 区别
    img标签src引用网络图片,响应403的解决方法
    统计开发push数据
    gp日志查看
    node之path模块
    算法相关问题
    常用的 curl 发送 http 请求 命令
    Python与Go列表切片越界的对比
    golang时间与时区相关操作总结
    go语言结构体转map的方法
  • 原文地址:https://www.cnblogs.com/liweis/p/9415117.html
Copyright © 2020-2023  润新知