AE开发使用内存图层
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开发使用内存图层相关推荐
- AE开发,获取图层的所有几何对象(IGeometry)
直接上代码(以面要素为例) //获取整个面图层的IGeometryprivate IGeometry getBasicGeometry_polygon(IFeatureClass pFeatureCl ...
- AE开发之图层渲染20210603
AE开发之图层渲染 比例符号化 地图的整饰 唯一值符号的符号化过程 点符号设置,线符号设置 标注图层, (写得不好,不推荐看) 唯一值符号化,字段进行设置,这里用到了UniqueValueRender ...
- C#+AE开发TOCControl右键菜单打开属性表/图层目录右键功能
文章转载自网易云博客,最初原创博客链接已失效,不再给出.仅给出转载链接: C# AE开发 TOCControl 右键打开图层属性表 致谢! 华丽丽的分割线/ 在ArcMap中,单击图层右键菜单中的&q ...
- 【Arcgis Engine开发】AE开发把影像或者矢量加载到图层
AE开发把影像或者加载到图层 1.创建一个类工厂 2.使用类工厂创建一个要使用的工作区 3.使用工作区打开并得到图层的dataset 4.把dataset装入到新建的图层实例 5.把图层加载到MapC ...
- AE开发20210506之数据库、创建个人地理数据库、空间数据与工作空间、打开地图的三种办法、查找资料
20210506 数据库 arcmap相关操作理解数据库的概念 工作空间 常见数据库 创建个人地理数据库 创建数据集的概念. 空间数据和工作空间 1. MapControl控件接口 打开地图的三种方法 ...
- 将AE开发的专题图制作功能发布为WPS
AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...
- AE开发笔记(二)制图输出
一.制作mxd模板文件 尽可能在模板图层中标注要素,这样在模板图层中插入要素后,标注可以随之自动显示. 二.打开真实数据要素类 打开真实要素类,获取该要素类和空间参考,以及标注需要的字段索引. 三.打 ...
- 开发中内存溢出问题及解决
开发中内存溢出问题及解决 参考文章: (1)开发中内存溢出问题及解决 (2)https://www.cnblogs.com/yangyi1024/p/6417874.html 备忘一下.
- AE开发中鹰眼的隐藏
AE开发中鹰眼的隐藏 菜单栏中加入文本 双击添加事件处理函数 根据自己的splitContainer加入代码: if (splitContainer1.Panel2Collapsed) { split ...
最新文章
- lambda函数详解
- android AVD运行chrome,contentshell,chromeshell失败解决方法
- Windows Phone 7.1 Sensor プログラミング基礎
- 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
- 鹤峰:美丽的茶乡—— 舞狮篇
- vue computed 源码分析
- java创建链表成绩管理系统_成绩管理系统 链表版
- ai人工智能的数据服务_从AI数据集中消除无意识的偏见
- html5 push api,HTML5+ API Reference
- K8S使用dashboard管理集群
- Linux下发生段错误时如何产生core文件-转
- SATA SAS SSD 硬盘介绍和评测
- Axis1.4 在weblogic9.2中报 (401)Unauthorized 的处理
- Unity SRP初识笔记
- 数据分析在网络营销中的意义有哪些
- 商品详情页系统架构-笔记12 - 商品详情页整体架构组成+前端介绍
- 常用传感器讲解二十一--加速度传感器(ADXL335)
- 小心肝队-冲刺日志(第十天)
- HDMI是什么设备与计算机连接的接口类型,​hdmi接口有什么用?怎么连接电脑?vga和hdmi的区别...
- 六、常用的sql语句