阅读:2462回复:5
求助AO+VB.NET的一段程序
<P>在窗体上有mapcontrol和pagelayout两个控件,然后有一个command按钮,想实现打开一个文件,然后在两个空间中显示。不想用loadmxfile,因为实际上这样需要打开两次文件。如果同时对map和layout做修改后,无法同时存储。但下面的程序可以运行,不过mapcontrol中的map无法正常显示,同时,打开几个文件后就会出错。是怎么回事啊?</P>
<P>Imports ESRI.ArcGIS.Carto Public Class Form1 Inherits System.Windows.Forms.Form</P> <P> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pOpenFileDialog As New OpenFileDialog Dim m_pmapdoc As IMapDocument m_pmapdoc = New MapDocument pOpenFileDialog.Title = "Open Map Document" pOpenFileDialog.Filter = "Map Documents (*.mxd)|*.mxd" pOpenFileDialog.ShowDialog() 'Exit if no map document is selected Dim sFilePath As String sFilePath = pOpenFileDialog.FileName If sFilePath = "" Then Exit Sub m_pmapdoc.Open(sFilePath) AxPageLayoutControl1.PageLayout = m_pmapdoc.PageLayout AxMapControl1.Map = m_pmapdoc.Map(0) End Sub End Class </P> |
|
1楼#
发布于:2006-06-01 15:54
<img src="images/post/smile/dvbbs/em02.gif" />
|
|
2楼#
发布于:2006-06-03 11:45
<P><a href="http://gisempire.com/blog/user1/1/archives/2006/809.html" target="_blank" >http://gisempire.com/blog/user1/1/archives/2006/809.html</A></P>
<P>内容摘要 </P> <P>ArcGIS Engine提供了保存Mxd文件的类MapDoment。但在具体保存MXD</P> <P>文件过程中有下面几种情况:<BR>1 直接使用IMapDocument接口的Open方法来打开MXD文件,编辑过后进行保存。<BR>2 使用Engine中带的OpenDocument方法来打开MXD文件,然后编辑过之后要进行保存。<BR>3 使用自己写的添加数据的工具直接添加数据,也就是说一开始没有MXD文件,在编辑完之后需要把当前的地图保存为一个MXD文件。 过程描述 解决方法:</P> <P><BR>首先这三种情况都可以使用Engine中自带的SaveDoument的工具进行保存</P> <P><BR>1 这种情况比较简单,直接使用IMapDocument的save或者saveas的方法来进行保存就可以,可以在帮助中查到例子。</P> <P><BR>2 这种情况可使用下面的代码(c#语言)进行保存,<BR>IMxdContents pMxdC;<BR>pMxdC = axMapControl1.Map as IMxdContents ;<BR>IMapDocument pMapDocument = new MapDocumentClass();<BR>pMapDocument.Open (axMapControl1.DocumentFilename,"");<BR>IActiveView pActiveView = axMapControl1.Map as IActiveView ;<BR>pMapDocument.ReplaceContents (pMxdC);<BR>pMapDocument.SaveAs ("d:\aa2.mxd",true,true);</P> <P><BR>3 这种情况使用的代码(c#语言)稍微有点不同:<BR>IMxdContents pMxdC;<BR>pMxdC = axMapControl1.Map as IMxdContents ;<BR>IMapDocument pMapDocument = new MapDocumentClass ();<BR>pMapDocument.New ("d:\aa3.mxd");<BR>IActiveView pActiveView = axMapControl1.Map as IActiveView ;<BR>pMapDocument.ReplaceContents (pMxdC);<BR>pMapDocument.Save (true,true);</P> |
|
|
3楼#
发布于:2007-07-19 09:04
<P>我用了和楼主一样的方法现在是mapcontrol和pagelayout两个控件能同步,但是mapcontrol里面的地图显示范围像pagelayoutcontrol里面的page大小,却怎么也改变不了是怎么回事啊?</P>
|
|
4楼#
发布于:2007-07-19 13:22
使用IObjectCopy
|
|
5楼#
发布于:2007-07-19 15:02
楼上的,如果使用IObjectCopy是不是得在MapControl或者PageLayoutControl有任何动作的时候都得Copy一次给对方啊,我原来是这样做的觉得挺麻烦的。按楼主的办法其实感觉MapControl和PageLayoutControl联动效果挺好的,就是那个mapcontrol里的显示诓太小了。
|
|