Jquery 谷歌地图api多边形侦听器切换
所以我的地图上有两层多边形。这些多边形取决于缩放级别 放大时,我希望隐藏第一级多边形(或删除其侦听器并使其透明),缩小时,我需要隐藏第二级多边形并显示第一级多边形 我目前的策略是使多边形最初是透明的,侦听器会在必要时使它们不透明。为了实现多边形切换,我会在缩放更改时添加和删除侦听器 所以我有一个一级多边形数组和一个二级多边形数组,但我似乎无法切换它们 这怎么不起作用?addListener不应该与RemovelListener完全相反吗Jquery 谷歌地图api多边形侦听器切换,jquery,google-maps-api-3,Jquery,Google Maps Api 3,所以我的地图上有两层多边形。这些多边形取决于缩放级别 放大时,我希望隐藏第一级多边形(或删除其侦听器并使其透明),缩小时,我需要隐藏第二级多边形并显示第一级多边形 我目前的策略是使多边形最初是透明的,侦听器会在必要时使它们不透明。为了实现多边形切换,我会在缩放更改时添加和删除侦听器 所以我有一个一级多边形数组和一个二级多边形数组,但我似乎无法切换它们 这怎么不起作用?addListener不应该与RemovelListener完全相反吗 function zoomedout(map) { $.
function zoomedout(map) {
$.each(level2Listeners, function(k,v) {
google.maps.event.removeListener(v);
});
$.each(level1Listeners, function(k,v) {
google.maps.event.addListener(v);
});
}
是否有其他更合理的策略来实现切换?实现图层的最简单方法是在贴图缩放更改的侦听器中迭代数组,适当设置多边形的“贴图”属性。下面的代码假设您的google.maps.Map对象是“Map”和全局的(或者至少在侦听器的范围内可用)
google.maps.event.addListener(映射,“缩放更改”,函数(){
if(map.getZoom()>zoomThreshold){
对于(var i=0;i您已经要求了另一种合理的方法,几个月前我有一个类似的任务(根据缩放比例切换大约5000个覆盖),并且遇到了另一种解决方案
多边形是一个多边形,可以将一个MVCObject的特性绑定到另一个MVCObject的特性
我已经为Map实例(也是一个MVCObject)创建了新属性,并在zoom_changed-event上更新了这些属性
工作流程:
在zoom_changed
上设置属性
google.maps.event.addListener(map,'zoom_changed',function(){
var z=this.getZoom();
//set map.prop1 to Map-instance when zoom<=5,otherwise to null
var p1=(z<=5)?this:null;if(this.get('prop1')!==p1){this.set('prop1',p1);}
//set map.prop2 to Map-instance when zoom>5,otherwise to null
var p2=(z>5)?this:null;if(this.get('prop2')!==p2){this.set('prop2',p2);}
});
一个有4个圈的简单演示:
你用错误的方式思考这个问题,而不是添加和删除侦听器,考虑一个永久连接的“ZoMySychange”侦听器,当它被激发时,显示/隐藏层,这取决于新的缩放级别。
google.maps.event.addListener(map,'zoom_changed',function(){
var z=this.getZoom();
//set map.prop1 to Map-instance when zoom<=5,otherwise to null
var p1=(z<=5)?this:null;if(this.get('prop1')!==p1){this.set('prop1',p1);}
//set map.prop2 to Map-instance when zoom>5,otherwise to null
var p2=(z>5)?this:null;if(this.get('prop2')!==p2){this.set('prop2',p2);}
});
//this polygon will only be displayed at a zoom up to 5
somePolygon.bindTo('map',map,'prop1');
google.maps.event.trigger(map, 'zoom_changed');