在ArcEngine中创建内存图层
来源:互联网 发布:websphere mq java 编辑:程序博客网 时间:2024/05/17 02:49
arcEngine9.2中新增了一个新的特征,允许创建内存工作空间。当你需要一个这样的图层时,这个图层的属性数据或者几何数据需要频繁的更新,而又不希望因此而带来效率上的问题,你就可以考虑使用内存图层。
内存图层的创建分为五步:
1、设置属性字段
2、设置空间参考和几何字段
3、创建内存工作空间
4、在内存工作空间中创建特征类
5、创建特征图层,并将上一步创建的特征类设置为这个特征的图层的特征类
请看以下完整的示例代码
- /// <summary>
- /// 在内存中创建图层
- /// </summary>
- /// <param name="DataSetName">数据集名称</param>
- /// <param name="AliaseName">别名</param>
- /// <param name="SpatialRef">空间参考</param>
- /// <param name="GeometryType">几何类型</param>
- /// <param name="PropertyFields">属性字段集合</param>
- /// <returns>IfeatureLayer</returns>
- public static IFeatureLayer CreateFeatureLayerInmemeory(string DataSetName, string AliaseName, ISpatialReference SpatialRef, esriGeometryType GeometryType, IFields PropertyFields)
- {
- IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
- ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0);
- ESRI.ArcGIS.esriSystem.IName name = (IName)workspaceName;
- ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)name.Open();
- IField oField = new FieldClass();
- IFields oFields = new FieldsClass();
- IFieldsEdit oFieldsEdit = null;
- IFieldEdit oFieldEdit = null;
- IFeatureClass oFeatureClass = null;
- IFeatureLayer oFeatureLayer = null;
- try
- {
- oFieldsEdit = oFields as IFieldsEdit;
- oFieldEdit = oField as IFieldEdit;
- for (int i = 0; i < PropertyFields.FieldCount; i++)
- {
- oFieldsEdit.AddField(PropertyFields.get_Field(i));
- }
- IGeometryDef geometryDef = new GeometryDefClass();
- IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
- geometryDefEdit.AvgNumPoints_2 = 5;
- geometryDefEdit.GeometryType_2 = GeometryType;
- geometryDefEdit.GridCount_2 = 1;
- geometryDefEdit.HasM_2 = false;
- geometryDefEdit.HasZ_2 = false;
- geometryDefEdit.SpatialReference_2 = SpatialRef;
- oFieldEdit.Name_2 = "SHAPE";
- oFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
- oFieldEdit.GeometryDef_2 = geometryDef;
- oFieldEdit.IsNullable_2 = true;
- oFieldEdit.Required_2 = true;
- oFieldsEdit.AddField(oField);
- oFeatureClass = (inmemWor as IFeatureWorkspace).CreateFeatureClass(DataSetName, oFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", "");
- (oFeatureClass as IDataset).BrowseName = DataSetName;
- oFeatureLayer = new FeatureLayerClass();
- oFeatureLayer.Name = AliaseName;
- oFeatureLayer.FeatureClass = oFeatureClass;
- }
- catch
- {
- }
- finally
- {
- try
- {
- System.Runtime.InteropServices.Marshal.ReleaseComObject(oField);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(oFields);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldsEdit);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(oFieldEdit);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(name);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(workspaceFactory);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(workspaceName);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(inmemWor);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(oFeatureClass);
- }
- catch { }
- GC.Collect();
- }
- return oFeatureLayer;
- }
- 返回来的这个特征图层就是我们所需要的结果,操作这个内存图层方式和操作物理图层方式完全一样。接下要做的事情就不必我说了吧。
- 在ArcEngine中创建内存图层
- 在ArcEngine中创建内存图层
- 在ArcEngine中创建内存图层[转]
- 在ArcEngine中创建内存图层[转]
- ArcEngine中创建内存图层、空间、属性查询
- 用Arcengine创建图层
- 在ArcEngine中创建带高程Z值的点和线图层
- ArcEngine中根据图层名得到图层
- ArcEngine创建内存FeatureClass
- arcengine创建要素类、图层的方法
- ArcEngine图层渲染
- ArcEngine 图层渲染
- ArcEngine图层缩放
- ArcEngine在地图上加载Server图层数据
- ArcEngine中对relationship的图层编辑
- ArcEngine开发 TOCC中“图层”标记不显示问题
- ArcEngine创建要素类_线图层
- ArcEngine c# 创建shp图层,并将要素写入图层保存
- 创业视点:论SNS的前景
- PC104图形界面开发
- 用ArcEngine的工具条添加图层要素
- ArcEngine中使用上下左右键移动地图功能的实现
- ArcEngine中闪烁目标
- 在ArcEngine中创建内存图层
- 系统程序员成长计划-并发(四)(下)
- ArcGIS Engine开发:地图标注(C#)
- 使用C#制作简易的注册表编辑器
- 主板换来了,可以继续了,哈哈
- 良好编程习惯的养成
- 当下10大最热门的网站开发技术
- 数据库的事务隔离级别
- 《自然》评出年度图片:咳嗽瞬间 结晶公寓