コード例 #1
0
ファイル: ClipHelper.cs プロジェクト: secondii/Yutai
        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;
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: EraseClass.cs プロジェクト: YNatsu/ArcEngine
        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);
        }
コード例 #4
0
ファイル: ArcStache.cs プロジェクト: yinxd/arcstache
        /// <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();
            }
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        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;
        }
コード例 #8
0
 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);
                 }
             }
         }
     }
 }