这是确定一个几何体是否包含在另一个几何体中的准确方法吗?
Is this an accurate way to decide if one geometry is contained in another?
我有 C# ArcGis 应用程序,我在里面使用图形图层。
我想决定图层的哪些图形包含在多边形内。
这是 correct/accurate 的方法吗?
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
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 方法不 return 相交的图形,它所做的是 returns 一个几何图形,表示它接收的 2 个参数之间的相交部分。因此,要检查某些东西是否相交,您可以调用此方法并检查 return 参数是否基本上不是上述代码中的 "empty" 几何体。 (在这种情况下,returned 的几何类型与发送到 Intersect 方法的第一个参数相同。)
我有 C# ArcGis 应用程序,我在里面使用图形图层。 我想决定图层的哪些图形包含在多边形内。 这是 correct/accurate 的方法吗?
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
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 方法不 return 相交的图形,它所做的是 returns 一个几何图形,表示它接收的 2 个参数之间的相交部分。因此,要检查某些东西是否相交,您可以调用此方法并检查 return 参数是否基本上不是上述代码中的 "empty" 几何体。 (在这种情况下,returned 的几何类型与发送到 Intersect 方法的第一个参数相同。)