我从您的图片中假设所有红点和蓝点都位于网格上。
这意味着任何点的 x 和 y 都被夹在该网格上(轴对齐)
我进一步假设蓝点定义了多边形的外部。
所以你想看看那个多边形内是否有任何特定的红点?
鉴于这些假设,如果任何红点在所有 4 个垂直和水平边上都被蓝点包围,则它位于多边形内
红点左侧的蓝点
blueY==redY && blueX<redX
红点右侧的蓝点
blueY==redY && blueX>redX
红点上方的蓝点
blueX==redX && blueY<redY
红点下方的蓝点
blueX==redX && blueY>redY
首先,您需要能够获取所有蓝点,因此当您创建蓝点时,请务必为它们分配一个蓝色的名称属性
name:"blue",
然后,您可以使用此函数测试任何红点,该函数检查该红点是否被蓝点包围:
function isRedInPolygon(red){
// get XY of the red circle
var redX=red.getX();
var redY=red.getY();
// set up vars for results
// these vars become true when blue dots are
// directly up, down, left and right of the red dot
var up=false;
var down=false;
var left=false;
var right=false;
// get all the blue dots into an array
var blues=layer.get('.blue').toArray();
for(var j=0;j<blues.length;j++){
// get the XY of this blue
var blue=blues[j];
blueX=blues[j].getX();
blueY=blues[j].getY();
// test left/right
if(blueX==redX){
// left
if(blueY<redY){ up=true; }
// right
if(blueY>redY){ down=true; }
}
// test up/down
if(blue.Y==red.Y){
if(blueX<redX){ left=true; }
if(blueX>redX){ right=true; }
}
}
// return true if this red dot is surrounded
// by blue dots on all 4 sides
return(up && down && left && right);
}
获取多边形内所有红色对象的列表
首先,将 name="red" 分配给所有红点。
name:"red",
然后使用此调用获取多边形中所有红色对象的数组。
var redsInside = listOfRedsInPolygon();
使用此功能:
function listOfRedsInPolygon(){
var reds=layer.get('.red').toArray();
var redsInsidePolygon=[];
for(var i=0;i<reds.length;i++){
if(isRedInPolygon(reds[i])){
redsInsidePolygon.push(reds[i]);
}
}
return(redsInsidePolygon);
}
免责声明:我没有测试过这段代码......它可能需要一些调整。