如何使用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.ajax)
Nov 19 Javascript
JQuery 绑定事件时传递参数的实现方法
Oct 13 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
js正则表达式的使用详解
Jul 09 Javascript
一个支付页面DEMO附截图
Jul 22 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
9个让JavaScript调试更简单的Console命令
Nov 14 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 jQuery
解决webpack多页面内存溢出的方法示例
Oct 08 Javascript
使用Karma做vue组件单元测试的实现
Jan 16 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
php 魔术函数使用说明
2010/02/21 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
2013/05/15 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
Python模块future用法原理详解
2020/01/20 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
python3跳出一个循环的实例操作
2020/08/18 Python
python解包用法详解
2021/02/17 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
HTML5 Web 存储详解
2016/09/16 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
大班上学期个人总结
2015/02/13 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android