创建内存工作空间
/// <summary>/// 创建内存工作空间,将数据保存在内存中/// </summary>public static IWorkspace GetWorkspace(){IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();IWorkspaceName workspaceName = workspaceFactory.Create(null, "MyWorkspace", null, 0);IName name = (IName)workspaceName;IWorkspace workspace = (IWorkspace)name.Open();return workspace;}
根据指定类型获取或创建要素类
/// <summary>/// 根据类型名称获取要素类,如果不存在则创建一个该类型的要素类/// </summary>/// <param name="workspace">工作空间</param>/// <param name="spatialReference">空间参照</param>/// <param name="fClsGeoType">要素类几何类型名称</param>/// <returns></returns>private static IFeatureClass GetFeatureClass(IWorkspace workspace, ISpatialReference spatialReference, string fClsGeoType){IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;IFeatureClass featureClass = null;try{featureClass = featureWorkspace.OpenFeatureClass(fClsGeoType);return featureClass;}catch{}UID CLSEXT = null;UID CLSID = new UIDClass();CLSID.Value = "esriGeoDatabase.Feature";string strConfigKeyword = "";IGeometryDef pGeometryDef = new GeometryDefClass();IGeometryDefEdit geometryDefEdit = pGeometryDef as IGeometryDefEdit;geometryDefEdit.GridCount_2 = 1; // 设置空间索引(个人数据库仅支持1个)geometryDefEdit.GeometryType_2 = GetEsriGeometryType(fClsGeoType); // 设置为几何类型geometryDefEdit.SpatialReference_2 = spatialReference;IFields fields = new FieldsClass();IFieldsEdit fieldsEdit = fields as IFieldsEdit;// 创建OBJECTID字段IField fieldOID = new Field();IFieldEdit fieldEditOID = fieldOID as IFieldEdit;fieldEditOID.Name_2 = "OBJECTID";fieldEditOID.AliasName_2 = "OBJECTID";fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;fieldEditOID.Editable_2 = false;fieldsEdit.AddField(fieldOID);// 创建几何字段IField fieldShape = new Field();IFieldEdit fieldEditShape = fieldShape as IFieldEdit;fieldEditShape.Name_2 = "SHAPE";fieldEditShape.AliasName_2 = "SHAPE";fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry;fieldEditShape.GeometryDef_2 = pGeometryDef;fieldEditShape.Editable_2 = true;fieldsEdit.AddField(fieldShape);string strShapeField = fieldShape.Name;IFieldChecker fieldChecker = new FieldCheckerClass();fieldChecker.ValidateWorkspace = workspace;IEnumFieldError enumFieldError;IFields validatedFields;fieldChecker.Validate(fields, out enumFieldError, out validatedFields);featureClass = featureWorkspace.CreateFeatureClass(fClsGeoType, validatedFields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);return featureClass;}
获取线要素
/// <summary>/// 创建一个新的线状符号,并将其加入点要素类中/// </summary>public static void CreateSimpleLine(IWorkspace workspace, IMap map, IPointCollection linePointCollection, IColor color, double width, esriSimpleLineStyle style){// 创建线图形IPolyline pPolyline = linePointCollection as IPolyline;IGeometry polylineGeometry = pPolyline as IGeometry;ITopologicalOperator pTop = polylineGeometry as ITopologicalOperator;pTop.Simplify();// 获取线要素类并添加一个新的线要素IFeatureClass fCls = GetFeatureClass(workspace, map.SpatialReference, "esriSLS");IFeature pFeature = fCls.CreateFeature();pFeature.Shape = polylineGeometry;pFeature.Store();// 新建线要素图层IFeatureLayer featureLayer = new FeatureLayerClass();featureLayer.FeatureClass = fCls;IGeoFeatureLayer pGeoFeatLyr = featureLayer as IGeoFeatureLayer;// 设置线符号样式ISimpleLineSymbol pLineSymbol = new SimpleLineSymbolClass();pLineSymbol.Color = color;pLineSymbol.Width = width;pLineSymbol.Style = style;ISymbol symbol = pLineSymbol as ISymbol;// 更改线图层的样式(使之生效)ISimpleRenderer simpleRenderer = new SimpleRendererClass();simpleRenderer.Symbol = symbol;pGeoFeatLyr.Renderer = simpleRenderer as IFeatureRenderer;// 添加图层到地图中map.AddLayer(featureLayer as ILayer);}
小技巧
文本转枚举类型
(源代码来源于网络)
/// <summary>/// 字符串转枚举类型/// </summary>/// <typeparam name="T"></typeparam>/// <param name="strType"></param>/// <returns></returns>public static T GetEnumType<T>(string strType){T t = (T)Enum.Parse(typeof(T), strType);return t;}
获取RGB色彩
/// <summary>/// 获取RGB色彩/// </summary>/// <param name="intR">红色值</param>/// <param name="intG">绿色值</param>/// <param name="intB">蓝色值</param>/// <param name="transparency">透明度</param>/// <returns>返回IRgbColor类型的值</returns>public static IRgbColor GetRgbColor(int intR, int intG, int intB, byte transparency){IRgbColor pRgbColor = null;if (intR < 0 || intR > 255 || intG < 0 || intG > 255 || intB < 0 || intB > 255){return pRgbColor;}pRgbColor = new RgbColorClass();pRgbColor.Red = intR;pRgbColor.Green = intG;pRgbColor.Blue = intB;pRgbColor.Transparency = transparency;return pRgbColor;}
