• 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();
            }
  • 相关阅读:
    IDEA中项目编码格式设置
    font awesome 页面小图标
    ffmpeg无损MP4转TS 及bat批量脚本
    Mysql超百万数据的导入导出
    查询流水表中所有用户最后一条和第一条记录
    css样式实现网页全黑白
    jsp中二维码展示及异步轮询查询
    支付宝当面付对接
    微信native支付对接
    Java和python实现斐波那契数列的感触
  • 原文地址:https://www.cnblogs.com/cglNet/p/6405432.html
Copyright © 2020-2023  润新知