检查地图标记是否在所选范围内

7
我有一个包含多个标记的地图,需要能够在地图上绘制矩形,并选择位于矩形范围内的标记。
到目前为止,我在这里发现了一些很棒的信息:如何获取鼠标拖动选择区域内的标记? 我已经成功实现了keymapzoom插件,像这样:
    $('#dispatcher').gmap3({action:'get'}).enableKeyDragZoom({
        boxStyle: {
          border: "dashed black",
          //backgroundColor: "red",
          opacity: 0.5
        },
        paneStyle: {
          backgroundColor: "gray",
          opacity: 0.2
        }
  });
var dz = $('#dispatcher').gmap3({action:'get'}).getDragZoomObject();
google.maps.event.addListener(dz, 'dragend', function (bnds) {
  alert(bnds);
});

这给了我以下的格式 ((纬度,经度),(纬度,经度)) ,从 alert(bnds) 中得到。

现在我需要知道如何检查是否有任何标记在其中?

我已经有一个对象来存储标记,但是出于其他原因。

    markers[name] = {};
    markers[name].lat = lati;
    markers[name].lng = longi;

有什么用处呢?

我不理解如何使用建议的GLatLngBounds和containsLatLng(latlng:GLatLng)。

2个回答

11
您的问题标记为Maps API的v3版本,因此我假设您正在使用该版本(应该使用v2已被弃用)。请注意,某些类和方法与您的问题中的命名不同。
边界由LatLngBounds类表示。您可以对该类的实例执行contains方法,以确定点是否位于这些边界内。
如果您有一个包含所有标记的对象,您可以循环遍历它们并检查每个标记,例如:
var bounds = new google.maps.LatLngBounds(sw, ne);
for (var a in markers) {
    if (bounds.contains(new google.maps.LatLng(markers[a].lat, markers[a].lng)) {
        // marker is within bounds
    }
}

顺便说一下,创建标记时,我会将LatLng对象存储在标记对象中。这样,您就不必在需要它们的任何地方都创建它们。


是的,这是v3 API。谢谢你的回复,Peter。那么我应该能够使用var bounds = new google.maps.LatLngBounds(bnds)吗? - Vince Lowe
构造函数需要两个参数:西南角和东北角。只需点击我提供的链接即可。 - Peter Kruithof
我明白了,那么我该如何从我的bnds输出中获取sw和ne参数? - Vince Lowe
你在地图上画了一个矩形,对吧?看起来你可以使用这些数据来计算每个点的纬度/经度,谷歌一下。 - Peter Kruithof
其他多边形呢,六边形或圆形呢? - Ray
1
@Raymond,LatLngBounds 仅适用于矩形(文档中称其为“代表地理坐标系下的矩形”)。还有一个 Polygon 类,你可以使用 Poly 实用库 来处理它。 - Peter Kruithof

3

在谷歌地图中绘制框/矩形选择

这是我的解决方案...

     google.maps.event.addListener(dz, 'dragend', function(e) { //important listener          
      for(var i = 0; i < markers.length; i++){ // looping through my Markers Collection       
        if(e.contains(markers[i].position))
            console.log("Marker"+ i +" - matched");
        }         
     });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接