地图视图和版面视图同步是从开始AE编程就接触的问题!现在再来分析主要还是因为制图的需要,我希望将多个Data Frame放到一个版面视图中显示和打印。ArcGIS提共了“插入”——>“New Data Frame”功能。可以很好的解决这个问题,但是前期自己做的都是读取MapDocument中的一个地图对象,通过mapDoc.GetMap(0);来获取IMap,这真是对MapDocument的大材小用,MapDocument可以包括多个地图,可以包括版面中的多个制图信息如地图整饰的信息、TableFrame的信息等等。

  在AE中找了半天,没有找到DataFrame命名的类,郁闷了半天。MapFrame是不是我想要的呢?应该是。

  看到PageLayout中有个Replace(Maps pMaps)方法,但是没有找到Maps定义,这也很奇怪。不过终于还是在MapAndPageLayoutSynch这个帮助项目或者说示例程序中找到了Maps的类,运用Replace(Maps pMaps)这个方法可以实现在PageLayout中显示多个DataFrame。

  这都让我开始思考地图和版面同步的问题,

  思考1,Toc只和PagelayoutControl绑定了,没有和MapControl绑定,绑定就是指Setbuddy。

  证据(1):这个在ArcGIS中可以看出一点端倪,当ArcGIS初始化时Toc中显示的初始DataFrame都是以Layers命名,而当在AE中绑定到MapControl是显示的Map5,在与AxPagelayoutControl绑定石显示的是layers.

  证据(2):在MapControl中根本没有类似的可以添加多个Map的方法或者属性

  证据(3):在Toc中右击选择Data Frame的属性和在Pagelayout中右键单击地图框Frame选择属性弹出的属性对话框完全相同。

  基于以上考虑,需要改造地图同步类,激活地图视图或者版面视图时Buddy都设为AxPagelayoutControl,打开地图文档时,首先更新版面视图,在将激活中的Map传到MapControl。添加、删除图层都是针对当前激活的Map进行的,这方面内容后续更新。




作者:太一吾鱼水

宣言:在此记录自己学习过程中的心得体会,同时积累经验,不断提高自己!

声明:博客写的比较乱,主要是自己看的。如果能对别人有帮助当然更好,不喜勿喷!

文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。欢迎大家留言交流,转载请注明出处