【发布时间】:2012-04-06 17:39:18
【问题描述】:
我这样检查: 在此处输入代码 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。据我测试,当世界没有很多重复时,它可以工作。我知道如果世界显示两次或更多,这个黑客是不可靠的。所以如果你可以设置地图的最小缩放,你就可以防止这种情况发生。
想法是将地图分成左右两半,并检查标记是否在任一半。
这里是hack,小心使用
【讨论】:
如果您的视口中包含的不仅仅是地球的整个圆周,则可能会出现问题。
左侧边缘可能比右侧边缘更靠东。 map.getBounds() 在这种情况下得到错误的结果。
左侧边缘可能在右侧边缘以西,但由两者的经度定义的区域可能不包括兴趣点。
这是我为另一个答案开发的image of a map,它证明了这一点。左侧边缘位于 83°E,右侧边缘位于 162°E。标记位于 54°W 和 8°W,两者都不在 map.getBounds() 范围内——它们不在 83°E 和 162°E 之间——尽管它们显然在地图上。
我不知道 API 中有任何方法可以满足此要求。
【讨论】: