如何解开"解开" Mapbox中的弹出窗口?仅允许来自特定范围内的标记的弹出窗口(当用户移动时更改)

时间:2015-09-17 16:38:08

标签: javascript leaflet mapbox

我试图在我的地图上查看标记的工具提示或弹出窗口之间切换,具体取决于与它们的距离。有一种简单的方法可以启用弹出窗口,但有没有类似于

的方法
marker.bindPopup(entries[i].text_content);

删除再次查看弹出窗口的功能?

供参考,这是代码的完整部分

$http.get(ApiEndpoint.entry).then(function(data) {
    entries = data.data;
    for (i=0; i<entries.length; i++){
            var lat = entries[i].lat;
            var long = entries[i].long;
    }
    var markers = new L.MarkerClusterGroup({maxClusterRadius: 40, removeOutsideVisibleBounds: true, singleMarkerMode: true});

    for (var i = 0; i < entries.length; i++) {
        var a = entries[i];
        var title = a[2];
        marker = L.marker(new L.LatLng(a.lat, a.long), {
            icon: L.mapbox.marker.icon({'marker-symbol': 'post', 'marker-color': '0044FF'}),
        });
        if(haversineDistance(current_lat, current_long, entries[i].lat, entries[i].long)<26){
            marker.bindPopup(entries[i].text_content);
        };

        markers.addLayer(marker);   
    }
    map.addLayer(markers);
});

使用hasrsineDistance函数计算从当前位置到标记的距离。

我想要的是,可以在循环中运行的一段代码,以一定的时间间隔删除所有弹出窗口,允许我再次使用if语句,以允许弹出范围内的标记,如用户移动。

1 个答案:

答案 0 :(得分:0)

使用Leaflet对客户端进行地理位置定位可以使用L.Map实例的locationfound方法完成。启动后,您可以收听L.LatLng事件。该事件包含一个L.Marker实例,其中包含客户端坐标。 getLatLng个实例具有L.LatLng方法,该方法返回带有标记坐标的distanceTo实例。您可以使用L.Latlng实例的// Markers in a LayerGroup var group = new L.LayerGroup([ new L.Marker([0,0]), new L.Marker([0,0]) ]).addTo(map); // Start geolocation (assuming map holds a L.Map instance) map.locate(); // Listen for the event map.on('locationfound', function(event){ // If succeeded get client coordinates var clientLatLng = event.latLng; // Loop over markers group.eachLayer(function(marker){ // Get marker coordinates var markerLatLng = marker.getLatLng(); // Calculate distance var distance = clientLatLng.distanceTo(markerLatLng); // When within 40 meters if (distance < 40) { marker.bindPopup('POP'); marker.openPopup(); } else { marker.unbindPopup(); } }); }); 方法计算它们之间的距离。在带有注释的代码中进一步解释:

00 0d ff f2

参考文献:

L.Map.locate():http://leafletjs.com/reference.html#location-event

L.LatLng.distanceTo():http://leafletjs.com/reference.html#latlng-distanceto

PS。我现在无法测试Geolocation,所以我对此进行了自由。应该没问题,希望;)