我正在使用谷歌地图v3。 我想知道 IF当前地图边界位于所有先前边界的总和中(当前边界的所有点都被其他边界覆盖)(如果不是,我将通过ajax加载当前边界的标记)< / p>
比方说,我有一个以前的视口范围数组,我这样做:
google.maps.event.addListener(map, 'idle',function() {
var bounds = map.getBounds();
boundsArray.push(bounds);
});
检查我现在发明的算法是一个很难的算法,它是如下:
1)使用一些 $ step (0.0001?)生成当前边界的所有边缘点(lan / lon)并将它们放入“pointsArray”。
2)迭代pointsArray,并检查当前点是否存在于至少一个先前的边界中:
来自LatLngBounds doc:contains(latLng:LatLng)boolean如果给定,则返回true lat / lng就在这个范围内。
所以,比如:
if (boundsArray[y].contains(pointsArray[i]) {
如果包含,则从pointsArray中删除该点
3)最后,在所有迭代之后,如果pointsArray为空 - 这意味着当前边界的所有点都在另一个/ s范围内,并且函数返回true ...
我认为我的算法有两个缺点: 1)它不是100%精确(取决于$ step) 2)更糟糕的是,它导致客户端性能下降,所有边界都检查了这么多点...因为javascipt是在用户PC上实现的。
所以,如果更精确&amp;为我的问题轻松,快速的解决方案?也许使用另一种数学方法,谷歌几何库和等等?怎么做到这一点?
答案 0 :(得分:0)
当它变得太大时,您可以删除bounds数组。然后你可以重新开始。比较边界要容易得多。