2013-03-01 128 views
3

所以我已經做了一些四處尋找,找不到任何能夠真正回答我想要做的事情,因此我發佈了!HTML5地理位置中經度和緯度的半徑

我的總體目標主要是讓頁面讀取用戶位置,然後根據它們的位置運行代碼。具體來說,我有一個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!');}; 
    } 
+1

順便說一句,在倒數第二行代碼中的同時設置lat和長爲0,我懷疑這是你的意思做的: '如果(LAT = 0 &&長= 0){警報( '!它的工作原理');};' 也許應該 '如果(LAT = = 0 && long == 0){alert('It works!');};' – 2013-03-01 23:08:24

+0

好抓!我沒有看到這個。我已經從實際座標編輯爲0,所以萬一人們認爲我很奇怪指向0/0,我不知道。 :p – Purify 2013-03-01 23:14:25

回答

5

我會做的是建立在使用setInterval輪詢功能,做到每1秒爲10秒這取決於是什麼讓最適合您的測試,只是測試距離。這裏有一個函數兩個經度/緯度之間的測試距離:

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 
    } 
}