基于AE+C#读取文件及图层输出

  软件是由数据和程序组成,既然做反演系统,那么如何高效且合理的读取数据是一个至关重要的问题。在AE+C#中读取地图数据的代码十分简单,因此此篇分享还加上了将地图文件输出的代码。

  还是老规矩,先把相关的引用放上来

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;

  

  打开文件的内容仅包括矢量和栅格地图文件,mxd文档不知道是什么问题并不能读取,如有实现者,望不吝赐教。其代码如下:

            //打开选择文件对话框用于选取图形文件
            string fullFilePath;  //存储打开文件的全路径
            //设置OpenFileDialog的属性,使其能打开多种类型文件
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Multiselect = true;
            openFile.Filter = "shape文件(*.shp)|*.shp";//设置打开文件对话框的文件过滤器属性
            openFile.Filter += "|栅格数据(*.jpg,*.bmp,*.tiff)|*.jpg;*.bmp;*.tiff;*.tif;*.img";
            openFile.Title = "打开文件";
            if (openFile.ShowDialog() == DialogResult.OK)//打开文件对话框,并判断是否成功打开,若是,执行以下代码块
            {
                fullFilePath = openFile.FileName;
                //获得文件路径
                int index = fullFilePath.LastIndexOf("\\");
                string filePath = fullFilePath.Substring(0, index);
                //获得文件名称
                string fileName = fullFilePath.Substring(index + 1);
                //加载shape文件
                if (openFile.FilterIndex == 1)
                {
                    //打开工作空间工厂
                    IWorkspaceFactory workspcFac = new ShapefileWorkspaceFactory();
                    IFeatureWorkspace featureWorkspc;
                    IFeatureLayer featureLay = new FeatureLayerClass();
                    //打开路径
                    featureWorkspc = workspcFac.OpenFromFile(filePath, 0) as IFeatureWorkspace;
                    //打开类要素
                    featureLay.FeatureClass = featureWorkspc.OpenFeatureClass(fileName);
                    featureLay.Name = fileName;//加载到axMapControl中图层的名字,fileName是带有文件后缀字符串,若看着实在不爽,用subString()方法裁剪一下,用法参考上文
                    //添加图层
                    axMapControl1.AddLayer(featureLay);
                    axMapControl1.Refresh();
                }
                //加载栅格图像(代码与加载shp文件代码类似,不做详细注释)
                else if (openFile.FilterIndex == 2)
                {
                    IWorkspaceFactory workspcFac = new RasterWorkspaceFactory();
                    IRasterWorkspace rasterWorkspc;
                    IRasterDataset rasterDatset = new RasterDatasetClass();
                    IRasterLayer rasterLay = new RasterLayerClass();
                    rasterWorkspc = workspcFac.OpenFromFile(filePath, 0) as IRasterWorkspace;
                    rasterDatset = rasterWorkspc.OpenRasterDataset(fileName);
                    rasterLay.CreateFromDataset(rasterDatset);
                    axMapControl1.ClearLayers();
                    rasterLay.Name = fileName;
                    axMapControl1.AddLayer(rasterLay);
                    axMapControl1.Refresh();
                }

            }

  输出文件的主体是axPageLayoutControl中的图层,输出格式可分为两个部分,即PDF和图片格式,其效果实现,需要在主体窗口上重新打开一个窗口,这就涉及到一个参数传递的问题,但是代码仍然不难,其代码如下:

   //这是打开相应输出窗体的代码

    private void 图形输出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //打开输出文件窗口
            ExportMapForm exportPh = new ExportMapForm(axPageLayoutControl1);//将axPageLayoutCobtrol1作为对象进行传入至ExportMapForm的构造函数中
            exportPh.Show();

            exportPh.Enabled = true;//设置该窗口可见和可操作

        }

  以下代码较长,慎入:

        AxPageLayoutControl m_Map;//新建axPageLayoutControl变量,用于接收传进来的参数
        public ExportMapForm(AxPageLayoutControl m_Map)
        {
            InitializeComponent();
            this.m_Map = m_Map;//通过参数传递将主界面的axPageLayoutControl传递给m_Map
            this.Text = "图层输出";
        }
        private void btnPrint_Click(object sender, EventArgs e)//点击打印Button响应
        {
            //创建保存文件对话框的实例
            SaveFileDialog SaveFile = new SaveFileDialog();
            //根据掩码文本框对对话框初始化
            switch (comboBox1.SelectedIndex)
            {     
                case 0:
                    SaveFile.Filter = "bmp文件(*.bmp)|*.bmp";
                    SaveFile.Title = "保存bmb文件";
                    break;
                case 1:
                    SaveFile.Filter = "emf文件(*.emf)|*.emf";
                    SaveFile.Title = "保存emp文件";
                    break;
                case 2:
                    SaveFile.Filter = "gif文件(*.gif)|*.gif";
                    SaveFile.Title = "保存gif文件";
                    break;
                case 3:
                    SaveFile.Filter = "jpg文件(*.jpeg)|*.jpeg";
                    SaveFile.Title = "保存jpg文件";
                    break;
                case 4:
                    SaveFile.Filter = "PNG文件(*.png)|*.png";
                    SaveFile.Title = "保存png文件";
                    break;
                case 5:
                    SaveFile.Filter = "TIFF文件(*.TIFF)|*.TIFF";
                    SaveFile.Title = "保存tiff文件";
                    break;
                case 6:
                    SaveFile.Filter = "PDF文件(*.PDF)|*.pdf";
                    SaveFile.Title = "保存pdf文件";
                    break;
            }
            if (SaveFile.ShowDialog() == DialogResult.OK)
            {
                //打开保存文件对话框 并选择路径和文件名
                SaveFile.AddExtension = true;//设置为自动补充文件扩展名
                IExport pExport;
                switch (comboBox1.SelectedIndex)//根据掩码文本框的索引值穿件不同的pExport实例并调用Export方法
                {
                    case 0:
                        pExport = new ExportBMPClass();
                        Export(pExport, SaveFile.FileName);
                        break;
                    case 1:
                        pExport = new ExportEMFClass();
                        Export(pExport, SaveFile.FileName);
                        break;
                    case 2:
                        pExport = new ExportGIFClass();
                        Export(pExport, SaveFile.FileName);
                        break;
                    case 3:
                        pExport = new ExportJPEGClass();
                        Export(pExport, SaveFile.FileName);
                        break;
                    case 4:
                        pExport = new ExportPNGClass();
                        Export(pExport, SaveFile.FileName);
                        break;
                    case 5:
                        pExport = new ExportTIFFClass();
                        Export(pExport, SaveFile.FileName);
                        break;
                    case 6:
                        pExport = new ExportPDFClass();
                        Export(pExport, SaveFile.FileName);
                        break;


                }
               
            }
            
        }
        //输出文件
        public void Export(IExport pExport,string path)
        {
            IActiveView pActiveView;
            IEnvelope pPixelBoundsEnv;
            int iOutputResolution;
            int iScreenResolution;
            int hdc;
            pActiveView = m_Map.ActiveView;
            pExport.ExportFileName =path ;
            iScreenResolution = 96;
            iOutputResolution = 300;
            pExport.Resolution = iOutputResolution;
            tagRECT pExportFrame;
            pExportFrame = pActiveView.ExportFrame;
            tagRECT exportRECT;
            exportRECT.left = 0;
            exportRECT.top = 0;
            exportRECT.right = pActiveView.ExportFrame.right * (iOutputResolution / iScreenResolution);
            exportRECT.bottom = pActiveView.ExportFrame.bottom * (iOutputResolution / iScreenResolution);
            pPixelBoundsEnv = new EnvelopeClass();
            pPixelBoundsEnv.PutCoords(exportRECT.left, exportRECT.top, exportRECT.right, exportRECT.bottom);
            pExport.PixelBounds = pPixelBoundsEnv;
            hdc = pExport.StartExporting();
            pActiveView.Output(hdc, (int)pExport.Resolution, ref exportRECT, null, null);
            pExport.FinishExporting();
            pExport.Cleanup();
            MessageBox.Show("输出文件完成");
        }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon_tttea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值