예제 #1
0
        /// <summary>
        /// 根据地图出图配置,设置地图文档并导出地图
        /// </summary>
        /// <param name="cfg"></param>
        /// <param name="mapDoc"></param>
        protected virtual void ExportMapMainOperation(MapExportInfo cfg, IMapDocument mapDoc)
        {
            //设置数据源、定义查询、比例尺、显示范围
            var graphicsContainer = mapDoc.PageLayout as IGraphicsContainer;

            foreach (var mapFrameInfo in cfg.MapFrames)
            {
                SetMapFrame(graphicsContainer, mapFrameInfo);
            }

            //设置元素的值
            foreach (var elementInfo in cfg.Elements)
            {
                var elements = graphicsContainer.GetElementsByKeyword(elementInfo.Name);
                SetElementsValue(elements, elementInfo.ValueType, elementInfo.Value);
            }

            //保存地图,导出图片
            mapDoc.Save();
            foreach (var exportPicture in cfg.ExportPictures)
            {
                var outputPath = Path.Combine(cfg.ExportDirectory, cfg.ExportFileName + exportPicture.PicExtension);
                mapDoc.PageLayout.ExportToPicture(outputPath, exportPicture.Dpi);
            }

            //关闭文档,释放资源
            mapDoc.Close();
            Marshal.ReleaseComObject(mapDoc);
        }
예제 #2
0
        /// <summary>
        /// 根据地图出图配置,设置地图文档并出图
        /// </summary>
        /// <param name="cfg">对地图进行各项配置和出图的信息</param>
        /// <param name="mapDoc">要设置并出图的地图文档,若值为null则根据<see cref="cfg"/>参数指定的信息
        /// 复制地图模板到生成目录或临时目录,打开复制后的地图文档进行设置和出图</param>
        public virtual void ExportMap(MapExportInfo cfg, IMapDocument mapDoc = null)
        {
            //是否在完成出图后关闭地图文档,地图文档来自外部传参(mapDoc != null)则不关闭,来自内部打开则应关闭
            bool closeMapDoc = mapDoc == null;

            try
            {
                if (!ValidateConfig(cfg, out var message))
                {
                    throw new Exception(message);
                }
                if (mapDoc == null)
                {
                    mapDoc = GetMapDocument(cfg);
                }
                ExportMapMainOperation(cfg, mapDoc);
            }
            catch (Exception ex)
            {
                if (closeMapDoc && mapDoc != null)
                {
                    mapDoc.Close();
                    Marshal.ReleaseComObject(mapDoc);
                }
                throw ex;
            }
        }
예제 #3
0
        /// <summary>
        /// 根据配置复制地图模板到生成目录或临时目录,打开复制后的地图文档
        /// </summary>
        /// <param name="cfg">导出地图配置</param>
        /// <returns></returns>
        protected virtual IMapDocument GetMapDocument(MapExportInfo cfg)
        {
            var newMxdPath = GetMxdPath(cfg);
            var mapDoc     = new MapDocumentClass();

            mapDoc.Open(newMxdPath);
            return(mapDoc);
        }
예제 #4
0
        /// <summary>
        /// 验证出图配置是否正确
        /// </summary>
        /// <param name="cfg">导出地图配置</param>
        /// <param name="message">验证信息</param>
        /// <returns></returns>
        protected virtual bool ValidateConfig(MapExportInfo cfg, out string message)
        {
            var sbMsg = new StringBuilder();

            if (!Directory.Exists(cfg.ExportDirectory))
            {
                sbMsg.AppendLine($"输出目录{cfg.ExportDirectory}不存在,请先选定或创建正确的输出目录!");
            }

            return(string.IsNullOrWhiteSpace(message = sbMsg.ToString()));
        }
예제 #5
0
        /// <summary>
        /// 根据配置复制地图模板到生成目录或临时目录,返回复制后的地图文档路径
        /// </summary>
        /// <param name="cfg">导出地图配置</param>
        /// <returns></returns>
        protected virtual string GetMxdPath(MapExportInfo cfg)
        {
            //若配置要求导出地图文档,则将地图模板复制到生成目录;否则复制到程序目录的临时文件夹下
            string mxdPath;

            if (cfg.IsExportMxd)
            {
                mxdPath = Path.Combine(cfg.ExportDirectory, cfg.ExportFileName + ".mxd");
                File.Copy(cfg.TemplateMxdPath, mxdPath, cfg.Overwrite);
            }
            else
            {
                var tmpDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tmp");
                Directory.CreateDirectory(tmpDir);
                mxdPath = Path.Combine(tmpDir, cfg.ExportFileName + ".mxd");
                File.Copy(cfg.TemplateMxdPath, mxdPath, true);
            }
            return(mxdPath);
        }