我有问题。我正在使用以下代码找到一个交叉点:
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;
}
它可以工作,但我想得到相交范围的索引。
e.g。
如果extents[2][7]
是一个相交的元素,我想获得2
和7
。
是否可以修改我的代码?
[编辑]
bounds
是一个Envelope
,其中包含MinX
,MinY
,MaxX
和MaxY
个属性。
Envelope bounds = new Envelope();
bounds.MinX = some_value_1;
bounds.MaxX = some_value_2;
bounds.MinY = some_value_3;
bounds.MaxY = some_value_4;
答案 0 :(得分:4)
试试这个:
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中的所有元素,这是真的:
intersectedTiles[x].Element == extents[intersectedTiles[x].I][intersectedTiles[x].J]
答案 1 :(得分: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 };