如何使用HTML5地理位置定位功能


Posted in Javascript onApril 27, 2015

HTML5提供了地理位置定位功能(Geolocation API),能确定用户位置,我们可以借助HTML5的该特性开发基于地理位置信息的应用。本文结合实例给大家分享如何使用HTML5,借助百度、谷歌地图接口来获取用户准确的地理位置信息。

定位功能(Geolocation)是HTML5的新特性,因此只有在支持HTML5的现代浏览器上运行,特别是手持设备如iphone,地理定位更加精确。首先我们要检测用户设备浏览器是否支持地理定位,如果支持则获取地理信息。注意这个特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的,所以我们在访问该应用时会提示是否允许地理定位,我们当然选择允许即可。

function getLocation(){ 
  if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
  }else{ 
    alert("浏览器不支持地理定位。"); 
  } 
}

上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 方法。如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition() 方法的第二个参数showError用于处理错误,它规定当获取用户位置失败时运行的函数。
我们先来看函数showError(),它规定获取用户地理位置失败时的一些错误代码处理方式:
 

function showError(error){ 
  switch(error.code) { 
    case error.PERMISSION_DENIED: 
      alert("定位失败,用户拒绝请求地理定位"); 
      break; 
    case error.POSITION_UNAVAILABLE: 
      alert("定位失败,位置信息是不可用"); 
      break; 
    case error.TIMEOUT: 
      alert("定位失败,请求获取用户位置超时"); 
      break; 
    case error.UNKNOWN_ERROR: 
      alert("定位失败,定位系统失效"); 
      break; 
  } 
}

我们再来看函数showPosition(),调用coords的latitude和longitude即可获取到用户的纬度和经度。

function showPosition(position){ 
  var lat = position.coords.latitude; //纬度 
  var lag = position.coords.longitude; //经度 
  alert('纬度:'+lat+',经度:'+lag); 
}

利用百度地图和谷歌地图接口获取用户地址
上面我们了解了HTML5的Geolocation可以获取用户的经纬度,那么我们要做的是需要把抽象的经纬度转成可读的有意义的真正的用户地理位置信息。幸运的是百度地图和谷歌地图等提供了这方面的接口,我们只需要将HTML5获取到的经纬度信息传给地图接口,则会返回用户所在的地理位置,包括省市区信息,甚至有街道、门牌号等详细的地理位置信息。
我们首先在页面定义要展示地理位置的div,分别定义id#baidu_geo和id#google_geo。我们只需修改关键函数showPosition()。先来看百度地图接口交互,我们将经纬度信息通过Ajax方式发送给百度地图接口,接口会返回相应的省市区街道信息。百度地图接口返回的是一串JSON数据,我们可以根据需求将需要的信息展示给div#baidu_geo。注意这里用到了jQuery库,需要先加载jQuery库文件。

function showPosition(position){ 
  var latlon = position.coords.latitude+','+position.coords.longitude; 
   
  //baidu 
  var url = "http://api.map.baidu.com/geocoder/v2/?ak=C93b5178d7a8ebdb830b9b557abce78b&callback=renderReverse&location="+latlon+"&output=json&pois=0"; 
  $.ajax({ 
    type: "GET", 
    dataType: "jsonp", 
    url: url, 
    beforeSend: function(){ 
      $("#baidu_geo").html('正在定位...'); 
    }, 
    success: function (json) { 
      if(json.status==0){ 
        $("#baidu_geo").html(json.result.formatted_address); 
      } 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
      $("#baidu_geo").html(latlon+"地址位置获取失败"); 
    } 
  }); 
});

再来看谷歌地图接口交互。同样我们将经纬度信息通过Ajax方式发送给谷歌地图接口,接口会返回相应的省市区街道详细信息。谷歌地图接口返回的也是一串JSON数据,这些JSON数据比百度地图接口返回的要更详细,我们可以根据需求将需要的信息展示给div#google_geo。

function showPosition(position){ 
  var latlon = position.coords.latitude+','+position.coords.longitude; 
 
  //google 
  var url = 'http://maps.google.cn/maps/api/geocode/json?latlng='+latlon+'&language=CN'; 
  $.ajax({ 
    type: "GET", 
    url: url, 
    beforeSend: function(){ 
      $("#google_geo").html('正在定位...'); 
    }, 
    success: function (json) { 
      if(json.status=='OK'){ 
        var results = json.results; 
        $.each(results,function(index,array){ 
          if(index==0){ 
          $("#google_geo").html(array['formatted_address']); 
          } 
        }); 
      } 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
      $("#google_geo").html(latlon+"地址位置获取失败"); 
    } 
  }); 
}

以上的代码分别将百度地图接口和谷歌地图接口整合到函数showPosition()中,我们可以根据实际情况进行调用。当然这只是一个简单的应用,我们可以根据这个简单的示例开发出很多复杂的应用,建议用手机浏览器访问DEMO演示。

Javascript 相关文章推荐
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
JavaScript中的类数组对象介绍
Dec 30 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
javascript学习之json入门
Dec 22 Javascript
Vue.js系列之vue-router(上)(3)
Jan 03 Javascript
Jquery实现跨域异步上传文件总结
Feb 03 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
Oct 11 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
Sep 14 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 #Javascript
Javascript非构造函数的继承
Apr 27 #Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
Apr 27 #Javascript
jquery简单的弹出层浮动层代码
Apr 27 #Javascript
javascript实现俄罗斯方块游戏的思路和方法
Apr 27 #Javascript
JQuery记住用户名密码实现下次自动登录功能
Apr 27 #Javascript
JavaScript使用cookie实现记住账号密码功能
Apr 27 #Javascript
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php smarty的预保留变量总结
2008/12/04 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
前端js文件合并的三种方式推荐
2016/05/19 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
Vue中使用canvas方法总结
2019/02/12 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
Python的垃圾回收机制深入分析
2014/07/16 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
python pandas库的安装和创建
2019/01/10 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
简单了解python数组的基本操作
2019/11/26 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
加强作风建设工作总结
2014/10/23 职场文书
2014年少先队工作总结
2014/12/03 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
python控制台打印log输出重复的解决方法
2021/05/14 Python
Python中的变量与常量
2021/11/11 Python