`
snoopy7713
  • 浏览: 1122012 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

HTML 5中地理位置api小结

阅读更多

  HTML 5提供了地理位置等一系列API可以给用户使用,方便用户制作LBS的地理应用,首先在支持HTML 5的浏览器中,当开启API时,会询问是否用户同意使用api,否则不会开启的,保证安全。


1) 开启,判断是否浏览器支持LBS api

Java代码  收藏代码
  1. function isGeolocationAPIAvailable()  
  2. {  
  3.   
  4.   var location = "No, Geolocation is not supported by this browser." ;   
  5.   if  (window.navigator.geolocation) {  
  6.     location = "Yes, Geolocation is supported by this browser." ;  
  7.   }  
  8.   alert(location);  
  9. }  


   上面的例子中,还在displayError方法中,捕捉了异常;

2 获得用户的地理位置:

    这个使用getCurrentPosition就可以了;

Java代码  收藏代码
  1. function requestPosition() {  
  2. if  (nav ==  null ) {  
  3. nav = window.navigator;  
  4. }  
  5. if  (nav !=  null ) {  
  6. var geoloc = nav.geolocation;  
  7. if  (geoloc !=  null ) {  
  8. geoloc.getCurrentPosition(successCallback);  
  9. }  
  10. else  {  
  11. alert("Geolocation API is not supported in your browser" );  
  12. }  
  13. }  
  14. else  {  
  15. alert("Navigator is not found" );  
  16. }  
  17. }  


   当获得地理位置成功后,会产生一个回调方法了,处理返回的结果,

  
Java代码  收藏代码
  1. function setLocation(val, e) {    
  2.   document.getElementById(e).value = val;  
  3. }   
  4.     
  5. function successCallback(position)  
  6. {   
  7.   setLocation(position.coords.latitude, "latitude" );   setLocation(position.coords.longitude,  "longitude" );  
  8. }  



 



3)
一个很常见的问题,是如何跟踪用户不断变化的地理位置,这里小结下其中用到的两个api。

1 watchPosition

   例子如下:

 
Java代码  收藏代码
  1.        
  2. function listenForPositionUpdates() {  
  3.     if  (nav ==  null ) {  
  4.         nav = window.navigator;  
  5.     }  
  6.     if  (nav !=  null ) {  
  7.         var geoloc = nav.geolocation;  
  8.         if  (geoloc !=  null ) {  
  9.             watchID = geoloc.watchPosition(successCallback);  
  10.         } else  {  
  11.             alert("Geolocation API is not supported in your browser" );  
  12.         }  
  13.     } else  {  
  14.         alert("Navigator is not found" );  
  15.     }  
  16. }  


   然后在successCallback中,就可以设置显示最新的地理位置:

 
Java代码  收藏代码
  1. function successCallback(position){   
  2.   setText(position.coords.latitude, "latitude" );   setText(position.coords.longitude,  "longitude" );  
  3. }  


   如果不希望实时跟踪,则可以取消之:

  function clearWatch(watchID) { 
  window.navigator.geolocation.clearWatch(watchID);

}

4) 如何处理异常:
    当遇到异常时,可以捕捉之:

 
Java代码  收藏代码
  1. if  (geoloc !=  null ) {     
  2.    geoloc.getCurrentPosition(successCallback, errorCallback);    
  3.     }  
  4.   
  5. function errorCallback(error) {  
  6.     var message = "" ;  
  7.     switch  (error.code) {  
  8.     case  error.PERMISSION_DENIED:  
  9.         message = "This website does not have permission to use "   
  10.                 + "the Geolocation API" ;  
  11.         break ;  
  12.     case  error.POSITION_UNAVAILABLE:  
  13.         message = "The current position could not be determined." ;  
  14.         break ;  
  15.     case  error.PERMISSION_DENIED_TIMEOUT:  
  16.         message = "The current position could not be determined "   
  17.                 + "within the specified timeout period." ;  
  18.         break ;  
  19.     }  
  20.     if  (message ==  "" ) {  
  21.         var strErrorCode = error.code.toString();  
  22.         message = "The position could not be determined due to "   
  23.                 + "an unknown error (Code: "  + strErrorCode +  ")." ;  
  24.     }  
  25.     alert(message);  
  26. }  


  
5) 在google 地图上显示位置(前提是有google map api等设置好)

  
Java代码  收藏代码
  1. function getCurrentLocation()  
  2.   {  
  3.   if  (navigator.geolocation)  
  4.     {  
  5.     navigator.geolocation.getCurrentPosition(showMyPosition,showError);  
  6.     }  
  7.   else   
  8.    {  
  9.     alert("No, Geolocation API is not supported by this browser." );  
  10.     }  
  11.  }  
  12.   
  13.   function showMyPosition(position)  
  14. {  
  15. var coordinates=position.coords.latitude+"," +position.coords.longitude;  
  16. var map_url="http://maps.googleapis.com/maps/api/staticmap?center="   
  17. +coordinates+"&zoom=14&size=300x300&sensor=false" ;  
  18. document.getElementById("googlemap" ).innerHTML= "<img src='" +map_url+ "' />" ;  
  19. }  
  20.   
  21.  function showError(error)  
  22.  {  
  23.   switch (error.code)  
  24.   {  
  25.   case  error.PERMISSION_DENIED:  
  26.   alert("This website does not have permission to use the Geolocation API" )  
  27.   break ;  
  28.   
  29.   case  error.POSITION_UNAVAILABLE:  
  30.   alert("The current position could not be determined." )  
  31.   break ;  
  32.   
  33.   case  error.TIMEOUT:  
  34.   alert("The current position could not be determined within the specified time  out period." )  
  35.   break ;  
  36.   
  37.   case  error.UNKNOWN_ERROR:  
  38.   alert("The position could not be determined due to an unknown error." )  
  39.   break ;  
  40.   }  
  41.  } 
分享到:
评论

相关推荐

    html5中地理位置定位api接口开发应用小结

    地理位置定位的几种方式:IP地址,GPS,Wifi,GSM/CDMA 地理位置获取流程: 1、用户打开需要获取地理位置的web应用。 2、应用向浏览器请求地理位置,浏览器弹出询问,询问用户是否共享地理位置。 3、假设用户允许,...

    HTML5高级程序设计

    从第2 章起,分别围绕构建令人神往的富web 应用,逐一讨论了html5 的canvas、geolocation 、communication、websocket、forms、web workers、storage 等api 的使用, 辅以直观明了的客户端和服务器端示例代码,让...

    完整版《HTML5高级程序设计》5

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计和...

    完整版《HTML5高级程序设计》2

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计和...

    完整版《HTML5高级程序设计》4

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计和...

    HTML5程序设计(第2版).[荷]Peter Lubbers(带详细书签).pdf

    《深入HTML5编程(第 2版)》首先介绍了HTML5的历史背景、新的语义标签及与以往HTML版本相比的根本变化,同时揭示了HTML5背后的设计原理。本书在上一版的基础上新增了SVG和拖放API相关内容,并对部分... 13.3 小结 275

    HTML5高级程序设计.part5

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计...

    完整版《HTML5高级程序设计》3

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计和...

    HTML5高级程序设计.part4

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计...

    HTML5高级程序设计.part1

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计...

    HTML5高级程序设计.part2

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计...

    HTML5高级程序设计.part3

    由于上传文件大小限制,只能分为5部分上传,其余部分请在我的资源中找到,下载后共同解压 内容简介  今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计...

    从入门到精通HTML5——PDF——网盘链接

     第15章 HTML 5中的文件与拖放 280  视频讲解:40分钟  15.1 选择文件 281  15.1.1 通过file对象选择文件 281  15.1.2 使用blob接口获取文件的类型与大小 282  15.1.3 通过类型过滤选择的文件 283  15.2 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    2.4 本章小结 15 第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18...

    JavaScript权威指南(第6版)中文文字版

    7.9 ecmascript 5中的数组方法 156 7.10 数组类型 160 7.11 类数组对象 161 7.12 作为数组的字符串 163 第8章 函数 165 8.1 函数定义 166 8.2 函数调用 168 8.3 函数的实参和形参 173 8.4 作为值的函数 178 8.5 作为...

    JavaScript权威指南(第6版)(中文版)

    7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 函数 8.1 函数定义 8.2 函数调用 8.3 函数的实参和形参 8.4 作为值的函数 8.5 作为命名空间的函数 8.6 闭包 8.7 函数属性...

    JavaScript权威指南(第6版)

    7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 函数 8.1 函数定义 8.2 函数调用 8.3 函数的实参和形参 8.4 作为值的函数 8.5 作为命名空间的函数 8.6 闭包 8.7 函数属性...

Global site tag (gtag.js) - Google Analytics