5

だから私は少し見回して、私がやろうとしていることに本当に答えたものを見つけることができなかったので、投稿しています!

私の全体的な目的は、基本的にページがユーザーの場所を読み取り、その場所に基づいてコードを実行することです。具体的には、ユーザーが特定の場所にいる場合にチェックインできるようにする Facebook チェックイン スクリプトがあります。

問題は、問題の場所がかなり大きいため、場所の座標を手動で入力しても機能しないことです。私が今行き詰まっているのは、JSにハードコードされた場所の経度と緯度を取得するが、座標の周りの半径(200メートルとしましょう)を与えるように指示できるかどうかです。そのため、ユーザーが座標の半径200mを入力すると、コードがアクティブになります。

誰にもアイデアはありますか?

これはこれまでの私のコードです。

    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!');};
    } 
4

1 に答える 1

12

私がすることは、setInterval を使用してポーリング関数を作成し、テストに最も適したものに応じて 1 秒から 10 秒ごとに実行し、距離をテストすることです。2 つの経度/緯度間の距離をテストする関数を次に示します。

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
  }
}
于 2013-03-01T23:18:14.603 に答える