0

Envelope[][] extents = new Envelope[][];施工しております。各エンベロープにはMinXMaxXMinYおよびMaxYプロパティがあり、グリッドの 1 つのタイル (左下と右上のポイント) を表します。今、私はと のEnvelope bounds;最小値と最大値を含むX-別のものを持っていますY-axisextentsと交差するタイルを取得したい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]);
        }
    }
}
4

1 に答える 1

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();
于 2012-09-27T13:05:57.040 に答える