C# AE开发入门及加载矢量和栅格图片

C# AE开发入门及加载矢量和栅格图片

一、实验目的
加载矢量(Shapefile、DXF)和栅格图片(TIFF)
二、实验步骤
主要步骤:
–创建UI:MapControl、LicenseControl;
–绑定运行时;
–添加引用

(一)配置开发环境,添加引用,运行基本界面

  1. 打开VS2012,新建windows窗体程序
    在这里插入图片描述
  2. 在工具箱——〉容器下拖入一个SplitContainer容器 在这里插入图片描述
  3. 在工具箱——〉ArcGIS Windows Forms下拖入一个MapControl控件,并将其DOCK属性改为FILL即可 在这里插入图片描述
    在这里插入图片描述
  4. 在工具箱——〉ArcGIS Windows Forms下拖入一个LicenseControl控件(运行时不可见)在这里插入图片描述5.在程序入口代码(Program.cs)处添加绑定,在Application.Run(new Form1()); 前添加一行ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); 在这里插入图片描述
  5. 添加引用,在引用上右键,选择Add ArcGIS Reference,在Engine(Core)下添加以下几个引用:

ESRI.ArcGIS.Geodatabase;
ESRI.ArcGIS.DataSourcesRaster;
ESRI.ArcGIS.DataSourcesFile;
ESRI.ArcGIS.DataSourcesGDB;在这里插入图片描述
在这里插入图片描述
7. 在Form1.cs下添加下列引用命名空间
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.DataSourcesRaster;
8. 添加三个按钮控件,并分别修改按钮文本为:AddSHP,AddCAD,AddTIFF
在这里插入图片描述
9. 运行至如下界面
在这里插入图片描述
(二)实现按钮加载图片功能
1.加载Shapefile文件

private void button1_Click(object sender, EventArgs e)
        {
            //打开文件对话框,选择shp文件
            OpenFileDialog of = new OpenFileDialog();
            of.Filter = "*(.shpfile)|*.shp";
            of.Title = "打开shp文件";

            string path;
            string name;
            if (of.ShowDialog() == DialogResult.OK)
            {
                path = System.IO.Path.GetDirectoryName(of.FileName);
                name = System.IO.Path.GetFileName(of.FileName);

            }
            else return;

            //新建一个Shapefile工厂类
            IWorkspaceFactory pWF; 
            pWF = new ShapefileWorkspaceFactoryClass();

            //使用工厂类打开一个工作空间
           
            IWorkspace pW = pWF.OpenFromFile(path, 0);

            //将工作空间强制转换为要素工作空间
            IFeatureWorkspace pFW = (IFeatureWorkspace)pW;

            //定义要素类并从要素工作空间打开一个Shapefile
            IFeatureClass pFC = pFW.OpenFeatureClass(name);

            //新建FeatureLayerClass,并将shapefile要素加载到要素图层类
            IFeatureLayer pFlyr = new FeatureLayerClass();
            pFlyr.FeatureClass = pFC;

            //将要素图层加入mapcontrol并刷新
            axMapControl1.AddLayer(pFlyr);
            axMapControl1.ActiveView.Refresh();
        }

运行结果
在这里插入图片描述
在这里插入图片描述
2.加载TIFF文件

private void button2_Click(object sender, EventArgs e)
        {
            //打开文件对话框,选择tif文件
            OpenFileDialog of = new OpenFileDialog();
            of.Filter = "*(.tif)|*.tif";
            of.Title = "打开tif文件";

            string path;
            string name;
            if (of.ShowDialog() == DialogResult.OK)
            {
                path = System.IO.Path.GetDirectoryName(of.FileName);
                name = System.IO.Path.GetFileName(of.FileName);
            }
            else return;

            //新建一个Raster工厂类
            IWorkspaceFactory workspcFac = new RasterWorkspaceFactory();

            //使用工厂类打开一个栅格工作空间
            IRasterWorkspace rasterWorkspc;
            rasterWorkspc = workspcFac.OpenFromFile(path, 0) as IRasterWorkspace;
            //新建栅格数据集和栅格图层   
         
            IRasterDataset rasterDataset = new RasterDatasetClass();
            IRasterLayer rasterLay = new RasterLayerClass();

            //从栅格工作空间选择要的打开tiff文件并将数据集中的文件加载到图层上
            rasterDataset = rasterWorkspc.OpenRasterDataset(name);
            rasterLay.CreateFromDataset(rasterDataset );

            //将栅格图层加入mapcontrol并刷新
            axMapControl1.AddLayer(rasterLay );
            axMapControl1.Refresh();
        }

运行结果
在这里插入图片描述

  1. 加载DXF文件
        private void button3_Click(object sender, EventArgs e)
        {
            //打开文件对话框,选择dxf文件
            OpenFileDialog of = new OpenFileDialog();
            of.Filter = "*(.dxf)|*.dxf";
            of.Title = "打开cad文件";
            string path;
            string name;
            if (of.ShowDialog() == DialogResult.OK)
            {
                path = System.IO.Path.GetDirectoryName(of.FileName);
                name = System.IO.Path.GetFileName(of.FileName);
            }
            else return;

            //新建CAD工厂类
            CadWorkspaceFactoryClass fac = new CadWorkspaceFactoryClass();
            
            //定义要素工作空间
            IFeatureWorkspace space = fac.OpenFromFile(path ,0) as IFeatureWorkspace ;
           
            //加载面
            IFeatureClass polygon = space.OpenFeatureClass(name+":Polygon");
            IFeatureLayer layer3 = new CadFeatureLayerClass();
            layer3 = new CadFeatureLayerClass();
            layer3.FeatureClass = polygon;
           
            //加载线
            IFeatureClass polyline = space.OpenFeatureClass(name + ":Polyline");
            IFeatureLayer layer = new CadFeatureLayerClass();
            layer.FeatureClass = polyline;
            
            //加载点
            IFeatureClass point = space.OpenFeatureClass(name+":Point");
            IFeatureLayer layer2 = new CadFeatureLayerClass();
            layer2 = new CadFeatureLayerClass();
            layer2.FeatureClass = point;     
                 
            //加载注记
            IFeatureClass anno = space.OpenFeatureClass(name+":Annotation");
            IFeatureLayer layer4 = new CadFeatureLayerClass();
            layer4 = (IFeatureLayer) new CadAnnotationLayer();
            layer4.FeatureClass = anno;

            axMapControl1.AddLayer(layer3);
            axMapControl1.AddLayer(layer);
            axMapControl1.AddLayer(layer2);
            axMapControl1.AddLayer(layer4);
            axMapControl1.Refresh();
        }

运行结果
在这里插入图片描述

4.注意事项
(1)如果报以下错误,在引用Carto时将嵌入互操作类型改为False即可在这里插入图片描述
(2)加载CAD文件注记和点线面分别加载,加载注记时不能直接使用CadFeatureLayerClass,需要用CadAnnotationLayer,然后将其强制转换为IFeatureLayer。
(3)对话框如果不进行选择文件需返回原来的窗口而不能报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值