创建内存工作空间

  1. /// <summary>
  2. /// 创建内存工作空间,将数据保存在内存中
  3. /// </summary>
  4. public static IWorkspace GetWorkspace()
  5. {
  6. IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
  7. IWorkspaceName workspaceName = workspaceFactory.Create(null, "MyWorkspace", null, 0);
  8. IName name = (IName)workspaceName;
  9. IWorkspace workspace = (IWorkspace)name.Open();
  10. return workspace;
  11. }

根据指定类型获取或创建要素类

  1. /// <summary>
  2. /// 根据类型名称获取要素类,如果不存在则创建一个该类型的要素类
  3. /// </summary>
  4. /// <param name="workspace">工作空间</param>
  5. /// <param name="spatialReference">空间参照</param>
  6. /// <param name="fClsGeoType">要素类几何类型名称</param>
  7. /// <returns></returns>
  8. private static IFeatureClass GetFeatureClass(IWorkspace workspace, ISpatialReference spatialReference, string fClsGeoType)
  9. {
  10. IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
  11. IFeatureClass featureClass = null;
  12. try
  13. {
  14. featureClass = featureWorkspace.OpenFeatureClass(fClsGeoType);
  15. return featureClass;
  16. }
  17. catch
  18. {
  19. }
  20. UID CLSEXT = null;
  21. UID CLSID = new UIDClass();
  22. CLSID.Value = "esriGeoDatabase.Feature";
  23. string strConfigKeyword = "";
  24. IGeometryDef pGeometryDef = new GeometryDefClass();
  25. IGeometryDefEdit geometryDefEdit = pGeometryDef as IGeometryDefEdit;
  26. geometryDefEdit.GridCount_2 = 1; // 设置空间索引(个人数据库仅支持1个)
  27. geometryDefEdit.GeometryType_2 = GetEsriGeometryType(fClsGeoType); // 设置为几何类型
  28. geometryDefEdit.SpatialReference_2 = spatialReference;
  29. IFields fields = new FieldsClass();
  30. IFieldsEdit fieldsEdit = fields as IFieldsEdit;
  31. // 创建OBJECTID字段
  32. IField fieldOID = new Field();
  33. IFieldEdit fieldEditOID = fieldOID as IFieldEdit;
  34. fieldEditOID.Name_2 = "OBJECTID";
  35. fieldEditOID.AliasName_2 = "OBJECTID";
  36. fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;
  37. fieldEditOID.Editable_2 = false;
  38. fieldsEdit.AddField(fieldOID);
  39. // 创建几何字段
  40. IField fieldShape = new Field();
  41. IFieldEdit fieldEditShape = fieldShape as IFieldEdit;
  42. fieldEditShape.Name_2 = "SHAPE";
  43. fieldEditShape.AliasName_2 = "SHAPE";
  44. fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry;
  45. fieldEditShape.GeometryDef_2 = pGeometryDef;
  46. fieldEditShape.Editable_2 = true;
  47. fieldsEdit.AddField(fieldShape);
  48. string strShapeField = fieldShape.Name;
  49. IFieldChecker fieldChecker = new FieldCheckerClass();
  50. fieldChecker.ValidateWorkspace = workspace;
  51. IEnumFieldError enumFieldError;
  52. IFields validatedFields;
  53. fieldChecker.Validate(fields, out enumFieldError, out validatedFields);
  54. featureClass = featureWorkspace.CreateFeatureClass(fClsGeoType, validatedFields, CLSID, CLSEXT, esriFeatureType.esriFTSimple, strShapeField, strConfigKeyword);
  55. return featureClass;
  56. }

获取线要素

  1. /// <summary>
  2. /// 创建一个新的线状符号,并将其加入点要素类中
  3. /// </summary>
  4. public static void CreateSimpleLine(IWorkspace workspace, IMap map, IPointCollection linePointCollection, IColor color, double width, esriSimpleLineStyle style)
  5. {
  6. // 创建线图形
  7. IPolyline pPolyline = linePointCollection as IPolyline;
  8. IGeometry polylineGeometry = pPolyline as IGeometry;
  9. ITopologicalOperator pTop = polylineGeometry as ITopologicalOperator;
  10. pTop.Simplify();
  11. // 获取线要素类并添加一个新的线要素
  12. IFeatureClass fCls = GetFeatureClass(workspace, map.SpatialReference, "esriSLS");
  13. IFeature pFeature = fCls.CreateFeature();
  14. pFeature.Shape = polylineGeometry;
  15. pFeature.Store();
  16. // 新建线要素图层
  17. IFeatureLayer featureLayer = new FeatureLayerClass();
  18. featureLayer.FeatureClass = fCls;
  19. IGeoFeatureLayer pGeoFeatLyr = featureLayer as IGeoFeatureLayer;
  20. // 设置线符号样式
  21. ISimpleLineSymbol pLineSymbol = new SimpleLineSymbolClass();
  22. pLineSymbol.Color = color;
  23. pLineSymbol.Width = width;
  24. pLineSymbol.Style = style;
  25. ISymbol symbol = pLineSymbol as ISymbol;
  26. // 更改线图层的样式(使之生效)
  27. ISimpleRenderer simpleRenderer = new SimpleRendererClass();
  28. simpleRenderer.Symbol = symbol;
  29. pGeoFeatLyr.Renderer = simpleRenderer as IFeatureRenderer;
  30. // 添加图层到地图中
  31. map.AddLayer(featureLayer as ILayer);
  32. }

小技巧

文本转枚举类型

(源代码来源于网络)

  1. /// <summary>
  2. /// 字符串转枚举类型
  3. /// </summary>
  4. /// <typeparam name="T"></typeparam>
  5. /// <param name="strType"></param>
  6. /// <returns></returns>
  7. public static T GetEnumType<T>(string strType)
  8. {
  9. T t = (T)Enum.Parse(typeof(T), strType);
  10. return t;
  11. }

获取RGB色彩

  1. /// <summary>
  2. /// 获取RGB色彩
  3. /// </summary>
  4. /// <param name="intR">红色值</param>
  5. /// <param name="intG">绿色值</param>
  6. /// <param name="intB">蓝色值</param>
  7. /// <param name="transparency">透明度</param>
  8. /// <returns>返回IRgbColor类型的值</returns>
  9. public static IRgbColor GetRgbColor(int intR, int intG, int intB, byte transparency)
  10. {
  11. IRgbColor pRgbColor = null;
  12. if (intR < 0 || intR > 255 || intG < 0 || intG > 255 || intB < 0 || intB > 255)
  13. {
  14. return pRgbColor;
  15. }
  16. pRgbColor = new RgbColorClass();
  17. pRgbColor.Red = intR;
  18. pRgbColor.Green = intG;
  19. pRgbColor.Blue = intB;
  20. pRgbColor.Transparency = transparency;
  21. return pRgbColor;
  22. }