如何查看圆圈标记中是否有标记?

时间:2016-10-09 16:52:30

标签: javascript html cordova leaflet

如果标记(用户)现在包含在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。

2 个答案:

答案 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/

(放大和缩小以查看红色圆圈标记的半径调整以保持相同的像素大小,直到高变焦时,标记不在其中。而蓝色圆圈的半径根据缩放,因为它代表实际长度;因此它总是包含(或不包含)标记)