Javascript 向google maps bounds.contains()添加填充
我有一个侧边栏,显示谷歌地图当前地图视图中标记的名称。侧边栏内容会随着地图的移动而变化:Javascript 向google maps bounds.contains()添加填充,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我有一个侧边栏,显示谷歌地图当前地图视图中标记的名称。侧边栏内容会随着地图的移动而变化: google.maps.event.addListener(map, 'bounds_changed', function() { document.getElementById("list").innerHTML = ""; var mklen = mkrs.length, a = 0, bnd
google.maps.event.addListener(map, 'bounds_changed', function() {
document.getElementById("list").innerHTML = "";
var mklen = mkrs.length,
a = 0,
bnds = map.getBounds();
for (a; a < mklen; a++) {
var themk = mkrs[a];
if (bnds.contains(themk.getPosition())) {
var myli = document.createElement("li");
myli.innerHTML = themk.title;
document.getElementById("list").appendChild(myli);
}
}
});
google.maps.event.addListener(映射,'bounds_changed',函数(){
document.getElementById(“列表”).innerHTML=“”;
var mklen=mkrs.长度,
a=0,
bnds=map.getBounds();
对于(a;a
这是可行的,但问题是bounds.contains()非常严格-如果标记的底部在地图上(即,你看不到99%),它会列在侧边栏上。我想做的是让完全显示的标记通过测试
我可以想到几种方法,但我不相信没有其他人遇到过这个问题,因此我想知道是否有以下方法的偏好:
fromDivPixelToLatLng
),然后检查ne和sw角是否在边界内,如果在边界内,则列出项目在你问之前,我还没有试过这两种方法——我更多的是寻求关于哪种方法最好甚至可能的建议,或者是否有其他方法可以做到这一点。这是一个演示问题的例子,以防它澄清了问题。如果有人后来发现了这个问题,我最终重新计算了边界——这似乎是一种开销最小的方法。下面是函数:
function paddedBounds(npad, spad, epad, wpad) {
var SW = map.getBounds().getSouthWest();
var NE = map.getBounds().getNorthEast();
var topRight = map.getProjection().fromLatLngToPoint(NE);
var bottomLeft = map.getProjection().fromLatLngToPoint(SW);
var scale = Math.pow(2, map.getZoom());
var SWtopoint = map.getProjection().fromLatLngToPoint(SW);
var SWpoint = new google.maps.Point(((SWtopoint.x - bottomLeft.x) * scale) + wpad, ((SWtopoint.y - topRight.y) * scale) - spad);
var SWworld = new google.maps.Point(SWpoint.x / scale + bottomLeft.x, SWpoint.y / scale + topRight.y);
var pt1 = map.getProjection().fromPointToLatLng(SWworld);
var NEtopoint = map.getProjection().fromLatLngToPoint(NE);
var NEpoint = new google.maps.Point(((NEtopoint.x - bottomLeft.x) * scale) - epad, ((NEtopoint.y - topRight.y) * scale) + npad);
var NEworld = new google.maps.Point(NEpoint.x / scale + bottomLeft.x, NEpoint.y / scale + topRight.y);
var pt2 = map.getProjection().fromPointToLatLng(NEworld);
return new google.maps.LatLngBounds(pt1, pt2);
}
你这样称呼它:
var padbnds = paddedBounds(50, 70, 100, 30);
在地图的北、南、东和西边缘分别指定所需的填充量是以米或像素为单位的参数值?