交叉口 - 信封

时间:2012-09-27 12:45:49

标签: c# collections set intersection set-intersection

我有Envelope[][] extents = new Envelope[][];构造。每个信封都有MinXMaxXMinYMaxY属性,代表网格的一个图块(左下角和右上角)。现在我有另一个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]);
        }
    }
}

1 个答案:

答案 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();