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%),它会列在侧边栏上。我想做的是让完全显示的标记通过测试

我可以想到几种方法,但我不相信没有其他人遇到过这个问题,因此我想知道是否有以下方法的偏好:

  • 获取边界并重新计算,使其小于实际边界,然后将这些新边界用于bounds.contains()测试
  • 计算标记图标边缘的位置(我想使用
    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);
    

    在地图的北、南、东和西边缘分别指定所需的填充量

    是以米或像素为单位的参数值?