我有Envelope[][] extents = new Envelope[][];
构造。每个信封都有MinX
,MaxX
,MinY
和MaxY
属性,代表网格的一个图块(左下角和右上角)。现在我有另一个Envelope bounds;
,其中包含X-
和Y-axis
的最小值和最大值。我想从extents
获取与bounds
相交的切片。
使用Envelope.Intersect
有什么简单的方法吗?
[编辑]
现在我用这种方式做了(暴力xD):
List<Envelope> intersectedTiles = new List<Envelope>();
for (int i = 0; i < extents.LongLength; i++)
{
for (int j = 0; j < extents.Length; j++)
{
if (extents[i][j].MinX >= bounds.MinX && extents[i][j].MaxX <= bounds.MaxX &&
extents[i][j].MinY >= bounds.MinY && extents[i][j].MaxY <= bounds.MaxY)
{
intersectedTiles.Add(extents[i][j]);
}
}
}
答案 0 :(得分:1)
private static bool Intersects(Envelope e1, Envelope e2)
{
return e1.MinX >= e2.MinX && e1.MaxX <= e2.MaxX && e1.MinY >= e2.MinY && e1.MaxY <= e2.MaxY;
}
List<Envelope> intersectedTiles = extents.SelectMany(es => es)
.Where(e => Intersects(e, bounds))
.ToList();