我这样检查:在此处输入代码 var point = new g.LatLng(parseFloat(lat),parseFloat(lng)); var bounds = map.getBounds(); if (bounds.contains(point)) { 点在视口中 }
但是当我更改缩放级别时,在视口的坐标之前,“不可见”点不会被检测为“可见”,我的意思是在视口中。点不是标记!
我这样检查:在此处输入代码 var point = new g.LatLng(parseFloat(lat),parseFloat(lng)); var bounds = map.getBounds(); if (bounds.contains(point)) { 点在视口中 }
但是当我更改缩放级别时,在视口的坐标之前,“不可见”点不会被检测为“可见”,我的意思是在视口中。点不是标记!
我写了一个可能适用于您的场景的 hack。据我测试,当世界没有很多重复时,它可以工作。我知道如果世界显示两次或更多,这个黑客是不可靠的。因此,如果您可以设置地图的 minZoom,就可以防止这种情况发生。
这个想法是将地图分成左右两半,并检查标记是否在任一半。
这是hack,小心使用
如果您的视口中包含的不仅仅是地球的整个圆周,那么事情可能会出错。
左侧边缘可能比右侧边缘更靠东。map.getBounds()
在这种情况下得到错误的结果。
左侧边缘可能在右侧边缘以西,但由两者的经度定义的区域可能不包括兴趣点。
这是我为另一个答案开发的地图图像,它证明了这一点。左侧边缘位于 83°E,右侧边缘位于 162°E。标记位于 54°W 和 8°W 并且两者都不在其中map.getBounds()
——它们不在 83°E 和 162°E 之间——尽管它们显然在地图上。
我不知道 API 中有任何方法可以满足这种情况。