2012-09-27 47 views
0

我有Envelope[][] extents = new Envelope[][];建設。每個信封都有MinX,MaxX,MinYMaxY屬性,並表示網格的一個圖塊(左下角和右上角的點)。現在我有另一個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]); 
     } 
    } 
} 
+3

你應該表現出'Where' clausule你試過代碼 –

回答

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(); 
+0

'e'是'null','Intersects'返回'NullReferenceException'。 – Nickon

+0

@Nickon - 然後你在'extents'中的某個數組中有某個空元素。您可以通過將條件改爲'Where(e => e!= null && Intersects(bounds,e))'來忽略它們,但刪除空值會更好。 – Lee

+0

是啊,我是對的......我的計算出現了一個問題,這就是爲什麼'null'出現了:)現在一切正常,但我不得不將'Intersects(bounds,e)'改爲'Intersects(e,邊界)'。謝謝 – Nickon