AE二次开两个要素拓扑相交求公共边界线Intersect方法出错


QQ图片20200409093914.png

在求两个要素的公共边界线的时候,返回的结果是second这个要素的边界(成了自相交了),而不是first要素和second要素的公共边界线。我看了帮助文档,参数是没的问题,这两个要素是不同的并且用拓扑关系检查了,也是相交的。代码如图所示
 
已邀请:

朱新颖

赞同来自:

没太理解,如果两个要素有公共边的话,相交线的话是应该和second的边界的一部分重合的,怎么知道返回的结果是second的边界呢?

Saber - GIS学生狗

赞同来自:

附上整个代码以及所用的要素图层(高亮部分)
QQ图片20200410131451.png
IFeatureLayer curFeatureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;
                        IFeatureClass pFeatrueClass = curFeatureLayer.FeatureClass;
                        pGeometry = axMapControl1.TrackRectangle();
                        ISpatialFilter pSpatiaFilter = new SpatialFilterClass();
                        pSpatiaFilter.Geometry = pGeometry;
                        //根据图层类型选择缓冲方式
                        switch (pFeatrueClass.ShapeType)
                        {
                            case esriGeometryType.esriGeometryMultipoint:
                                pSpatiaFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
                                break;
                            case esriGeometryType.esriGeometryPolyline:
                                pSpatiaFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
                                break;
                            case esriGeometryType.esriGeometryPolygon:
                                pSpatiaFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                                break;
                        }
                        //定义空间过滤器的空间字段
                        pSpatiaFilter.GeometryField = pFeatrueClass.ShapeFieldName;
                        IQueryFilter pQueryFilter;
                        //利用要素过滤器查询要素
                        pQueryFilter = pSpatiaFilter as IQueryFilter;
                        IFeatureCursor pFeatureCursor = curFeatureLayer.Search(pQueryFilter, true);

                        IGeometry first = pFeatureCursor.NextFeature().Shape;
                             System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
IFeatureCursor pFeatureCursor1 = curFeatureLayer.Search(pQueryFilter, true);
  pFeatureCursor1.NextFeature();
 IGeometry second = pFeatureCursor1.NextFeature().Shape;                        System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor1);
  ITopologicalOperator TopoOperatorInersect = first as ITopologicalOperator;
  ITopologicalOperator TopoOperatorInersect = first as ITopologicalOperator;
IGeometry pGeoInersect = TopoOperatorInersect.Intersect(second, esriGeometryDimension.esriGeometry1Dimension);//要素交集是polylines 是1维的
IPolyline pInersectPolyline = pGeoInersect as IPolyline;

要回复问题请先登录注册