Javascript HTML5地理定位中的经纬度半径

Javascript HTML5地理定位中的经纬度半径,javascript,geolocation,Javascript,Geolocation,所以,我做了一点环顾四周,找不到任何真正能回答我所要做的事情,所以我发布了 我的总体目标基本上是让页面读取用户的位置,然后根据他们所在的位置运行代码。具体来说,我有一个facebook签入脚本,允许用户在特定位置签入 问题是所讨论的位置有点大,所以手动输入位置坐标不起作用。我现在的问题是,是否可以告诉JS获取位置的硬编码经纬度,但给出坐标周围的半径(比如200米),这样当用户输入坐标半径为200米时,代码就会激活 有人有什么想法吗 这是到目前为止我的代码 jQuery(window).r

所以,我做了一点环顾四周,找不到任何真正能回答我所要做的事情,所以我发布了

我的总体目标基本上是让页面读取用户的位置,然后根据他们所在的位置运行代码。具体来说,我有一个facebook签入脚本,允许用户在特定位置签入

问题是所讨论的位置有点大,所以手动输入位置坐标不起作用。我现在的问题是,是否可以告诉JS获取位置的硬编码经纬度,但给出坐标周围的半径(比如200米),这样当用户输入坐标半径为200米时,代码就会激活

有人有什么想法吗

这是到目前为止我的代码

    jQuery(window).ready(function(){   
        initiate_geolocation();
    });  
    function initiate_geolocation() {  
        navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors);  
    }  
    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){  
         var lat = position.coords.latitude;
         var long = position.coords.longitude;

                      //these are for testing purposes
          alert('Your latitude is '+lat+' and longitude is '+long);
          if (lat == 0 && long == 0) {alert('It works!');};
    } 

我要做的是用setInterval创建一个poll函数,每1s到10s执行一次,这取决于什么对您的测试最有意义,并且只测试距离。以下是测试两个经度/纬度之间距离的函数:

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 miles
    //return Math.acos(distance) * 3958.754;

    // Return the distance in meters
    return Math.acos(distance) * 6370981.162;
} // CalculateDistance
您的间隔函数将类似于:

// The target longitude and latitude
var targetlong = 23.456;
var targetlat = 21.098;

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

// Call this on an interval
function OnInterval() {
  // Get the coordinates they are at
  var lat = position.coords.latitude;
  var long = position.coords.longitude;
  var distance = CalculateDistance(targetlat, targetlong, lat, long);

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

    // Do something here cause they reached their destination
  }
}
//目标经纬度
var targetlong=23.456;
var targetlat=21.098;
//每1s开始一次间隔
var-OurInterval=setInterval(OnInterval,1000);
//暂停一下
函数OnInterval(){
//获取他们所在的坐标
var lat=位置坐标纬度;
var long=位置坐标经度;
var距离=计算距离(targetlat、targetlong、lat、long);
//距离合适吗?(200米)

if(顺便说一下,代码中倒数第二行将lat和long都设置为0,我怀疑你的意思是:
if(lat=0&&long=0){alert('It works!');};
应该是
if(lat==0&&long==0){alert('It works!';}
捕捉得好!我没有看到这个。我已将它从实际坐标编辑为0,因此,如果人们认为我指向0/0很奇怪,我不会。:p这个数字代表“6370981.162”?对于行星地球,它是从acos到米的转换。它本质上是行星的平均半径,单位为米。如果你使用另一颗行星进行这些转换,你将使用不同的常数。我需要将从
CalculateInstance
返回的距离除以100,以得到真正的米:s