AE开发中,有时需要从磁盘中读取一些文件信息如坐标点转为图层并进行分析,此过程并不需要坐标点入库之类的操作,就可以创建一个内存图层解决问题。创建内存图层需要用到InMemoryWorkspaceFactoryClass。这样无需对磁盘进行操作,效率很高,且随程序的关闭而释放,无需考虑临时文件。

//建立内存图层------------------/** 创建一个工具,名为CreatMemLayer* 这个工具的作用为,创建一个名为layername参数传进来的内存图层* 这个内存图层的格式定义在本类的CreateVehicleFeature函数,可以自定义修改* 作者:陈芋宇   * 20100716*//// <summary>/// 创建空的内存工作空间,并且返回工作空间 -- pfeatureworkspace/// </summary>private IFeatureWorkspace CreateEmptyLayerInmemeory(string slayername, ESRI.ArcGIS.Geometry.ISpatialReference pspatialreference, int itype){//打开工作空间const string strShapeFieldName = "SHAPE";IWorkspaceFactory pWSF = new InMemoryWorkspaceFactoryClass();ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspacename = pWSF.Create("", "MyWorkspace", null, 0);ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspacename;IFeatureWorkspace pfeatureworkspace = (IFeatureWorkspace)(pname.Open()); //打开刚建立的内存空间try{//为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照
IGeometryDef pGeoDef = new GeometryDefClass();     //The geometry definition for the field if IsGeometry is TRUE.
IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;if (itype == 0){pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;}else{if (itype == 1){pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;}else{pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;}}if (pspatialreference != null){pspatialreference.SetDomain(-180, 180, -90, 90);pGeoDefEdit.SpatialReference_2 = pspatialreference;}else{ISpatialReferenceFactory3 pspatialRefFac = new SpatialReferenceEnvironmentClass();ISpatialReference pspatialRef = pspatialRefFac.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);//定义的为WGS84的空间地理坐标系
pspatialRef.SetDomain(-180, 180, -90, 90);//这里一定要加域值的设置!
pGeoDefEdit.SpatialReference_2 = pspatialRef;}//设置字段集
IFields pFields = new FieldsClass();IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;//设置字段
IField pField = new FieldClass();IFieldEdit pFieldEdit = (IFieldEdit)pField;//创建类型为几何类型的字段0
pFieldEdit.Name_2 = strShapeFieldName;pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;//esriFieldTypeGeometry;
pFieldEdit.GeometryDef_2 = pGeoDef;pFieldsEdit.AddField(pField);//添加其他的字段1:nodeid,2:x,3:y
pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "ID";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;pFieldsEdit.AddField(pField);if (itype == 0){pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "X";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldEdit.Precision_2 = 10;//数值长度
pFieldEdit.Scale_2 = 6;//小数点后保留位数
pFieldsEdit.AddField(pField);pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "Y";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldEdit.Precision_2 = 10;//数值长度
pFieldEdit.Scale_2 = 6;//小数点后保留位数
pFieldsEdit.AddField(pField);pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "Z";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldsEdit.AddField(pField);}//创建shapefile
IFeatureClass pfclass = pfeatureworkspace.CreateFeatureClass(slayername, pFields, null, null, esriFeatureType.esriFTSimple, strShapeFieldName, "");//这一句老是出问题!最后的解决方案是:原来之前设定的坐标系统没有添加域!
IDataset pdataset = (IDataset)pfclass; // 创建geodatabase属性表
pdataset.BrowseName = slayername;}catch (System.Exception ex){throw (ex);}return pfeatureworkspace;}

上面函数的使用:

IFeatureWorkspace feawks = CreateEmptyLayerInmemeory("TMP", pspatialRef, 0);if (feawks == null) return;IFeatureClass feacls = feawks.OpenFeatureClass("TMP");

内存图层保存为磁盘图层:

这个操作意义不大,如果需要保存,一开始就可以创建一个硬盘中的图层。

1.可以采用最笨的方法。

从FEATURECLASS中取出FEATURE 一个个写入新的FEATURECLASS

2.调用IGeoprocessor.Execute("select_management", , ,),利用Geoprocessing中的Select命令导出。

3.使用IFeatureDataConverter

AE开发使用内存图层相关推荐

  1. AE开发,获取图层的所有几何对象(IGeometry)

    直接上代码(以面要素为例) //获取整个面图层的IGeometryprivate IGeometry getBasicGeometry_polygon(IFeatureClass pFeatureCl ...

  2. AE开发之图层渲染20210603

    AE开发之图层渲染 比例符号化 地图的整饰 唯一值符号的符号化过程 点符号设置,线符号设置 标注图层, (写得不好,不推荐看) 唯一值符号化,字段进行设置,这里用到了UniqueValueRender ...

  3. C#+AE开发TOCControl右键菜单打开属性表/图层目录右键功能

    文章转载自网易云博客,最初原创博客链接已失效,不再给出.仅给出转载链接: C# AE开发 TOCControl 右键打开图层属性表 致谢! 华丽丽的分割线/ 在ArcMap中,单击图层右键菜单中的&q ...

  4. 【Arcgis Engine开发】AE开发把影像或者矢量加载到图层

    AE开发把影像或者加载到图层 1.创建一个类工厂 2.使用类工厂创建一个要使用的工作区 3.使用工作区打开并得到图层的dataset 4.把dataset装入到新建的图层实例 5.把图层加载到MapC ...

  5. AE开发20210506之数据库、创建个人地理数据库、空间数据与工作空间、打开地图的三种办法、查找资料

    20210506 数据库 arcmap相关操作理解数据库的概念 工作空间 常见数据库 创建个人地理数据库 创建数据集的概念. 空间数据和工作空间 1. MapControl控件接口 打开地图的三种方法 ...

  6. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  7. AE开发笔记(二)制图输出

    一.制作mxd模板文件 尽可能在模板图层中标注要素,这样在模板图层中插入要素后,标注可以随之自动显示. 二.打开真实数据要素类 打开真实要素类,获取该要素类和空间参考,以及标注需要的字段索引. 三.打 ...

  8. 开发中内存溢出问题及解决

    开发中内存溢出问题及解决 参考文章: (1)开发中内存溢出问题及解决 (2)https://www.cnblogs.com/yangyi1024/p/6417874.html 备忘一下.

  9. AE开发中鹰眼的隐藏

    AE开发中鹰眼的隐藏 菜单栏中加入文本 双击添加事件处理函数 根据自己的splitContainer加入代码: if (splitContainer1.Panel2Collapsed) { split ...

最新文章

  1. lambda函数详解
  2. android AVD运行chrome,contentshell,chromeshell失败解决方法
  3. Windows Phone 7.1 Sensor プログラミング基礎
  4. 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
  5. 鹤峰:美丽的茶乡—— 舞狮篇
  6. vue computed 源码分析
  7. java创建链表成绩管理系统_成绩管理系统 链表版
  8. ai人工智能的数据服务_从AI数据集中消除无意识的偏见
  9. html5 push api,HTML5+ API Reference
  10. K8S使用dashboard管理集群
  11. Linux下发生段错误时如何产生core文件-转
  12. SATA SAS SSD 硬盘介绍和评测
  13. Axis1.4 在weblogic9.2中报 (401)Unauthorized 的处理
  14. Unity SRP初识笔记
  15. 数据分析在网络营销中的意义有哪些
  16. 商品详情页系统架构-笔记12 - 商品详情页整体架构组成+前端介绍
  17. 常用传感器讲解二十一--加速度传感器(ADXL335)
  18. 小心肝队-冲刺日志(第十天)
  19. HDMI是什么设备与计算机连接的接口类型,​hdmi接口有什么用?怎么连接电脑?vga和hdmi的区别...
  20. 六、常用的sql语句

热门文章

  1. centos nginx不是命令_虚拟机下Centos 8.0 安装PHP+Mysql+Nginx
  2. 双目立体视觉建立深度图_双目立体视觉测量系统应用
  3. windows下安装TensorFlow(清华镜像)
  4. 【研究院】浅析小米与它的AI生态
  5. 《微机原理及接口技术》第08章在线测试
  6. 关于保存到session里的信息
  7. 分享一个JDK1.8丢失数字精度的案例
  8. Windows10 家庭版添加【本地组策略编辑器】
  9. git fatal: 拒绝合并无关的历史
  10. 在LNMP或Nginx上配置NameCheap免费SSL证书