Rumah > hujung hadapan web > Tutorial H5 > HTML5地理位置定位Geolocation-API及Haversine地理空间距离算法(图文)

HTML5地理位置定位Geolocation-API及Haversine地理空间距离算法(图文)

黄舟
Lepaskan: 2017-03-11 16:13:26
asal
3297 orang telah melayarinya

   HTML5提供了Geolocation-API允许我们获取地理位置坐标
不过只有针对特定的需求才会用到
比如说地图应用

一般还是很少用到的

Geolocation-API

使用的方法也很简单
API都存在于navigator.geolocation对象的原型上

核心的方法就是getCurrentPostion和watchPosition

getCurrentPosition

navigator.geolocation.getCurrentPosition方法有三个参数

  • success 获取位置信息成功的回调函数(必须)

  • error 获取位置信息失败的回调函数

  • options 配置信息参数对象

navigator.geolocation.getCurrentPosition(function(pos){
  console.log(pos);//获取位置信息对象Geoposition});
Salin selepas log masuk

这时浏览器就会发起询问 <br/>因为毕竟位置信息也算是隐私信息

这里我们点击允许共享位置信息就可以了 <br/>然后Chrome就会向Google位置服务发送本地网络信息 <br/>(由于国内封杀了谷歌,所以我们只有翻墙才能获取到位置信息〒▽〒)

可以在控制台内给我们返回的位置信息

  • coord 坐标 <br/>

    • accuracy 定位精准度(单位m)

    • altitude 海拔

    • altitudeAccuracy 海拔精准度(单位m)

    • heading 方向

    • latitude 纬度

    • longitude 经度

    • speed 速度

  • timestamp 时间戳

  • <br/>
    Salin selepas log masuk

不过这个坐标并不是十分精确(特别是PC端) <br/>它可能源于IP地址、GPS、Wifi定位等等


navigator.geolocation.getCurrentPosition(function(pos){
  console.log(pos);
},function(err){
  console.log(err);
});
Salin selepas log masuk

我们可以设置第二个参数当获取地理位置信息错误时做出一些处理

navigator.geolocation.getCurrentPosition(function(pos){
  console.log(pos);
},function(err){
  console.log(err); //获取错误对象PositionError});
Salin selepas log masuk

比如我现在拒绝共享位置信息

  • code = 1 表示用户拒绝

  • code = 2 表示无法获取

  • code = 3 表示连接超时


第三个参数用于设置配置信息

navigator.geolocation.getCurrentPosition(function(pos){
  console.log(pos);
},function(err){
  console.log(err);
},{
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 3000});
Salin selepas log masuk
  • enableHighAccuracy 是否需要高精度位置 默认false

  • timeout 设置请求超时时间(单位ms) 默认infinity不限时

  • maximumAge 位置信息过期时间(单位ms) 默认0:无条件获取新的地理位置信息 <br/>

    • 在重复获取地理位置watchPosition时,该参数指定多久再次获取位置

watchPosition

watchPosition与getCurrentPosition参数都是一样的 <br/>区别在于watchPosition是不停的获取位置信息 <br/>比如我们使用的定位软件 <br/>我们在跑步时位置不断变更,就需要不断的重绘定位 <br/>这样每当坐标发生变化,就会调用success回调函数

而且watchPosiiton会返回一个watchID <br/>我们可以通过clearWatch(warchID)取消监听 <br/>类似于取消定时器

var ID = navigator.geolocation.watchPosition(function(pos){  ...},function(err){  ...},{  ...});
navigator.geolocation.clearWatch(ID);
Salin selepas log masuk

如果clearWatch不带参数 <br/>则清除所有watchPosition

Haversine算法

我们有些时候 <br/>可能需要获取两点的距离 <br/>比如说订餐APP的获取附近商家 <br/>这时我们就可以利用Haversine算法来计算

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;
}
Salin selepas log masuk

传入两点的坐标就可以得到地理空间距离
其中var R = 6371;是地球半径6371km
当然了也存在一些其他算法
在时间和精确度上有所不同

Atas ialah kandungan terperinci HTML5地理位置定位Geolocation-API及Haversine地理空间距离算法(图文). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan