所以我有这段代码:
$.getJSON( "fetch-beacons.php", function( beacons ) {
beacons.forEach(function(beacon) {
if (beacon.uid != "<?php echo $uid ?>"){
var circle = new google.maps.Circle({
strokeColor: '#add8e6',
strokeOpacity: 0.8,
fillColor: '#add8e6',
fillOpacity: 0.35,
map: map,
center: new google.maps.LatLng(Number(beacon.lat), Number(beacon.lng)),
radius: Number(beacon.radius)
});
circle.addListener('click', function() {
post('claimcreds.php', {id: beacon.id, cid: <?php echo $uid ?>, uid: beacon.uid, lat: pos.lat, lng: pos.lng, claimattempt: "true"});
});
}
else {
var circle = new google.maps.Circle({
strokeColor: '#ffa500',
strokeOpacity: 0.8,
fillColor: '#ffa500',
fillOpacity: 0.35,
map: map,
center: new google.maps.LatLng(Number(beacon.lat), Number(beacon.lng)),
radius: Number(beacon.radius)
});
}
});
});
它从JSON文档中获取有关某些圈子的详细信息,并且工作正常。问题是,我想每隔10秒检查另一个位置的圈位(让我们称之为pos
),看看pos
是否在圈内。
据我了解,执行此操作的方法是google.maps.geometry.spherical.computeDistanceBetween(circle.center, pos);
,然后查看半径是否大于或小于此值,但我不确定我每十年如何做到这一点秒,因为圆形变量在beacons.forEach
语句循环时没有保存。
有人可以帮忙吗?对不起,如果我问的问题不清楚/代码是否有点混乱呵呵:)
答案 0 :(得分:1)
我想我会做这样的事情。首先定义一个全局函数,如:
function checkDistance(circle) {
var distance = google.maps.geometry.spherical.computeDistanceBetween(circle.getCenter(), pos);
if (distance > x) {
alert('ok');
}
}
需要一个参数circle
。我假设pos
是一个可以访问的全局变量。
然后在你的forEach循环中,在你的if-else语句之后(假设你想将它应用于两种类型的循环),以10.5秒的间隔调用该函数。它使用您刚刚创建的circle
变量作为传递给函数的参数:
setInterval(checkDistance, 10500, circle);