HTML5提供了Geolocation-API允許我們取得地理位置座標
不過只有針對特定的需求才會用到
比如說地圖應用
一般還是很少用到的
使用的方法也很簡單
API都存在於navigator.geolocation物件的原型上
navigator.geolocation.getCurrentPosition(function(pos){ console.log(pos);//获取位置信息对象Geoposition});
因為畢竟位置資訊也算是隱私資訊<br/>
這裡我們點選允許共享位置信息就可以了然後Chrome就會向Google位置服務發送本地網絡信息<br/>(由於國內封殺了谷歌,所以我們只有翻牆才能獲取到位置信息〒▽〒)<br/>
#可以在控制台內給我們回傳的位置資訊
<br/>
<br/>
它可能源自於IP位址、GPS、Wifi定位等等<br/>
navigator.geolocation.getCurrentPosition(function(pos){ console.log(pos); },function(err){ console.log(err); });
navigator.geolocation.getCurrentPosition(function(pos){ console.log(pos); },function(err){ console.log(err); //获取错误对象PositionError});
navigator.geolocation.getCurrentPosition(function(pos){ console.log(pos); },function(err){ console.log(err); },{ enableHighAccuracy: true, timeout: 5000, maximumAge: 3000});
<br/>
差異在於watchPosition是不停的取得位置資訊<br/>例如我們使用的定位軟體<br/>我們在跑步時位置不斷變更,就需要不斷的重繪定位<br/>這樣每當座標發生變化,就會呼叫success回調函數<br/>
而且watchPosiiton會回傳一個watchID我們可以透過clearWatch(warchID)取消監聽<br/>類似於取消計時器<br/>
var ID = navigator.geolocation.watchPosition(function(pos){ ...},function(err){ ...},{ ...}); navigator.geolocation.clearWatch(ID);
則清除所有watchPosition<br/>
Haversine演算法我們有些時候可能需要取得兩點的距離<br/>比如說訂餐APP的取得附近商家<br/>這時我們就可以利用Haversine演算法來計算<br/>
function toRadians(degree) { return degree * Math.PI / 180; }function haversine(latitude1, longitude1, latitude2, longitude2) { var R = 6371; var deltaLatitude = toRadians(latitude2-latitude1); var deltaLongitude = toRadians(longitude2-longitude1); latitude1 = toRadians(latitude1); latitude2 = toRadians(latitude2); var a = Math.sin(deltaLatitude/2) * Math.sin(deltaLatitude/2) + Math.cos(latitude1) * Math.cos(latitude2) * Math.sin(deltaLongitude/2) * Math.sin(deltaLongitude/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; return d; }
其中
var R = 6371;是地球半徑6371km
當然了也存在一些其他演算法
在時間和精確度上有所不同
#
以上是HTML5地理位置定位Geolocation-API及Haversine地理空間距離演算法(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!