工作空间、地图等的打开、保存、删除是最基本的操作,可我居然卡在保存工作空间的问题上了。

功能需求

需求很简单:打开工作空间中的某一地图,缩放一下,保存地图。(下次打开时,已经缩放到上次修改过的地方)

想得简单

按超图的模式,工作空间(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不要再进行大幅度的修改,或者修改了说一声。

SuperMap开发入门4——保存的坑的更多相关文章

  1. SuperMap开发入门2——环境部署

    由于超图的相关资源比较少,可参考官方提供的<SuperMap iDesktop 9D安装指南>和<SuperMap iObjects .NET 9D安装指南>完成应用软件和开发 ...

  2. SuperMap开发入门1——资源下载

    前言(废话) 由于项目需要,我们将被改用超图(SuperMap)平台进行GIS开发.记忆中,我还是在学生时代使用过超图软件5.0版本,安装包只有50M,这也是超图与学校有合作关系的缘故. 在以后的学习 ...

  3. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  4. 小程序框架WePY 从入门到放弃踩坑合集

    小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...

  5. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  6. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  7. 报表引擎API开发入门— EJB程序数据源

    我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用EJB做为数据源.FR通过定义程序数据集使用EJB的相关类获取到EJB数据 ...

  8. JavaWeb学习总结(一)——JavaWeb开发入门

    http://www.cnblogs.com/xdp-gacl/p/3729033.html 只为成功找方法,不为失败找借口! JavaWeb学习总结(一)--JavaWeb开发入门 一.基本概念 1 ...

  9. 基于Nodejs生态圈的TypeScript+React开发入门教程

    基于Nodejs生态圈的TypeScript+React开发入门教程   概述 本教程旨在为基于Nodejs npm生态圈的前端程序开发提供入门讲解. Nodejs是什么 Nodejs是一个高性能Ja ...

随机推荐

  1. [DLX反复覆盖] hdu 3656 Fire station

    题意: N个点.再点上建M个消防站. 问消防站到每一个点的最大距离的最小是多少. 思路: DLX直接二分推断TLE了. 这时候一个非常巧妙的思路 我们求的距离一定是两个点之间的距离 因此我们把距离都求 ...

  2. ISO 8601: Delphi way to convert XML date and time to TDateTime and back (via: Stack Overflow)

    Recently I needed a way of concerting back and forth ISO 8601 DateTime values used in XML from Delph ...

  3. 如何在 Xcode 中修改应用的名字

    找到 TARGETS 中的 Build Setting ,下拉找到 Packaging ,修改 Product Name 即可.

  4. SpringBoot下的Job定时任务

    编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务使用的非常方便,下面总结一下如何使用: 一,@schedul ...

  5. 删除list中的特定元素

    对于动态删除list中的特定元素,一般用linkedList,删除时有以下两种方法. 1. 循环遍历,找到要删除的元素后删除并且减少list长度.如果不减少list长度,那么就仅仅删除了元素,但没改变 ...

  6. JAVA中如何取得一个变量的类型

    class Test {public static void main(String[] args) {int i=1;System.out.println(getType(i));}public s ...

  7. 局部响应归一化(Local Response Normalization,LRN)

     版权声明:本文为博主原创文章,欢迎转载,注明地址. https://blog.csdn.net/program_developer/article/details/79430119 一.LRN技术介 ...

  8. (使用STL中的数据结构进行编程7.3.15)UVA 630 Anagrams (II)(求一个单词在字典中出现的次数)

    /* * UVA_630.cpp * * Created on: 2013年11月4日 * Author: Administrator */ #include <iostream> #in ...

  9. 再看copy_on_write缩小临界区的例子

    本例子是模拟的读者写者问题,采用shared_ptr+写时拷贝实现,其中我觉得一个比较值得注意的地方是考虑到对象可能在临界区析构而将析构移除临界区,这对于多线程来说要多看多思. #include< ...

  10. sharepoint 2010 自定义页面布局

    在sharepoint开发中经常遇到 自定义网站栏.内容类型,页面布局和模板页也会遇到,遇到机会就相对比较小. 首先新建一个空的sharepoint项目: 1)创建网站兰: 修改SiteColumns ...