`
胡小米
  • 浏览: 77307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HTML5 地理定位 GeoLocation

 
阅读更多
HTML5 地理定位 GeoLocation
时间:2011-08-23 01:33 来源:未知 作者:admin 点击:2036
HTML5提供了一组API用来获取用户的地理位置,如果浏览器支持且设备具有定位功能,就能够直接使用这组API来获取当前位置信息。下图是用iPad的Safari浏览器,访问Google地图的截屏(不是iPad预装的Maps)



使用这组API的方法非常简单,是navigator对象的一个属性geolocation,如下:
navigator.geolocation.getCurrentPosition(show_map);

其中show_map是回调函数。因此加上判断浏览器是否支持的完整方法:
function get_location(){
if(navigator.geolocation){
  navigator.geolocation.getCurrentPosition(show_map);
}else{
  alert("Your browser does not support HTML5 geoLocation");
}
}

截止目前,支持它的浏览器:
IE Firefox Safari Chrome Opera iPhone/iPad Android
3.5+ 5.0+ 5.0+ 3.0+ 2.0+

通常浏览器都会问用户,是否允许页面使用您的当前位置,Firefox是最上面弹出一个提示条,iPad是弹出对话框。一般人都会选允许,如果不允许会返回错误,稍后说。

回调函数show_map,主要是提供一个position对象,返回地理信息,如下:
function show_map(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
showObject(position,0);//自己写一个把数据显示出来的函数
}
详细的HTML5官方定义:
Property Type Notes
coords.latitude(纬度) double Decimal degrees
coords.longitude(经度) double Decimal degrees
coords.altitude(海拔) double or null Meters
coords.accuracy(精确度) double Meters
coords.altitudeAccuracy double or null Meters
coords.heading(朝向) double or null degrees clockwise from the north
coords.speed double or null Meters/second
timestamp DOMTimeStamp Like a Date() object

地理信息这东西,经常会出错,各种因素吧,例如信号不好等等。因此getCurrentPosition其实还有第二个参数,就是处理错误的,如下:
navigator.geolocation.getCurrentPosition(show_map,handle_error);

其中handle_error也是一个回调函数,提供一个err对象,包含code和message两个属性,使用方法较简单:
function handle_error(err){
switch(err.code){
  case 1 :
   alert("permission denied");//用户选了不允许
   break;
  case 2:
   alert("the network is down or the position satellites can't be contacted");
   //连不上GPS卫星,或者网络断了
   break;
  case 3:
   alert("time out");//超时了
   break;
  default:
   alert("unknown error");//未知错误,其实是err.code==0的时候
   break;
}
}

再深入一些,getCurrentPosition其实还有第三个参数,是一个对象,可以设置超时时间、缓存时间等,如下:
Property Type Default Notes
enableHighAccuracy boolean false true might be slower
timeout long (no default) In milliseconds
maximumAge long 0 In milliseconds

例如:
navigator.geolocation.getCurrentPosition(show_map,handle_error,{enableHighAccuracy:true,maximumAge:75000});

enableHighAccuracy表示是否允许使用高精度,但这个参数在很多设备上设置了都没用,设备综合考虑电量、地理情况等,很多时候都是默认的由设备自身来调整。
maximumAge是指缓存的时间,例如maximumAge:75000(1分钟是60000)。那么如果10:00整的时候获取过一次地理信息,10:01的时候,再次调用navigator.geolocation.getCurrentPosition,返回的依然是10:00时候的数据。

综上所述,我自己写的一个在iPad上的程序:
function showObject(obj,k){
//递归显示object
if(!obj){return;}
for(var i in obj){
  if(typeof(obj[i])!="object" || obj[i]==null){
   for(var j=0;j<k;j++){
    document.write("&nbsp;&nbsp;&nbsp;&nbsp;");
   }
   document.write(i + " : " + obj[i] + "<br/>");
  }else{
   document.write(i + " : " + "<br/>");
   showObject(obj[i],k+1);
  }
}
}
function get_location(){
if(navigator.geolocation){
  navigator.geolocation.getCurrentPosition(show_map,handle_error,{enableHighAccuracy:true,maximumAge:1000});
}else{
  alert("Your browser does not support HTML5 geoLocation");
}
}
function handle_error(err){
//错误处理
switch(err.code){
  case 1 :
   alert("permission denied");
   break;
  case 2:
   alert("the network is down or the position satellites can't be contacted");
   break;
  case 3:
   alert("time out");
   break;
  default:
   alert("unknown error");
   break;
}
}
function show_map(position){
//显示地理信息
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
showObject(position,0);
}
get_location();

在公司的iPad上跑了一下,结果是这样的:
coords:
speed : null
accuracy : 80
altitudeAccuracy : null
altitude : null
longitude : 116.30371844499999
heading : null
latitude : 39.98390346
timestamp : 1288180931839

如果希望持续的获取用户的地理信息,当然可以采用javascript的setInterval,但是HTML5提供了另外一个函数,能够自动刷,就是navigator.geolocation.watchPosition。它跟上面提到的getCurrentPosition参数完全一样,用法也一样。不同的就是它会自己不断刷新。
另外,watchPosition函数本身,还返回一个数字,跟setInterval类似,可以使用clearWatch()来清除,例如:

var watchInterval = navigator.geolocation.watchPosition(show_map,handle_error,{enableHighAccuracy:true,maximumAge:1000,timeout:15000});
在需要的时候可以使用clearWatch(watchInterval);

Google地图是比较好的例子。另外,天气预报也是可以利用地理信息的,让用户能够直接看到自己所在城市的天气,而不需要再选城市。再有就是一些大的国际新闻媒体网,会根据用户的地理位置,显示不同地区的新闻。
前几天做讲座的时候,发现baidu最近也更新了iPad上的地图页面,也能够显示地理位置,下面是iPad的Safari打开baidu地图的截图,虽然把我公司定位到了四环大马路上,但还是非常准的(之前程序跑出来,精度是80米嘛)
分享到:
评论

相关推荐

    Html5 Geolocation获取地理位置信息实例

    HTML5 Geolocation是HTML5提供的一个标准API,允许网页和应用获取用户的地理位置信息,这对于开发基于用户位置的服务应用具有重要意义。下面将详细介绍HTML5 Geolocation相关知识点: 一、HTML5 Geolocation的核心...

    HTML5地理位置定位

    - **当前**:HTML5 Geolocation API的出现极大地简化了地理定位应用的开发过程,推动了移动应用和增强现实应用的发展。 通过以上知识点的详细介绍,我们可以了解到HTML5地理位置定位技术的基本概念、工作原理以及...

    html5地理位置定位功能.zip

    这个“html5地理位置定位功能.zip”压缩包包含了一个名为“11.html5地理位置定位功能”的文件,很可能是演示或讲解如何在HTML5中实现这一特性的代码示例或教程。 HTML5的地理位置定位API允许网页获取用户的地理位置...

    geolocation:HTML5 地理定位

    HTML5 地理定位 作为 HTML 演变的一部分而提供的新 API 之一是地理定位。 这是浏览器根据实际 GPS 数据、ISP、IP 地址或 Wi-Fi 网络返回设备纬度和经度的能力。 参考 CODEPEN ##Links 以帮助进行地理定位 以下是...

    HTML5 Geolocation(地理定位)

    HTML5 Geolocation(地理定位)用于定位用户的位置。 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置。 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。 浏览器支持 ...

    geolocation地理定位

    geolocation地理定位

    HTML的地理定位代码

    HTML的地理定位代码是网页开发中的一个重要特性,它允许用户在浏览器中获取设备的位置信息,如经纬度坐标、海拔、精确度等。这项技术主要基于Web API中的Geolocation API,它使得开发者能够创建出与地理位置相关的...

    geolocation 根据地理坐标获取具体位置信息

    总之,`geolocation` API 是HTML5提供的强大功能,极大地拓宽了Web应用的边界,使得开发者能够以前所未有的方式利用用户的地理位置信息。正确、安全地使用这个API,可以帮助创建出更加智能化、个性化的Web应用。

    Android使用_HTML_5地理定位_API.pptx

    - **地理定位API**:`navigator.geolocation`是HTML5中用于获取用户地理位置信息的核心接口。主要方法包括`getCurrentPosition()`和`watchPosition()`等。 - **地理定位API方法**: - `getCurrentPosition()`: 一...

    HTML5.rar_Table_html5_html5地图_地理位置

    接下来,我们关注HTML5的地理定位(Geolocation)API。这个API允许网页获取用户的地理位置信息,为个性化服务提供了可能性。"地理位置.html"可能就是演示如何使用JavaScript与Geolocation API交互,请求用户授权后...

    HTML5 geoLocation API

    HTML5的地理定位功能演示

    利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位

    HTML5的Geolocation API是现代Web开发中用于获取设备地理位置信息的重要工具,它允许网页应用获取用户的精确位置,如经纬度、海拔等。这个API在移动应用和地图服务中尤其常见,例如集成Google Maps API来展示用户的...

    Python-Seeker利用HTML5JavascriptJQuery和PHP以高精度获取设备信息和GeoLocation

    Python-Seeker是一个利用HTML5、JavaScript、jQuery和PHP技术构建的工具,旨在高精度地获取用户设备的各种信息,包括但不限于地理位置(GeoLocation)。这个项目主要面向开发者,特别是对网络应用监控、数据分析或...

    HTML5程序设计-3期(KC014) 单元设计_单元6 HTML5地理定位.doc

    HTML5程序设计中的单元6专注于HTML5地理定位技术,这是现代网页开发中一个重要的功能,允许网站和应用程序访问用户的地理位置信息。以下是对这个单元主要内容的详细说明: **地理位置信息表示方式** 在HTML5中,...

    html5培训之地理定位

    HTML5地理定位功能是一种能够让网页应用访问用户地理位置的技术。它通过浏览器提供了一种简单而统一的方式,让开发者可以请求并处理用户的地理位置信息。这在开发地图应用、位置服务、天气预报等基于地理位置的应用...

    基于HTML5的地理位置定位实验代码

    利用Html5的新特性geolocation可以获取用户的地理位置定位信息,并借助百度活google的地图api将所获取的地理位置信息展示在地图上。 做这个实验时必须保证测试的页面部署在HTTP服务器上,否则如果直接浏览器从本地...

    HTML5的Geolocation地理位置定位API使用教程

    为了顺应这个潮流,HTML5为我们提供了Geolocation库,有了它我们就能够在Web应用中轻而易举地实现上述这些功能。那么今天我就为大家介绍一下这个库的使用。 基本用法 首先,我们可以从浏览器的navigator对象中通过...

    基于浏览器的HTML5地理定位.docx

    总结,基于浏览器的HTML5地理定位是通过HTML5 Geolocation API获取设备位置信息,然后结合地图API(如高德地图JS API)将这些信息在地图上展示出来。这个过程涉及到用户权限、安全策略以及各种兼容性处理,是现代Web...

Global site tag (gtag.js) - Google Analytics