Google Maps API v3 – getBounds未定义
我从v2切换到v3谷歌地图API,并得到gMap.getBounds()
函数的问题。
初始化后,我需要获取地图的边界。
这是我的JavaScript代码:
var gMap; $(document).ready( function() { var latlng = new google.maps.LatLng(55.755327, 37.622166); var myOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; gMap = new google.maps.Map(document.getElementById("GoogleMapControl"), myOptions); alert(gMap.getBounds()); } );
所以现在它提醒我gMap.getBounds()
是未定义的。
我试图在click事件中获取getBounds值,它对我来说工作正常,但是在load map事件中我得不到相同的结果。
在Google Maps API v2中加载文档时,getBounds也能正常工作,但在V3中失败。
你能帮我解决这个问题吗?
在v3 API的早期, getBounds()
方法要求地图图块完成加载,以便返回正确的结果。 不过现在看起来你可以监听在tilesloaded
事件之前被激发的tilesloaded
事件:
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Google Maps v3 - getBounds is undefined</title> <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> </head> <body> <div id="map" style="width: 500px; height: 350px;"></div> <script type="text/javascript"> var map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: new google.maps.LatLng(55.755327, 37.622166), mapTypeId: google.maps.MapTypeId.ROADMAP }); google.maps.event.addListener(map, 'bounds_changed', function() { alert(map.getBounds()); }); </script> </body> </html>
它应该工作,至less根据getBounds()的文档。 然而:
var gMap; $(document).ready(function() { var latlng = new google.maps.LatLng(55.755327, 37.622166); var myOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; gMap = new google.maps.Map(document.getElementById("GoogleMapControl"), myOptions); google.maps.event.addListenerOnce(gMap, 'idle', function(){ alert(this.getBounds()); }); });
看到它在这里工作。
我在说萨尔曼的解决scheme比较好,因为idle
事件比瓷砖加载要早,因为它等待所有瓷砖加载。 但仔细一看,似乎bounds_changed
甚至更早被调用,而且更有意义,因为您正在寻找边界,对吗? 🙂
所以我的解决scheme是:
google.maps.event.addListenerOnce(gMap, 'bounds_changed', function(){ alert(this.getBounds()); });
在这里的其他评论,build议使用“空闲”的“bounds_changed”事件,我同意。 当然在IE8下至less在我的开发机器上“bounds_changed”之前触发“空闲”,让我在getBounds上引用null。
但是,当您拖动地图时,“bounds_changed”事件将会持续触发。 因此,如果你想使用这个事件来开始加载标记,这将是沉重的你的networking服务器。
我对这个问题的多浏览器解决scheme:
google.maps.event.addListenerOnce(gmap, "bounds_changed", function(){ loadMyMarkers(); google.maps.event.addListener(gmap, "idle", loadMyMarkers); });
那么,我不知道如果我太晚了,但这是我的解决scheme使用gmaps.js插件:
map = new GMaps({...}); // bounds loaded? if not try again after 0.5 sec var check_bounds = function(){ var ok = true; if (map.getBounds() === undefined) ok = false; if (! ok) setTimeout(check_bounds, 500); else { //ok to query bounds here var bounds = map.getBounds(); } } //call it check_bounds();
- 如何以像素为单位偏移Google地图(API v3)的中心?
- 在地址arrays中添加多个标记Google Map API v3,并在pageLoad上进行地理编码时避免OVER_QUERY_LIMIT
- 处理Google Maps JS API v3中的点击事件,同时忽略双击
- Google Maps API v3:如何删除所有标记?
- Google MAP API v3:中心和缩放显示的标记
- 使用谷歌地图API v3如何获得给定地址的LatLng?
- Google MAP API未捕获TypeError:无法读取null的属性'offsetWidth'
- 通过Web服务访问Google的stream量数据
- 在Google地图上点击添加标记