SuperMap 组件开发中Map对象怎么用? 如何从工作空间中获取Map对象?

     SuperMap.NET 桌面支持扩展开发,可以方便用户快速简洁的实现自己的功能。但在实际操作中总会存在一些意想不到的问题,小白将自己开发中遇到的问题做以总结。

(系列篇)

//====================================================================================

对于初次使用SuperMap iObject 组件做开发的同学们来说,对于Map对象的操作是一个避免不了的坑。

问题1:我怎样能拿到当前工作空间中的map 对象?没有方法可以返回map对象呀!!!!!

问题2:在无数次调试中自问自答: “代码都对着呀,Map对象有值呀,工作空间我也保存了呀,为什么结果不对呢???烦。。。。”

问题3:这些做底层开发的,脑子有xx吗?这么常用的接口都没有。。。。我不过想加载一个地膜模板而已!!!!


我们先看一下,帮助文档给的提示

对的,map 对象操作必须经过三个步骤:获取、编辑、保存 三个步骤,少一步都会出错。细心的同学会发现,supermap 对于map对象的管理其实是采用的是xml文件方式,这就解释了为什么你可以把地图模板导入导出了。

1)Map 对象的获取

第一种:MapControl.Map ;【能拿到MapControl 的前提下】

第二种:Workspace.Maps.GetMapXML();【常用方法,具体过程见实例】

第三种:Map.open() ;【可能比较慢】

2)Map 对象的编辑

第一种:通过Map 对象的属性进行设置,如::设置投影、比例尺、图层数据集、是否打开反走样、是否随图缩放等等

第二种:通过操作xml ;如:自动加载模板的时候,必须去设置图层绑定的数据源(不设置的话,系统会默认找图层模板中绑定的数据源名,如果找不到默认为空);可以将地图转为String的xml ,调用String.replace() 即可。

3)Map 对象的保存

大多数同学认为直接调用map.save() 即可,但没有这个方法呀!!最后默默调用了个map.close() 或者 workspace.save(); Map 对象的操作其实是一个Map 到xml ,再从xml 到map 的过程。及必须通过调用 Maps.setMapXML() 进行替换


实例演示 : 修改当前工作空间中第一幅地图的投影

// 从工作空间中获取map 对象

Map tempMap = new Map(pWorkspace); // 可以是当前的工作空间

tempMap.FromXML(pWorkspace.Maps.GetMapXML(0)); // 获取当前的地图的xml,并赋值给构建的临时地图

// 设置投影信息

tempMap.PrjCoordSys = pPrjCoorSys; // pPrjCoorSys 对象是要设置的投影对象

// 去工作空间中替换旧的地图

pWorkspace.Maps.SetMapXML(0, temMap.ToXML()); 

// 释放临时地图

tempMap.Dispose();

// 保存工作空间

pWorkspace.Save();

 

你可能感兴趣的:(supermap文章)