这是确定一个几何是否包含在另一个几何中的准确方法吗?

时间:2016-03-20 15:13:13

标签: c# arcgis

我有C#ArcGis应用程序,里面我使用图形图层。 我想确定多边形内包含图层的图形。 这是正确/准确的方法吗?

var identifiedGraphics = new List<Graphic>();
var polygonExtent = (drawnGeometry as Polygon).Extent;

if (layer.Graphics != null)
{
   foreach (var graphic in layer.Graphics)
   {
      if (polygonExtent.Intersects(graphic.Geometry.Extent))
      {
          identifiedGraphics.Add(graphic);
      }
   }
}

编辑 - 这不准确'它让我的图形接近多边形。有任何想法吗?我正在使用ESRI.ArcGIS.Client

1 个答案:

答案 0 :(得分:1)

var graphicsToReturn = new List<Graphic>();
var geometryService = new GeometryService();
geometryService.InitializeWithLocalService();

foreach (var currentGraphic in layer.Graphics)
{
    var intersectSection = geometryService.Intersect(new List<Graphic> { currentGraphic }, polygonGeometry);

    if (intersectSection != null)
    {
        foreach (var intersectionGraphic in intersectSection)
        {
              if (intersectionGraphic != null )
              {
                  var polygon = intersectionGraphic.Geometry as Polygon;
                  var point = intersectionGraphic.Geometry as MapPoint;
                  var line = intersectionGraphic.Geometry as Polyline;

                  if (polygon != null && polygon.Rings.Count > 0)
                  {
                     graphicsToReturn.Add(currentGraphic);
                  }
                  else if (point != null && !double.IsNaN(point.X) && !double.IsNaN(point.Y))
                  {                                     
                     graphicsToReturn.Add(currentGraphic);
                  }
                  else if (line != null && line.Paths.Count > 0)
                  {
                     graphicsToReturn.Add(currentGraphic);
                  }
               }
          }
      }
 }

说明:GeometryService是一种服务,它具有各种方法,但需要一个指向我们正在处理的给定服务的URL。如果没有服务,则必须使用“InitializeWithLocalService”初始化它,以创建本地服务。 Intersect方法不返回相交的图形,它的作用是返回一个几何图形,表示它接收的2个参数之间的相交部分。因此,要检查某些内容是否相交,可以调用此方法并检查返回参数是否基本上不是上面代码中的“空”几何。 (返回的几何类型与在这种情况下发送到Intersect方法的第一个参数相同。)