zoukankan      html  css  js  c++  java
  • ArcGIS Engine 常用方法

    空间关系

    计算两点间距离
    1         /// <summary>计算两点间距离
    2 /// </summary>
    3 /// <param name="point1"></param>
    4 /// <param name="point2"></param>
    5 /// <returns></returns>
    6 public static double getDistanceOfTwoPoints(ESRI.ArcGIS.Geometry.IPoint point1, ESRI.ArcGIS.Geometry.IPoint point2)
    7 {
    8 return Math.Sqrt((point1.X - point2.X) * (point1.X - point2.X) + (point1.Y - point2.Y) * (point1.Y - point2.Y));
    9 }
    feature平移
    1 IGeometry geo=feature.Shape;
    2 ((ITransform2D)geo).Move(20,20);


     

    计算范围

    得到点集合的n倍Envelope范围
     1         /// <summary>得到点集合的n倍Envelope范围
    2 /// </summary>
    3 /// <param name="points"></param>
    4 /// <param name="zoomInNumber"></param>
    5 /// <returns></returns>
    6 public static IEnvelope getBigEnvelope(IPointCollection points, double zoomInNumber)
    7 {
    8 IEnvelope result = new EnvelopeClass();
    9
    10 double xmax = 0, xmin = 999999999999, ymax = 0, ymin = 999999999999;
    11
    12 for (int i = 0; i < points.PointCount; i++)
    13 {
    14 ESRI.ArcGIS.Geometry.IPoint p = points.get_Point(i);
    15 if (xmax < p.X) xmax = p.X;
    16 if (ymax < p.Y) ymax = p.Y;
    17 if (xmin > p.X) xmin = p.X;
    18 if (ymin > p.Y) ymin = p.Y;
    19 }
    20 result.XMax = xmax + xmax - xmin;
    21 result.XMin = xmin - xmax + xmin;
    22 result.YMax = ymax + ymax - ymin;
    23 result.YMin = ymin - ymax + ymin;
    24
    25 return result;
    26 }

    查询

    查询要素,返回多个要素union后的Geometry
     1         /// <summary>查询要素
    2 /// 多个要素取其union后的范围
    3 /// </summary>
    4 /// <param name="map">地图</param>
    5 /// <param name="layer">矢量图层</param>
    6 /// <param name="where">查询条件</param>
    7 /// <returns></returns>
    8 public static IGeometry queryUnionGeometry(IMap map, IFeatureLayer layer, string where)
    9 {
    10 if (layer == null) return null;
    11
    12 IFeatureClass featCls = layer.FeatureClass;
    13
    14 IQueryFilter filter = new QueryFilterClass();
    15 filter.WhereClause = where;
    16 IFeatureCursor cursor = featCls.Search(filter, false);
    17
    18 IFeature feature = cursor.NextFeature();
    19 if (feature == null) return null;
    20
    21 Boolean isFirstFeature = true;
    22 IGeometry union = null;
    23 while (feature != null)
    24 {
    25 if (isFirstFeature)
    26 {
    27 isFirstFeature = false;
    28 union = feature.Shape;
    29 }
    30 else
    31 {
    32 union=((ITopologicalOperator)union).Union(feature.Shape);
    33 }
    34 feature = cursor.NextFeature();
    35 }
    36
    37 return union; ;
    38 }

    查找图层

    得到地图上图层列表
     1         /// <summary>得到地图上图层列表
    2 /// </summary>
    3 /// <param name="map"></param>
    4 /// <returns></returns>
    5 public static IEnumLayer getFeatureLayers(IMap map)
    6 {
    7 UID uid = new UIDClass();
    8
    9 //{6CA416B1-E160-11D2-9F4E-00C04F6BC78E} IDataLayer (all)
    10 //{40A9E885-5533-11d0-98BE-00805F7CED21} IFeatureLayer
    11 //{E156D7E5-22AF-11D3-9F99-00C04F6BC78E} IGeoFeatureLayer
    12 //{34B2EF81-F4AC-11D1-A245-080009B6F22B} IGraphicsLayer
    13 //{5CEAE408-4C0A-437F-9DB3-054D83919850} IFDOGraphicsLayer
    14 //{0C22A4C7-DAFD-11D2-9F46-00C04F6BC78E} ICoverageAnnotationLayer
    15 //{EDAD6644-1810-11D1-86AE-0000F8751720} IGroupLayer
    16 uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";//FeatureLayer
    17 IEnumLayer layers = map.get_Layers(uid, true);
    18 return layers;
    19 }
    根据名称在地图上查找对应矢量图层
     1         /// <summary>根据名称在地图上查找对应矢量图层
    2 /// </summary>
    3 /// <param name="map"></param>
    4 /// <param name="layerName"></param>
    5 /// <returns></returns>
    6 public static IFeatureLayer getFeatureLayer(IMap map,string layerName)
    7 {
    8 IEnumLayer layers = getFeatureLayers(map);
    9 layers.Reset();
    10 ILayer layer = null;
    11 while ((layer = layers.Next()) != null)
    12 {
    13 if (layer.Name == layerName)
    14 return layer as IFeatureLayer;
    15 }
    16 return null;
    17 }

    选择要素集

    得到指定图层上的选中的要素集
     1         /// <summary>得到指定图层上的选中的features
    2 /// </summary>
    3 /// <param name="map">地图</param>
    4 /// <param name="layerName">图层名</param>
    5 /// <returns>IFeatureCursor</returns>
    6 public static IFeatureCursor getSelectFeatures(IMap map, string layerName)
    7 {
    8 IFeatureLayer featureLayer = Util.getFeatureLayer(map, layerName); ;
    9
    10 //得到选中的feature
    11 IFeatureClass inputFeatureClass = featureLayer.FeatureClass;
    12 IDataset inputDataset = (IDataset)inputFeatureClass;
    13 IDatasetName inputDatasetName = (IDatasetName)inputDataset.FullName;
    14 IFeatureSelection featureSelection = (IFeatureSelection)featureLayer;
    15 ISelectionSet selectionSet = featureSelection.SelectionSet;
    16
    17 ICursor cursor;
    18 selectionSet.Search(null, false, out cursor);
    19 IFeatureCursor featureCursor = (IFeatureCursor)cursor;
    20
    21 return featureCursor;
    22 }

    加载数据

    将GDB中数据添加至地图
     1         /// <summary>将GDB中数据添加至地图
    2 /// </summary>
    3 /// <param name="map">地图IMap</param>
    4 /// <param name="gdbPath">GDB路径</param>
    5 /// <param name="name">数据名称</param>
    6 public static void addFeatLayerToMapFromGDB(IMap map,string gdbPath,string name)
    7 {
    8 IWorkspaceFactory toWsf = new FileGDBWorkspaceFactoryClass();
    9 IFeatureWorkspace toFeatWs = (IFeatureWorkspace)toWsf.OpenFromFile(gdbPath, 0);
    10 IFeatureClass featCls = toFeatWs.OpenFeatureClass(name);
    11 ILayer layer=new FeatureLayerClass();
    12 layer.Name = name;
    13 ((IGeoFeatureLayer)layer).FeatureClass=featCls;
    14 if (featCls != null) {
    15 map.AddLayer(layer);
    16 }
    17 }
    加载dwg中的polygon图层

    新建shapefile文件/GDB

    创建点shapefile
     1         /// <summary>创建点shapefile
    2 /// </summary>
    3 /// <param name="filePath">target point shapefile path</param>
    4 /// <param name="fileName">target point shapefile name</param>
    5 public static void createPointShapefile(IMap map, string filePath, string fileName)
    6 {
    7 //建立shape字段
    8 IFields pFields = new FieldsClass();
    9 IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
    10 IField pField = new FieldClass();
    11 IFieldEdit pFieldEdit = pField as IFieldEdit;
    12 pFieldEdit.Name_2 = "Shape";
    13 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
    14
    15 //设置geometry definition
    16 IGeometryDef pGeometryDef = new GeometryDefClass();
    17 IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
    18 pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//点、线、面
    19 pGeometryDefEdit.SpatialReference_2 = map.SpatialReference;
    20 pFieldEdit.GeometryDef_2 = pGeometryDef;
    21 pFieldsEdit.AddField(pField);
    22
    23 //新建字段
    24 pField = new FieldClass();
    25 pFieldEdit = pField as IFieldEdit;
    26 pFieldEdit.Length_2 = 10;
    27 pFieldEdit.Name_2 = "id";
    28 pFieldEdit.AliasName_2 = "id";
    29 pFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
    30 pFieldsEdit.AddField(pField);
    31 //继续增加其它字段
    32
    33 IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
    34 IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace;
    35
    36 //IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();
    37 //IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace;
    38
    39 int i = fileName.IndexOf(".shp");
    40 if (i == -1)
    41 pFeatureWorkspace.CreateFeatureClass(fileName + ".shp", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
    42 else
    43 pFeatureWorkspace.CreateFeatureClass(fileName, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
    44
    45 //MessageBox.Show("OK");
    46
    47 }

         将选中要素另存至GDB

      另存为shapefile类似,修改workspacefactory为ShapefileWorkspaceFactoryClass,修改对应路径即可。

    将选中的line feature作为线文件存至gdb
     1 /// <summary>将选中的line feature作为线文件存至gdb
    2 /// </summary>
    3 /// <param name="featureLayer">select layer</param>
    4 /// <param name="gdbPath">gdb路径</param>
    5 /// <param name="name">文件名称</param>
    6 public static void saveSelectLineFeatureToGDB(IMap map,IFeatureLayer featureLayer,string gdbPath,string name)
    7 {
    8 IFeatureClass inputFeatureClass = featureLayer.FeatureClass;
    9 IDataset inputDataset = (IDataset)inputFeatureClass;
    10 IDatasetName inputDatasetName = (IDatasetName)inputDataset.FullName;
    11
    12 // Get the layer's selection set.
    13 IFeatureSelection featureSelection = (IFeatureSelection)featureLayer;
    14 ISelectionSet selectionSet = featureSelection.SelectionSet;
    15
    16 IPropertySet ps = new PropertySetClass();
    17 ps.SetProperty("DATABASE", gdbPath);
    18
    19 IWorkspaceFactory wsf = new FileGDBWorkspaceFactoryClass();
    20 IWorkspace ws = null;
    21 try
    22 {
    23 ws = wsf.Open(ps, 0);
    24 }
    25 catch (Exception e)
    26 {
    27 Console.WriteLine(e.Message);
    28 }
    29 IDataset ds = (IDataset)ws;
    30 IWorkspaceName wsName = (IWorkspaceName)ds.FullName;
    31 IFeatureClassName featClsName = new FeatureClassNameClass();
    32 IDatasetName dsName = (IDatasetName)featClsName;
    33 dsName.WorkspaceName = wsName;
    34 dsName.Name = name;
    35
    36 //// Use the IFieldChecker interface to make sure all of the field names are valid for a shapefile.
    37 IFieldChecker fieldChecker = new FieldCheckerClass();
    38 IFields shapefileFields = null;
    39 IEnumFieldError enumFieldError = null;
    40 fieldChecker.InputWorkspace = inputDataset.Workspace;
    41 fieldChecker.ValidateWorkspace = ws;
    42 fieldChecker.Validate(inputFeatureClass.Fields, out enumFieldError, out shapefileFields);
    43
    44 // At this point, reporting/inspecting invalid fields would be useful, but for this example it's omitted.
    45
    46 // We also need to retrieve the GeometryDef from the input feature class.
    47 int shapeFieldPosition = inputFeatureClass.FindField(inputFeatureClass.ShapeFieldName);
    48 IFields inputFields = inputFeatureClass.Fields;
    49
    50 IField shapeField = inputFields.get_Field(shapeFieldPosition);
    51 IGeometryDef geometryDef = shapeField.GeometryDef;
    52
    53 IGeometryDef pGeometryDef = new GeometryDef();
    54 IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
    55 pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
    56 pGeometryDefEdit.SpatialReference_2 = map.SpatialReference;
    57
    58 // Now we can create a feature data converter.
    59 IFeatureDataConverter2 featureDataConverter2 = new FeatureDataConverterClass();
    60 IEnumInvalidObject enumInvalidObject = featureDataConverter2.ConvertFeatureClass(inputDatasetName, null,
    61 selectionSet, null, featClsName, pGeometryDef, shapefileFields, "", 1000, 0);
    62
    63 // Again, checking for invalid objects would be useful at this point...
    64
    65 inputFeatureClass = null;
    66 ds = null;
    67 ws = null;
    68 wsf = null;
    69 }

    编辑

    编辑--删除
     1             //加载目标点图层
    2 //IWorkspaceFactory toWsf = new ShapefileWorkspaceFactoryClass();
    3 IWorkspaceFactory toWsf = new FileGDBWorkspaceFactoryClass();
    4 IFeatureWorkspace toFeatWs = (IFeatureWorkspace)toWsf.OpenFromFile(fullGdbPath, 0); ;
    5 IFeatureClass toFeatCls = toFeatWs.OpenFeatureClass(pointLayerName);
    6
    7 //编辑目标点图层
    8 IWorkspaceEdit toEdit = (IWorkspaceEdit)toFeatWs;
    9 try
    10 {
    11 toEdit.StartEditing(true);
    12 toEdit.StartEditOperation();
    13
    14 IQueryFilter filter=new QueryFilterClass();
    15 filter.WhereClause="id=0";
    16 IFeatureCursor cursor = toFeatCls.Search(filter, false);
    17
    18 IFeature feature = cursor.NextFeature();
    19
    20 while(feature != null)
    21 {
    22 feature.Delete();
    23 feature = cursor.NextFeature();
    24 }
    25
    26 }
    27 catch (Exception e)
    28 {
    29 Console.WriteLine(e.Message);
    30 }
    31 finally
    32 {
    33 toEdit.StopEditOperation();
    34 toEdit.StopEditing(true);
    35 }
    编辑--新增
    1 IFeature toFeature = toFeatCls.CreateFeature();
    2 ESRI.ArcGIS.Geometry.IPoint newPoint = new PointClass();
    3 newPoint.PutCoords(fromPoint.X, fromPoint.Y);
    4 toFeature.Shape = newPoint;
    5 toFeature.set_Value(2, nowPointId);
    6 toFeature.Store();

    label

    显示label
     1         /// <summary>显示label
    2 /// </summary>
    3 /// <param name="map"></param>
    4 /// <param name="featLayer"></param>
    5 /// <param name="field"></param>
    6 public static void displayLabel(IMap map, IGeoFeatureLayer featLayer, string field)
    7 {
    8 featLayer.DisplayAnnotation = true;
    9 IAnnotateLayerPropertiesCollection pAnnProCol = featLayer.AnnotationProperties;
    10 ILabelEngineLayerProperties pLabelEngine = null;
    11 IAnnotateLayerProperties prop;
    12 IBasicOverposterLayerProperties pBasicOverposterLayerProps = new BasicOverposterLayerProperties();
    13 pBasicOverposterLayerProps.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;
    14 ITextSymbol symbol = new TextSymbolClass();
    15 IColor c = new RgbColorClass();
    16 c.RGB = 123;
    17 symbol.Color = c;
    18 symbol.Size = 4;
    19
    20 IBasicOverposterLayerProperties bo = new BasicOverposterLayerPropertiesClass();
    21 IPointPlacementPriorities ipp = new PointPlacementPrioritiesClass();
    22 ipp.BelowCenter = 1;
    23 bo.PointPlacementPriorities = ipp;
    24 for (int i = 0; i < pAnnProCol.Count; i++)
    25 {
    26 IElementCollection ec = new ElementCollectionClass();
    27 pAnnProCol.QueryItem(i, out prop, out ec, out ec);
    28 pLabelEngine = (ILabelEngineLayerProperties)prop;
    29 pLabelEngine.Expression = "[" + field + "]";
    30 pLabelEngine.Symbol = symbol;
    31 pLabelEngine.BasicOverposterLayerProperties = bo;
    32 }
    33
    34 ITrackCancel pCon = new CancelTracker();
    35 pCon.Continue();
    36 featLayer.Draw(esriDrawPhase.esriDPAnnotation, ((IActiveView)map).ScreenDisplay, pCon);
    37 }
    label 转换为 Annotation
     1         /// <summary>label2Annotation
    2 /// </summary>
    3 /// <param name="fullGdbPath"></param>
    4 /// <param name="featLayer"></param>
    5 /// <param name="displayField"></param>
    6 private void ConvertLabelsToGDBAnnotationSingleLayer(string fullGdbPath,IFeatureLayer featLayer,string displayField)
    7 {
    8 IMap map = m_map;
    9
    10 IPropertySet ps = new PropertySetClass();
    11 ps.SetProperty("DATABASE", fullGdbPath);
    12
    13 IWorkspaceFactory wsf = new FileGDBWorkspaceFactoryClass();
    14 IWorkspace ws = wsf.Open(ps, 0);
    15 IFeatureWorkspace featWs = (IFeatureWorkspace)ws;
    16 IGeoFeatureLayer pGeoFeatureLayer = featLayer as IGeoFeatureLayer;
    17 IFeatureClass featCls = pGeoFeatureLayer.FeatureClass;
    18
    19 //设置指定字段为label字段并显示
    20 Util.displayLabel(map, pGeoFeatureLayer, displayField);
    21 ((IActiveView)map).PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
    22
    23 IConvertLabelsToAnnotation pConvertLabelsToAnnotation = new
    24 ConvertLabelsToAnnotationClass();
    25 ITrackCancel pTrackCancel = new CancelTrackerClass();
    26
    27 //Change global level options for the conversion by sending in different parameters to the next line.
    28 pConvertLabelsToAnnotation.Initialize(map,
    29 esriAnnotationStorageType.esriDatabaseAnnotation,
    30 esriLabelWhichFeatures.esriAllFeatures, true, pTrackCancel, null);
    31
    32 if (featCls != null)
    33 {
    34 IDataset pDataset = featCls as IDataset;
    35
    36 //Add the layer information to the converter object. Specify the parameters of the output annotation feature class here as well.
    37 pConvertLabelsToAnnotation.AddFeatureLayer(pGeoFeatureLayer,
    38 pGeoFeatureLayer.Name + "_anno", featWs,
    39 featCls.FeatureDataset, true, false, false, true, true,
    40 "");
    41
    42 //Do the conversion.
    43 pConvertLabelsToAnnotation.ConvertLabels();
    44 IEnumLayer pEnumLayer = pConvertLabelsToAnnotation.AnnoLayers;
    45
    46 //Turn off labeling for the layer converted.
    47 pGeoFeatureLayer.DisplayAnnotation = false;
    48
    49 //Add the result annotation layer to the map.
    50 map.AddLayers(pEnumLayer, true);
    51
    52 //Refresh the map to update the display.
    53 IActiveView pActiveView = map as IActiveView;
    54 pActiveView.Refresh();
    55 }
    56 }

    GP

    转换cad时,从shp转换cad不成功,从gdb中转换成功,原因不知。

    GP:createCadXData需要在转换cad之前执行,给cad添加扩展属性

    GP:shp2cad
     1         /// <summary>GP:shp2cad
    2 /// </summary>
    3 /// <param name="fromFile"></param>
    4 /// <param name="toFile"></param>
    5 public static void convertGdb2Cad(string fromFile, string toFile)
    6 {
    7 Geoprocessor GP = new Geoprocessor();
    8
    9 ESRI.ArcGIS.ConversionTools.ExportCAD tool = new
    10 ESRI.ArcGIS.ConversionTools.ExportCAD();
    11 //tool.in_features = "d:/lzx/data/road/test.gdb/line_Annod";
    12 //tool.Output_File = "d:/lzx/data/kk2.dwg";
    13 tool.in_features = fromFile;
    14 tool.Output_File = toFile;
    15 tool.Output_Type = "DWG_R2004";
    16 GP.Execute(tool, null);
    17
    18 //MessageBox.Show("shp2cad ok");
    19 }
    GP:shp export to gdb
     1         /// <summary>GP:shp export to gdb
    2 /// </summary>
    3 /// <param name="fromFile"></param>
    4 /// <param name="toFile"></param>
    5 public static void convertShp2Gdb(string inputFeatures, string outputGdb, string outputName)
    6 {
    7
    8 Geoprocessor GP = new Geoprocessor();
    9
    10 ESRI.ArcGIS.ConversionTools.FeatureClassToGeodatabase tool = new ESRI.ArcGIS.ConversionTools.FeatureClassToGeodatabase();
    11 tool.Input_Features = inputFeatures;
    12 tool.Output_Geodatabase = outputGdb;
    13
    14 GP.Execute(tool, null);
    15
    16 //MessageBox.Show("shp2gdb ok");
    17
    18 }
    GP:将线文件的节点转换为点文件
     1         /// <summary>将线文件的节点转换为点文件
    2 /// 使用gp
    3 /// </summary>
    4 /// <param name="fromFile"></param>
    5 /// <param name="toFile"></param>
    6 public static void convertFeatureVerticesToPoints(string fromFile, string toFile)
    7 {
    8 // Initialize the geoprocessor.
    9 Geoprocessor GP = new Geoprocessor();
    10
    11 ESRI.ArcGIS.DataManagementTools.FeatureVerticesToPoints tool = new
    12 ESRI.ArcGIS.DataManagementTools.FeatureVerticesToPoints();
    13
    14 tool.in_features = fromFile;
    15 tool.out_feature_class = toFile;
    16 tool.point_location = "BOTH_ENDS";
    17 GP.Execute(tool, null);
    18 }
    GP:createCadXData
     1         /// <summary>GP:createCadXData
    2 /// </summary>
    3 /// <param name="fromFile"></param>
    4 /// <param name="toFile"></param>
    5 public static void createCadXData(string fromFile,string field)
    6 {
    7 Geoprocessor GP = new Geoprocessor();
    8 CreateCADXData tool = new CreateCADXData(fromFile, field, "ArcGIS", "ADE");
    9 GP.Execute(tool, null);
    10 //MessageBox.Show(" ok");
    11 }

    地图显示/刷新

    清除选择集并刷新
     1         /// <summary>清除选择集并刷新
    2 /// </summary>
    3 /// <param name="map"></param>
    4 public static void clearSelectionInMap(IMap map)
    5 {
    6 IActiveView activeView = (IActiveView)map;
    7 activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
    8 map.ClearSelection();
    9 //需要在前后刷新2次
    10 activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
    11 }
    删除地图中除指定图层组外的其他图层
     1         /// <summary>删除地图中除指定图层组外的其他图层
    2 /// </summary>
    3 /// <param name="map"></param>
    4 /// <param name="layerNames">不删除的图层列表</param>
    5 public static void clearLayers(IMap map, string[] layerNames)
    6 {
    7 Boolean isToDel = true;
    8 IEnumLayer layers = Util.getFeatureLayers(map);
    9 layers.Reset();
    10 ILayer layer = null;
    11 while ((layer = layers.Next()) != null)
    12 {
    13 for (int i = 0; i < layerNames.Length; i++)
    14 {
    15 if (layer.Name == layerNames[i])
    16 {
    17 isToDel = false;
    18 }
    19 }
    20 if (isToDel)
    21 {
    22 map.DeleteLayer(layer);
    23 System.Runtime.InteropServices.Marshal.ReleaseComObject(layer);
    24 }
    25 }
    26 }
    删除地图中除指定图层外的其他图层
     1         /// <summary>删除地图中除指定图层外的其他图层
    2 /// </summary>
    3 /// <param name="map"></param>
    4 /// <param name="layerNames">不删除的图层列表</param>
    5 public static void clearLayers(IMap map, string layerName)
    6 {
    7 Boolean isToDel = true;
    8 IEnumLayer layers = Util.getFeatureLayers(map);
    9 layers.Reset();
    10 ILayer layer = null;
    11 while ((layer = layers.Next()) != null)
    12 {
    13 if (layer.Name != layerName)
    14 {
    15 map.DeleteLayer(layer);
    16 System.Runtime.InteropServices.Marshal.ReleaseComObject(layer);
    17 }
    18 }
    19 }
    缩放到指定要素并高亮显示
     1         /// <summary>缩放到指定要素并高亮显示
    2 /// </summary>
    3 /// <param name="av"></param>
    4 /// <param name="env"></param>
    5 public static void zoomAndHighlight(IActiveView av, IGeometry geo)
    6 {
    7 av.GraphicsContainer.DeleteAllElements();
    8 av.Extent = geo.Envelope;
    9 IElement element = new LineElementClass();
    10 element.Geometry = geo;
    11
    12 IRgbColor color = new RgbColorClass();
    13 color.Red = 255;
    14 color.Green = 0;
    15 color.Blue = 0;
    16 ISimpleLineSymbol symbol = new SimpleLineSymbolClass();
    17 symbol.Color = (IColor)color;
    18 symbol.Width = 2;
    19 symbol.Style = esriSimpleLineStyle.esriSLSSolid;
    20 ((ILineElement)element).Symbol = (ILineSymbol)symbol;
    21
    22 av.GraphicsContainer.AddElement(element, 0);
    23 av.Refresh();
    24 }

    Element

    根据RGB值得到IColor
    1 public static IColor getColor(int R, int G, int B){
    2 IRgbColor color=new RgbColorClass();
    3 color.Red=R;
    4 color.Green=G;
    5 color.Blue=B;
    6 return (IColor)color;
    7 }
    根据多边形得到填充element
     1 public static IElement getFillShapeElement(IGeometry geo){
    2 IElement element=new PolygonElementClass();
    3 element.Geometry=geo;
    4
    5 ISimpleLineSymbol symbol=new SimpleLineSymbolClass();
    6 symbol.Color=getColor(255,0,0);
    7 symbol.Width=2;
    8 symbol.Style=esriSimpleLneStyle.esriSLSolid;
    9
    10 ISimpleFillSymbol fillSymbol=new SimpleFillSymbolClass();
    11 fillSymbol.outline=(ILineSymbol)symbol;
    12 fillSymbol.Color=getColor(255,250,200);
    13 ((IFillShapeElement)element).symbol=(IFillSymbol)fillSymbol;
    14
    15 return element;
    16 }















  • 相关阅读:
    Knockout应用开发指南 第八章:简单应用举例(2)
    微软ASP.NET站点部署指南(7):生产环境部署
    Knockout应用开发指南 第七章:Mapping插件
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(6)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(5)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(3)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(9)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(8)
    Microsoft Visual Studio .NET 2003 引导程序插件下载地址(非官方)
    Vs2010在没有安装SQL Server 2005/2008 Express时如何连接MDF数据文件?
  • 原文地址:https://www.cnblogs.com/myparamita/p/2352182.html
Copyright © 2011-2022 走看看