我试图在我的地图上查看标记的工具提示或弹出窗口之间切换,具体取决于与它们的距离。有一种简单的方法可以启用弹出窗口,但有没有类似于
的方法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语句,以允许弹出范围内的标记,如用户移动。
答案 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,所以我对此进行了自由。应该没问题,希望;)