Javascript 地理定位计算距离为0?

Javascript 地理定位计算距离为0?,javascript,geolocation,Javascript,Geolocation,我已经为此工作了一段时间,它整天都在给我制造麻烦。我现在真的陷入了困境,不知道下一步该去哪里。我要指出,我对Javascript非常陌生,所以这可能是一个noob错误 无论如何,它的总体目标是检查用户当前位置,然后检查他们是否在目标坐标的200米半径内。当我输入当前坐标时,它会在OnInterval函数中运行警报,但如果它们位于200米半径内,则不会运行警报 有人知道如何解决这个问题吗X var userPositionLat; var userPositionLong; jQuery(win

我已经为此工作了一段时间,它整天都在给我制造麻烦。我现在真的陷入了困境,不知道下一步该去哪里。我要指出,我对Javascript非常陌生,所以这可能是一个noob错误

无论如何,它的总体目标是检查用户当前位置,然后检查他们是否在目标坐标的200米半径内。当我输入当前坐标时,它会在OnInterval函数中运行警报,但如果它们位于200米半径内,则不会运行警报

有人知道如何解决这个问题吗X

var userPositionLat;
var userPositionLong;

jQuery(window).ready(function() {  
    initiate_geolocation();
});

function initiate_geolocation() {  
    //navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors);
    // http://www.thedotproduct.org/2010/04/example-of-navigator-geolocation-watchposition/
    navigator.geolocation.watchPosition(handle_geolocation_query,handle_errors, {enableHighAccuracy:true, maximumAge:30000});
}

function handle_errors(error) {  
    switch(error.code)  
    {  
        case error.PERMISSION_DENIED: alert("user did not share geolocation data");  
        break;

        case error.POSITION_UNAVAILABLE: alert("could not detect current position");  
        break;

        case error.TIMEOUT: alert("retrieving position timed out");  
        break;

        default: alert("unknown error");  
        break;
    }  
}  



function handle_geolocation_query(position) {
    userPositionLat = position.coords.latitude;
    userPositionLong = position.coords.longitude;

    alert('Your latitude is :'+userPositionLat+' and longitude is '+userPositionLong);

    IsUserNearTarget();
}


function CalculateDistance(lat1, long1, lat2, long2) {
    // Translate to a distance
    var distance =
            Math.sin(lat1 * Math.PI) * Math.sin(lat2 * Math.PI) +
            Math.cos(lat1 * Math.PI) * Math.cos(lat2 * Math.PI) * Math.cos(Math.abs(long1 - long2) * Math.PI);

    // Return the distance in meters
    return Math.acos(distance) * 6370981.162;
}

function IsUserNearTarget()
{
    // The target longitude and latitude
    var targetlong = 0.0; //change this with your coordinates to test
    var targetlat = 0.0; //change this with your coordinates to test

    // Start an interval every 1s
    var OurInterval = setInterval(OnInterval, 1000);

    // Call this on an interval
    function OnInterval() {
        var distance = CalculateDistance(targetlat, targetlong, userPositionLat, userPositionLong);

        // Is it in the right distance? (200m)
        if (distance <= 200) {
            // Stop the interval
            clearInterval(OurInterval);

            alert('TOTALLY WORKS BRO');
        }
    }
}
var-userPositionLat;
var-userlocationlong;
jQuery(窗口).ready(函数(){
启动地理定位();
});
函数initiate_geolocation(){
//navigator.geolocation.getCurrentPosition(句柄\地理位置\查询,句柄\错误);
// http://www.thedotproduct.org/2010/04/example-of-navigator-geolocation-watchposition/
navigator.geolocation.watchPosition(handle\u geolocation\u query,handle\u errors,{enableHighAccurance:true,maximumAge:30000});
}
函数句柄_错误(错误){
开关(错误代码)
{  
案例错误。权限被拒绝:警报(“用户未共享地理位置数据”);
打破
case error.POSITION_不可用:警报(“无法检测当前位置”);
打破
案例错误。超时:警报(“检索位置超时”);
打破
默认值:警报(“未知错误”);
打破
}  
}  
函数句柄\地理位置\查询(位置){
userPositionLat=位置.coords.latitude;
userPositionLong=position.coords.longitude;
警报('您的纬度为'+userPositionLat+',经度为'+userPositionLong');
IsUserNearTarget();
}
函数计算站(lat1、long1、lat2、long2){
//平移到一定距离
var距离=
Math.sin(lat1*Math.PI)*Math.sin(lat2*Math.PI)+
Math.cos(lat1*Math.PI)*Math.cos(lat2*Math.PI)*Math.cos(Math.abs(long1-long2)*Math.PI);
//返回以米为单位的距离
返回数学.acos(距离)*6370981.162;
}
函数IsUserNearTarget()
{
//目标经纬度
var targetlong=0.0;//使用坐标更改此值以进行测试
var targetlat=0.0;//使用要测试的坐标更改此值
//每1s开始一次间隔
var-OurInterval=setInterval(OnInterval,1000);
//暂停一下
函数OnInterval(){
var距离=计算距离(targetlat、targetlong、userPositionLat、userPositionLong);
//距离合适吗?(200米)

如果(距离要将度转换为弧度,请乘以
π/180
,而不是
π