地图视图和版面视图同步是从开始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进行的,这方面内容后续更新。