如果标记(用户)现在包含在circleMarker(loc)中,我需要每5秒检查一次
function updateLocation(){
if(!isSet){clearInterval(start)}else{
user.setLatLng(new L.LatLng(lat, lng));
if(loc.getBounds().contains(new L.LatLng(lat, lng))){
document.getElementById('setButton').style.background = 'purple'
soundAlarm();
isSet = false;
}
}
}
以上是我当前的代码,由此调用:
var start = setInterval(updateLocation, 5000);
提前致谢,Ed。
答案 0 :(得分:2)
看起来你正试图做geofencing,但是很奇怪。当你想要的只是知道用户到某个东西的距离是否小于一个阈值(CircleMarker
半径)时,为什么要依赖于CircleMarker
的绘制外观?
只需使用distance
的{{1}}方法:
L.Map
答案 1 :(得分:1)
如果您的loc
变量确实是L.circleMarker
,请注意,根据定义,标记是一个点/位置,即它没有任何区域,因此没有界限。您可能打算首先使用L.circle
loc
。
在Leaflet 0.x(例如版本0.7.7)中,L.circleMarker
继承自L.circle
,因此它确实有.getBounds()
方法,即使它没有意义。实际上它返回一个空区域(southWest坐标等于northEast坐标等于标记位置)。
演示:https://jsfiddle.net/y63u5utf/2/
因此,您的代码实际上会评估为true
iif 用户位置与您的loc
完全相同。
在Leaflet 1.x(例如当前版本1.0.1)中,此不一致性已得到纠正,L.circleMarker
不再具有.getBounds()
方法。
演示:https://jsfiddle.net/y63u5utf/1/
(放大和缩小以查看红色圆圈标记的半径调整以保持相同的像素大小,直到高变焦时,标记不在其中。而蓝色圆圈的半径根据缩放,因为它代表实际长度;因此它总是包含(或不包含)标记)