zoukankan      html  css  js  c++  java
  • Mxd文档更新比例尺

    在AE中,更新Mxd文档的比例尺,比较特殊。写代码以记录,更新比例尺代码如图所示:

            [DllImport("User32.dll")]
            public static extern int GetDesktopWindow();
            /// <summary>
            /// 更新比例尺
            /// </summary>
            /// <param name="pNewMxdFile"></param>
            private void UpdataScale(string pNewMxdFile)
            {
                IMapDocument tMapDocument2 = new MapDocumentClass();
                tMapDocument2.Open(pNewMxdFile);
                IPageLayout pageLayout = tMapDocument2.PageLayout;
                IActiveView activeView2 = (IActiveView)pageLayout;
                IMap map = activeView2.FocusMap;
                activeView2.Activate(GetDesktopWindow());
                map.MapScale = _MapScale;
                activeView2.Refresh();
                tMapDocument2.Save(true, false);
                tMapDocument2.Close();
            }

    注意事项:在这个方法中,好像只能用于更新比例尺的操作。除此之外,如果做其他操作,就会造成莫名奇妙的错误。例如:先让Map缩放到一个特性的Envelope中后,再更新一个比例尺,就有问题。Mxd打开图后,就看不见数据了。相当奇怪,不知道其他的操作会造成什么影响。主要怀疑是函数GetDesktopWindow在作怪。
    所以一般把修改比例尺放到一个单独的函数中。如果Mxd中有多个Map,都要更新比例尺,则代码如下所示:

            private void UpdataScale(string pNewMxdFile)
            {
                IMapDocument mapDocument = new MapDocumentClass();
                mapDocument.Open(pNewMxdFile);
    
                IPageLayout pageLayout = mapDocument.PageLayout;
                IActiveView activeView = (IActiveView)pageLayout;
                IMap map = activeView.FocusMap;
    
                activeView = (IActiveView)mapDocument.PageLayout;
                activeView.Activate(GetDesktopWindow());
    
                map.MapScale = _MapScale;
                activeView.Refresh();
    
                pageLayout.FocusNextMapFrame();
                pageLayout = mapDocument.PageLayout;
                activeView = (IActiveView)pageLayout;
                map = activeView.FocusMap;
    
                activeView = (IActiveView)mapDocument.PageLayout;
                activeView.Activate(GetDesktopWindow());
    
                map.MapScale = _MapScale;
                activeView.Refresh();
    
                mapDocument.Save(true, true);
            }

    更新Mxd的范围代码如下:

            /// <summary>
            /// 更新缩放范围
            /// </summary>
            /// <param name="pNewMxdFile"></param>
            private void UpdataExtend(string pNewMxdFile,IEnvelope pEnvelope)
            {
                IMapDocument tMapDocument2 = new MapDocumentClass();
                tMapDocument2.Open(pNewMxdFile);
                IPageLayout pageLayout = tMapDocument2.PageLayout;
                IActiveView activeView2 = (IActiveView)pageLayout;
                IEnvelope pEnv = activeView2.Extent;
                pEnv = pEnvelope;
                //pEnv.CenterAt(point)   //指向中心点
                activeView2.Extent = pEnv;
                activeView2.Refresh();
                tMapDocument2.Save(true, false);
                tMapDocument2.Close();
            }
  • 相关阅读:
    vim可以打开,gvim无法打开
    Ubuntu用apt-get安装时依赖包无法安装
    如何用mm、mmm编译android中的模块
    装饰模式简单的代码
    FileWriter和FileReader简单使用
    TCP/IP、Http、Socket的区别--特别仔细
    surface实例-小球弹起事例
    android中图片的三级缓存cache策略(内存/文件/网络)
    接口回调
    大公司的Java面试题集
  • 原文地址:https://www.cnblogs.com/cglNet/p/6405432.html
Copyright © 2011-2022 走看看