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