【发布时间】:2019-02-04 22:29:38
【问题描述】:
我在地图上为不同城市放置了许多自定义叠加层,并尝试隐藏/折叠重叠的叠加层。无论哪里有空间,我都想展示/扩展人口最多的地方。
我想实现与google flights (explore section) 完全相同的行为。
我尝试了什么
我尝试了以下方法。我循环浏览所有自定义叠加层,检查是否存在重叠,然后隐藏是否存在人口较多的叠加层。问题是太多被隐藏了,看下面的例子:
- A市(3000人口)
- B市(2000人口)
- C市(1000人口)
- 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;
}
有人知道如何正确执行此操作吗?如果我前进的方向没有效率,我也愿意采用完全不同的方法。
【问题讨论】:
标签: angular google-maps-api-3 overlap custom-overlay