C#+Arcengine---创建内存图层

分类:技术文档
2009-12-11 14:43阅读(1498)评论(0)

#region 在内存中创建图层
        /// <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;
                geometryDefEdit.SpatialReference_2 = new UnknownCoordinateSystemClass();//没有这一句就报错,说尝试读取或写入受保护的内存。
                geometryDefEdit.SpatialReference.SetDomain(-200, 200, -200, 200);//没有这句就抛异常来自HRESULT:0x8004120E。

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
            {
            }
            return oFeatureLayer;
        }

#endregion

下面就是根据采集的坐标点创建点内存图层:

IFeatureLayer pFeatureLayer = new FeatureLayerClass();
            IFieldsEdit curFileds = new FieldsClass();
            IFieldEdit curField = new FieldClass();
            curField = new FieldClass();
            curField.Name_2 = "名称";
            curField.Type_2 = esriFieldType.esriFieldTypeString;
            curFileds.AddField(curField);

curField = new FieldClass();
            curField.Name_2 = "经度";
            curField.Type_2 = esriFieldType.esriFieldTypeDouble;
            curFileds.AddField(curField);

curField = new FieldClass();
            curField.Name_2 = "纬度";
            curField.Type_2 = esriFieldType.esriFieldTypeDouble;
            curFileds.AddField(curField);

pFeatureLayer = CreateFeatureLayerInmemeory("Position", "采集点", new     UnknownCoordinateSystemClass(), esriGeometryType.esriGeometryPoint, curFileds as IFields);
            p_axMap.AddLayer(pFeatureLayer as ILayer);
            IFeatureCursor FeatureCursor;
            IFeature pFeature;
            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
            pFeature = pFeatureClass.CreateFeature();
            IQueryFilter pQueryFilter = new QueryFilterClass();
            FeatureCursor = pFeatureClass.Search(pQueryFilter, true);
            pQueryFilter.WhereClause = null;
            pFeature = FeatureCursor.NextFeature();
            pFeature.set_Value(0, str1);
            pFeature.set_Value(1, x);
            pFeature.set_Value(2, y);
            IEnvelope pEnvelope = new EnvelopeClass();

//如果双击的对象是一个点,这样子才能够缩放到该点
            pEnvelope.PutCoords(0, 0, 0.3, 0.3);//确定envelope大小

IPoint xpoint = new PointClass();
            xpoint.PutCoords(x, y);

pFeature.Shape = xpoint;
            pFeature.Store();

//设置颜色
            IRgbColor pcolor = new RgbColorClass();

pcolor.Red = 255;

pcolor.Green = 0;

pcolor.Blue = 0;

//设置图形
            ISimpleMarkerSymbol psm = new SimpleMarkerSymbolClass();
            psm.Style = esriSimpleMarkerStyle.esriSMSCircle;
            psm.Size = 10;
            psm.Color = pcolor;

(pFeatureLayer as IFeatureSelection).SelectionSymbol = (ISymbol)psm;
            (pFeatureLayer as IFeatureSelection).SetSelectionSymbol = true;

(pFeatureLayer as IFeatureSelection).SelectionSet.Add(pFeature.OID);

pEnvelope.CenterAt(xpoint);//地图缩放到该点       
            p_axMap.Extent = pEnvelope;
            p_axMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, null);
            p_axMap.ActiveView.ScreenDisplay.UpdateWindow();

C# ArcEngine创建内存图层(转载)的更多相关文章

  1. AE开发使用内存图层

    AE开发中,有时需要从磁盘中读取一些文件信息如坐标点转为图层并进行分析,此过程并不需要坐标点入库之类的操作,就可以创建一个内存图层解决问题.创建内存图层需要用到InMemoryWorkspaceFac ...

  2. ArcEngine 创建线要素图层

    在创建要素图层的时候,默认的几何类型是Polygon: Dim objectClassDescription As IObjectClassDescription = New FeatureClass ...

  3. ArcEngine临时数据存储 创建内存工作空间

    参考网址,这里 工作中有时候需要使用临时数据,以前都是创建一个默认的shapefile或者gdb,今天发现esri官方帮助文档给出了一个方法,可以创建内存工作空间,代码如下: public stati ...

  4. 使用ZwMapViewOfSection创建内存映射文件总结

    标 题: [原创]使用ZwMapViewOfSection创建内存映射文件总结 作 者: 小覃 时 间: 2012-06-15,02:28:36 链 接: http://bbs.pediy.com/s ...

  5. Java Object 对象创建的方式 [ 转载 ]

    Java Object 对象创建的方式 [ 转载 ] @author http://blog.csdn.net/mhmyqn/article/details/7943411 显式创建 有4种显式地创建 ...

  6. MAPINFO中利用GridMaker工具创建栅格图层

    在工作中需要使用栅格地图,以往都是由研发人员来创建,今天偶然发现Mapinfo中有GridMaker这样一个工具,结合网络搜索自己试了一下,居然做成功了,这里把步骤记录下来,方便以后查看. 1.首先在 ...

  7. 转:内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]

    内存区划分.内存分配.常量存储区.堆.栈.自由存储区.全局区[C++][内存管理][转载] 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放 ...

  8. [转] arcgis Engine创建shp图层

    小生 原文 arcgis Engine创建shp图层 以创建点图层为例.首先要得到保存文件的地址. SaveFileDialog saveFileDialog = new SaveFileDialog ...

  9. ArcGIS 网络分析[8.6] 资料6 创建网络分析图层及进行路径分析

    基于上篇所介绍的内容,就说说如何利用访问到的网络数据集,在Map中添加网络数据集图层.创建网络分析图层中的路径图层,并执行路径分析示例.

随机推荐

  1. python split()函数使用拆分字符串 将字符串转化为列表

    函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list ...

  2. poj2387 Til the Cows Come Home 最短路径dijkstra算法

    Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...

  3. Mango Weekly Training Round #3 解题报告

    A. Codeforces 92A Chips 签到题.. #include <iostream> #include <cstdio> #include <cstring ...

  4. 常用Eclipse插件在线安装地址

    Srping IDE http://www.springsource.com/update/e3.5   EasyShellhttp://pluginbox.sourceforge.net   M2E ...

  5. ajax技术的应用?

    1,百度输入后的提示 2,新浪登录之后只刷新用户名

  6. STL整理

    sort 升序排列: iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素. iterator up ...

  7. HAXM cannot be installed nutil TV-x is enabled

    提示错误:如图 HAXM cannot be installed nutil TV-x is enabled 问题原因: 电脑没有启动Intel的虚拟化技术 解决方法: 重启电脑,进BIOS中启动VT ...

  8. 一些正则验证-JS

    Validation = { textCount: function(field, counter, maxLimit) { var message = $(field).val(); if ($(f ...

  9. C语言 百炼成钢11

    //题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 //判断第二个字母. #define _CRT_SECURE_NO_WARNINGS #include<st ...

  10. jquery 获取select框选中的值示例一则

    $('#MODULE_TYPE').change(function(){ var moduleType=$(this).children('option:selected').val();//这就是s ...