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);
});

这为我提供了警报(bnds)中的以下 (( lat,long ),( lat,long )) 格式;

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

我已经有一个出于另一个原因存储标记的对象。像:

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

哪个可能有用?

我不明白如何按照建议使用 GLatLngBounds 和 containsLatLng(latlng:GLatLng) 。

4

2 回答 2

10

您的问题被标记为 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 对象存储在标记对象中。这样您就不必在任何需要的地方创建它们。

于 2012-06-27T15:50:10.700 回答
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");
        }         
     });
于 2012-06-28T10:42:08.530 回答