我在地图上为不同城市放置了许多自定义叠加层,并试图隐藏/折叠重叠的叠加层。无论哪里有空间,我都想展示/扩展人口最多的地方。
我想实现与谷歌航班(探索部分)完全相同的行为。
我试过的
我尝试了以下方法。我循环浏览所有自定义叠加层,检查是否存在重叠,然后隐藏是否存在人口较多的叠加层。问题是隐藏了太多,请参见以下示例:
- A市(3000人口)
- B市(2000人口)
- C市(千人)
- A 和 B 重叠
- B 和 C 重叠
- A 和 C 不重叠
A 和 C 都应该是可见的,但 C 是隐藏的,因为 B 和 C 重叠并且 B 具有更高的人口。
请注意,我使用的是 Angular,但这是一个一般的 js 问题。
hideOverlays(){
this.overlays.forEach(mainElement => {
let hide = false;
this.overlays.forEach(compareElement => {
if(this.checkOverlap(mainElement.nativeElement, compareElement.nativeElement)){
if(mainElement.nativeElement.dataset.population < compareElement.nativeElement.dataset.population){
hide = true
}
}
})
if(hide){
mainElement.nativeElement.style.display = "none";
}else{
mainElement.nativeElement.style.display = "flex";
}
});
}
checkOverlap(element1, element2) {
const rect1 = element1.getBoundingClientRect();
const rect2 = element2.getBoundingClientRect();
const overlap = !(rect1.right < rect2.left ||
rect1.left > rect2.right ||
rect1.bottom < rect2.top ||
rect1.top > rect2.bottom)
return overlap;
}
有谁知道如何正确地做到这一点?如果我前进的方向没有效率,我也愿意采用完全不同的方法。