1

我这样检查:在此处输入代码 var point = new g.LatLng(parseFloat(lat),parseFloat(lng)); var bounds = map.getBounds(); if (bounds.contains(point)) { 点在视口中 }

但是当我更改缩放级别时,在视口的坐标之前,“不可见”点不会被检测为“可见”,我的意思是在视口中。点不是标记!

4

2 回答 2

1

我写了一个可能适用于您的场景的 hack。据我测试,当世界没有很多重复时,它可以工作。我知道如果世界显示两次或更多,这个黑客是不可靠的。因此,如果您可以设置地图的 minZoom,就可以防止这种情况发生。

这个想法是将地图分成左右两半,并检查标记是否在任一半。

这是hack,小心使用

http://jsfiddle.net/QeR2D/3/

于 2012-04-06T21:41:03.017 回答
0

如果您的视口中包含的不仅仅是地球的整个圆周,那么事情可能会出错。

左侧边缘可能比右侧边缘更靠东。map.getBounds()在这种情况下得到错误的结果。

左侧边缘可能在右侧边缘以西,但由两者的经度定义的区域可能不包括兴趣点。

这是我为另一个答案开发的地图图像,它证明了这一点。左侧边缘位于 83°E,右侧边缘位于 162°E。标记位于 54°W 和 8°W 并且两者都不在其中map.getBounds()——它们不在 83°E 和 162°E 之间——尽管它们显然在地图上。

我不知道 API 中有任何方法可以满足这种情况。

于 2012-04-06T18:06:39.070 回答