2012-09-27 6 views
0

나는 Envelope[][] extents = new Envelope[][]; 구조를 가지고 있습니다. 각 봉투는 MinX, MaxX, MinYMaxY 속성을 가지며 격자의 한 타일 (왼쪽 하단 및 오른쪽 상단 지점)을 나타냅니다. 이제 X-Y-axis에 대한 최소 및 최대 값을 포함하는 또 다른 Envelope bounds;이 있습니다. 타일이 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))'로 변경하면 null을 제거하는 것이 더 좋을지라도 무시할 수 있습니다. – Lee

+0

그래, 맞아 ... 내 계산에 문제가있어, 그게 왜'null'이 나타 났는지 :) 이제는 모든 것이 잘 작동하지만'Intertersects (bounds, e)'를'Intertersects (e, 범위)'. 감사 – Nickon