检查点是否在视口中

时间:2012-04-06 17:39:18

标签: google-maps-api-3

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

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

2 个答案:

答案 0 :(得分:0)

如果你的视口中有超过地球的整个圆周,那么事情就会出错。

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

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

这是我为另一个答案开发的image of a map,它证明了这一点。左边缘为83°E,右边缘为162°E。标记位于54°W和8°W,两者都不在map.getBounds()范围内 - 它们不在83°E和162°E之间 - 即使它们显然在地图上。

我不知道API中允许照顾的任何方法。

答案 1 :(得分:0)

我写了一个可能适用于您的场景的黑客攻击。就我的测试而言,当世界上没有很多东西重演时,它就有效。我知道,如果世界显示两次或更多次,这种黑客攻击是不可靠的。因此,如果你可以设置地图的minZoom,你可以防止这种情况。

想法是将地图分成左右两半,并检查标记是否在两半之内。

这是黑客,请小心使用

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