2012-10-03 7 views
0

문제가 있습니다.교차로 색인 가져 오기

Envelope[][] extents = new Envelope[tilesCountX][tilesCountY]; 

// some code here to set "extents" values 

var intersectedTiles = 
    extents 
    .SelectMany(es => es) 
    .Where(e => EnvIntersects(e, bounds)) 
    .ToList(); 

private static bool EnvIntersects(Envelope e1, Envelope e2) 
{ 
    return e1.MinX >= e2.MinX && e1.MaxX <= e2.MaxX && e1.MinY >= e2.MinY && e1.MaxY <= e2.MaxY; 
} 

그것은 작동하지만 나는 교차 범위의 인덱스를 얻으려면 : 나는 아래의 코드를 사용하여 교차점을 찾는거야.


extents[2][7]이 교차 요소 인 경우 27을 얻고 싶습니다.

내 코드를 수정하여 사용 가능합니까?

[편집]

bounds 내부 MinX, MinY, MaxXMaxY 특성을 갖는 Envelope이다.

Envelope bounds = new Envelope(); 
bounds.MinX = some_value_1; 
bounds.MaxX = some_value_2; 
bounds.MinY = some_value_3; 
bounds.MaxY = some_value_4; 
+1

'경계'는 어디에서 왔습니까? 그리고 SelectMany는 제자리에서 벗어난 것처럼 보입니다. –

+1

어떤 버전의 C#을 사용하고 있습니까? 'Envelope [] [] extent = 새 봉투 [tilesCountX] [tilesCountY];'.NET 4.0에서는 컴파일되지 않습니다. – GolfWolf

+0

'EnvIntersects '는'intersection '이라고하는 것보다 훨씬 더 엄격한 조건이 필요합니다. – AakashM

답변

4

나는 이것은 또한 당신이 원하는 걸 줄 수 있다고 생각 :

var intersectedIndices = 
    from x in Enumerable.Range(0, tilesCountX) 
    from y in Enumerable.Range(0, tilesCountY) 
    where EnvIntersects(extents[x, y], bounds) 
    select new { x, y }; 
4

이 시도 :

intersectedTiles의 모든 요소 이것이 사실
var intersectedTiles = 
extents 
.SelectMany((es,i) => es.Select((x,j)=>new{I=i,J=j,Element = x})) 
.Where(e => EnvIntersects(e.Element, bounds)) 
.ToList(); 

:

intersectedTiles[x].Element == extents[intersectedTiles[x].I][intersectedTiles[x].J] 
관련 문제