将Google Map(v3)LatLngBounds扩展一定数量的像素

时间:2011-08-26 09:54:58

标签: google-maps google-maps-api-3

我正在寻找我当前的地图边界(如:var b = map.getBounds();)并在每个方向上将其延伸一定数量的像素。基本上我正在寻找填充256px的界限。这可能吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下几点:

var overlay = new google.maps.OverlayView(); 
overlay.draw = function() {}; 
overlay.setMap(map); 
var projection = overlay.getProjection();  
// Get pixels:    
var sw = projection.fromLatLngToDivPixel(bounds.getSouthWest());   
var ne = projection.fromLatLngToDivPixel(bounds.getNorthEast());    

另见Custom Overlays

答案 1 :(得分:0)

给出的答案可能有效,但问题在于该功能

overlay.getProjection()

在显示地图之前始终返回未定义。这意味着,直到地图显示出来,您才可以扩展边界,然后必须再次显示地图-最终用户需要进行更多的处理和可能的短暂体验。

我想我找到了一种扩展像素边界的方法,该方法不需要刷新地图,并且可以在渲染地图之前进行计算。其依据是bounds对象将覆盖地图的宽度,并且我们从其容器中知道地图宽度的像素,因此两者的比率为我们提供了经度与像素的比率

                // extend bounds to allow for 250 pixels of label width
                var ne = bounds.getNorthEast();
                var sw = bounds.getSouthWest();
                var lng = ne.lng();
                var diff = lng - sw.lng();
                var newlng = lng + 250 * diff / targetwidth;

                var lat = sw.lat();
                var diff2 = lat - ne.lat;
                var newlat = lat + 100 & diff2 / targetheight;

                var point = new google.maps.LatLng(newlat, newlng);
                bounds.extend(point);

                // fit the map to these bounds
                thismap.fitBounds(bounds);

上面的内容是宽度和高度。如果您只想扩展宽度:

                // extend bounds to allow for 250 pixels of label width
                var ne = bounds.getNorthEast();
                var sw = bounds.getSouthWest();
                var lng = ne.lng();
                var diff = lng - sw.lng();
                var newlng = lng + 250 * diff / targetwidth;

                var lat = sw.lat();

                var point = new google.maps.LatLng(newlat, newlng);
                bounds.extend(point);

                // fit the map to these bounds
                thismap.fitBounds(bounds);

在两种情况下,变量“ targetwidth”都是包含地图的div的数字宽度(以像素为单位)。

HTH:)