【问题标题】:Check if a point is in the viewport检查点是否在视口中
【发布时间】:2012-04-06 17:39:18
【问题描述】:

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

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

【问题讨论】:

    标签: google-maps-api-3


    【解决方案1】:

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

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

    这里是hack,小心使用

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

    【讨论】:

    • 如果该点设置在地图上(即一个标记)没关系,但在其他情况下?
    • 对不起,我不明白您所说的“其他情况”是什么意思。你的意思是不止一个标记?
    • 不,仅适用于地图上未设置的点。但我检查了你的代码,没关系。很好的例子。谢谢。
    【解决方案2】:

    如果您的视口中包含的不仅仅是地球的整个圆周,则可能会出现问题。

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

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

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

    我不知道 API 中有任何方法可以满足此要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多