public static void ExtractSpecifyHRegFeatures(IWorkspaceName iworkspaceName_0, IMap imap_0, IGeometry igeometry_0, IMap imap_1) { (new SelectionEnvironment()).CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew; IWorkspace workspace = (iworkspaceName_0 as IName).Open() as IWorkspace; for (int i = imap_0.LayerCount - 1; i >= 0; i--) { ILayer layer = imap_0.Layer[i]; if ((!layer.Visible ? false : layer is IFeatureLayer)) { try { IEnvelope areaOfInterest = layer.AreaOfInterest; ITopologicalOperator topologicalOperator = (ITopologicalOperator)((IClone)igeometry_0).Clone(); topologicalOperator.Simplify(); if (topologicalOperator.IsSimple) { topologicalOperator.Clip(areaOfInterest); } } catch (Exception exception) { } if (!igeometry_0.IsEmpty) { ClipHelper.ExtractSelectFeatureFormFeatureCursor(layer, ClipHelper.searchFeatureFormLayer(layer, igeometry_0), (IFeatureWorkspace)workspace, igeometry_0, imap_1); } } } Marshal.ReleaseComObject(workspace); workspace = null; }
private void 给出可测区域ToolStripMenuItem_Click(object sender, EventArgs e) { IGeometry buffer; ISelection pSeletion = axMapControl1.Map.FeatureSelection; IEnumFeature pEnumFeature = (IEnumFeature)pSeletion; IGraphicsContainer graphicsContainer = axMapControl1.ActiveView.GraphicsContainer; //graphicsContainer.DeleteAllElements(); IFeature pFeature = pEnumFeature.Next(); //选择集 double bufferDistance = GlobalData.dist; if (bufferDistance <= 0.0) { MessageBox.Show("距离设置错误"); return; } while (pFeature != null) { ITopologicalOperator topoOperator = pFeature.Shape as ITopologicalOperator; buffer = topoOperator.Buffer(bufferDistance); topoOperator = buffer as ITopologicalOperator; IGeometry result; if (rectpElement != null) { topoOperator.Clip(rectpElement.Geometry.Envelope); } IElement element = new PolygonElementClass(); element.Geometry = buffer; //创建矩形轮廓的样式 ILineSymbol linesymbol = new SimpleLineSymbolClass(); linesymbol.Width = 2; IRgbColor rgbColor = new RgbColorClass(); rgbColor.Red = 65; rgbColor.Green = 105; rgbColor.Blue = 225; rgbColor.Transparency = 255; linesymbol.Color = rgbColor; IFillSymbol fillsymbol = new SimpleFillSymbolClass(); rgbColor.Transparency = 0; fillsymbol.Color = rgbColor; fillsymbol.Outline = linesymbol; IFillShapeElement fillshapeElement = element as IFillShapeElement; fillshapeElement.Symbol = fillsymbol; // 添加绘图元素 graphicsContainer.AddElement(element, 0); pFeature = pEnumFeature.Next(); } axMapControl1.Refresh(); }
public void EraseOper() { ISpatialFilter tSF = new SpatialFilterClass(); tSF.Geometry = _Envelope; tSF.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; //求出与裁切框相交要素 IFeatureCursor tFeatureCursor = _FeatureClass.Search(tSF, false); IFeature tFeature = tFeatureCursor.NextFeature(); while (tFeature != null) { IGeometry tGeo2 = tFeature.ShapeCopy; ITopologicalOperator tTope2 = tGeo2 as ITopologicalOperator; tTope2.Simplify(); IGeometry tGeo = tFeature.ShapeCopy; ITopologicalOperator tTope = tGeo as ITopologicalOperator; tTope.Simplify(); //用Envelope对要素进行裁切 tTope.Clip(this._Envelope); IGeometry tGeoClip = (IGeometry)tTope; //用裁切出来的要素,再与其源要素进行求差处理,即得到外围要素 IGeometry tGeoDe = tTope2.Difference(tGeoClip); //把外围要素赋予源要素 tFeature.Shape = tGeoDe; tFeature.Store(); tFeature = tFeatureCursor.NextFeature(); } ReleaseCom(tFeatureCursor); }
/// <summary> /// Clip features in the recordset to the tile envelope /// </summary> /// <param name="featureCursor"></param> /// <param name="recordset"></param> /// <param name="tileEnvelope"></param> private void ClipFeaturesToTile(ref IFeatureCursor featureCursor, ref IRecordSet recordset, IEnvelope tileEnvelope) { //IFeatureCursor cursor = recordset.get_Cursor(true) as IFeatureCursor; featureCursor = recordset.get_Cursor(false) as IFeatureCursor; IFeature feature = featureCursor.NextFeature(); ITopologicalOperator topologicalOperator = null; while (feature != null) { topologicalOperator = feature.Shape as ITopologicalOperator; // modifying shape so don't use ShapeCopy // TODO: verify clip geometry is retained in recordset ******************************** topologicalOperator.Clip(tileEnvelope); feature = featureCursor.NextFeature(); } }
public static void ExtractSpecifyHRegFeatures(IWorkspaceName iworkspaceName_0, IMap imap_0, IGeometry igeometry_0, IMap imap_1) { (new SelectionEnvironment()).CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew; IWorkspace workspace = (iworkspaceName_0 as IName).Open() as IWorkspace; List <IFeatureLayer> featureLayers = new List <IFeatureLayer>(); UID uIDClass = new UID() { Value = "{6CA416B1-E160-11D2-9F4E-00C04F6BC78E}" }; IEnumLayer layers = imap_0.Layers[uIDClass, true]; layers.Reset(); for (ILayer i = layers.Next(); i != null; i = layers.Next()) { if ((!i.Visible ? false : i is IFeatureLayer)) { featureLayers.Add(i as IFeatureLayer); } } for (int j = featureLayers.Count - 1; j >= 0; j--) { IFeatureLayer item = featureLayers[j]; try { IEnvelope areaOfInterest = item.AreaOfInterest; ITopologicalOperator topologicalOperator = (ITopologicalOperator)((IClone)igeometry_0).Clone(); topologicalOperator.Simplify(); if (topologicalOperator.IsSimple) { topologicalOperator.Clip(areaOfInterest); } } catch (Exception exception) { Logger.Current.Error("", exception, ""); } if (!igeometry_0.IsEmpty) { Clip.ExtractSelectFeatureFormFeatureCursor(item, Clip.searchFeatureFormLayer(item, igeometry_0), (IFeatureWorkspace)workspace, igeometry_0, imap_1); } } Marshal.ReleaseComObject(workspace); workspace = null; }
public static void ExtractSpecifyHRegFeatures(IWorkspaceName iworkspaceName_0, IMap imap_0, IGeometry igeometry_0) { (new SelectionEnvironment()).CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew; IWorkspace workspace = (iworkspaceName_0 as IName).Open() as IWorkspace; for (int i = 0; i < imap_0.LayerCount; i++) { ILayer layer = imap_0.Layer[i]; if (layer.Visible) { if (layer is IGroupLayer) { Clip.ExtractSpecifyHRegFeatures(workspace as IFeatureWorkspace, layer as ICompositeLayer, igeometry_0); } if (layer is IFeatureLayer) { try { IEnvelope areaOfInterest = layer.AreaOfInterest; ITopologicalOperator topologicalOperator = (ITopologicalOperator)((IClone)igeometry_0).Clone(); topologicalOperator.Simplify(); if (topologicalOperator.IsSimple) { topologicalOperator.Clip(areaOfInterest); } } catch (Exception exception) { Logger.Current.Error("", exception, ""); } if (!igeometry_0.IsEmpty) { Clip.ExtractSelectFeatureFormFeatureCursor(layer.Name, Clip.searchFeatureFormLayer(layer, igeometry_0), (IFeatureWorkspace)workspace, igeometry_0); } } } } workspace = null; }
public static void ClipMapByRegion(IWorkspaceName iworkspaceName_0, IMap imap_0, IGeometry igeometry_0, IMap imap_1) { (new SelectionEnvironment()).CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew; IWorkspace workspace = (iworkspaceName_0 as IName).Open() as IWorkspace; TempAcceessBD tempAcceessBD = new TempAcceessBD(); tempAcceessBD.CreateTempDB(); IFeatureClass featureClass = tempAcceessBD.CreateFeatureClass(igeometry_0); for (int i = imap_0.LayerCount - 1; i >= 0; i--) { ILayer layer = imap_0.Layer[i]; if ((!layer.Visible ? false : layer is IFeatureLayer)) { try { IEnvelope areaOfInterest = layer.AreaOfInterest; ITopologicalOperator topologicalOperator = (ITopologicalOperator)((IClone)igeometry_0).Clone(); topologicalOperator.Simplify(); if (topologicalOperator.IsSimple) { topologicalOperator.Clip(areaOfInterest); } } catch (Exception exception) { Logger.Current.Error("", exception, ""); } if (!igeometry_0.IsEmpty) { Clip.ClipLayer(layer as IFeatureLayer, featureClass, (IFeatureWorkspace)workspace, imap_1); } } } Marshal.ReleaseComObject(workspace); workspace = null; }
private static void ExtractSpecifyHRegFeatures(IFeatureWorkspace ifeatureWorkspace_0, ICompositeLayer icompositeLayer_0, IGeometry igeometry_0) { for (int i = 0; i < icompositeLayer_0.Count; i++) { ILayer layer = icompositeLayer_0.Layer[i]; if (layer.Visible) { if (layer is IGroupLayer) { Clip.ExtractSpecifyHRegFeatures(ifeatureWorkspace_0, layer as ICompositeLayer, igeometry_0); } else if (layer is IFeatureLayer) { try { IEnvelope areaOfInterest = layer.AreaOfInterest; ITopologicalOperator topologicalOperator = (ITopologicalOperator)((IClone)igeometry_0).Clone(); topologicalOperator.Simplify(); if (topologicalOperator.IsSimple) { topologicalOperator.Clip(areaOfInterest); } } catch (Exception exception) { Logger.Current.Error("", exception, ""); } if (!igeometry_0.IsEmpty) { Clip.ExtractSelectFeatureFormFeatureCursor(layer.Name, Clip.searchFeatureFormLayer(layer, igeometry_0), ifeatureWorkspace_0, igeometry_0); } } } } }