rcads
路人甲
路人甲
  • 注册日期2004-05-19
  • 发帖数92
  • QQ
  • 铜币2526枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2248回复:5

求助AO+VB.NET的一段程序

楼主#
更多 发布于:2004-08-25 21:48
<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>
喜欢0 评分0
liioum
路人甲
路人甲
  • 注册日期2006-05-09
  • 发帖数6
  • QQ
  • 铜币136枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-06-01 15:54
<img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
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>
举报 回复(0) 喜欢(0)     评分
langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-07-19 09:04
<P>我用了和楼主一样的方法现在是mapcontrol和pagelayout两个控件能同步,但是mapcontrol里面的地图显示范围像pagelayoutcontrol里面的page大小,却怎么也改变不了是怎么回事啊?</P>
举报 回复(0) 喜欢(0)     评分
eHuaTian
路人甲
路人甲
  • 注册日期2004-11-12
  • 发帖数18
  • QQ
  • 铜币203枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-07-19 13:22
使用IObjectCopy
举报 回复(0) 喜欢(0)     评分
langyan8973
路人甲
路人甲
  • 注册日期2006-07-12
  • 发帖数90
  • QQ
  • 铜币456枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2007-07-19 15:02
楼上的,如果使用IObjectCopy是不是得在MapControl或者PageLayoutControl有任何动作的时候都得Copy一次给对方啊,我原来是这样做的觉得挺麻烦的。按楼主的办法其实感觉MapControl和PageLayoutControl联动效果挺好的,就是那个mapcontrol里的显示诓太小了。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部