`
longgangbai
  • 浏览: 7256928 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTML5 的GEOLocation的API

 
阅读更多

      Geolocation API用于将用户当前地理位置信息共享给信任的站点,这涉及用户的隐私安全问题,所以当一个站点需要获取用户的当前地理位置,浏览器会提示用户是“允许” or “拒绝”。

先看看哪些浏览器支持Geolocation API:
IE9.0+、FF3.5+、Safari5.0+、Chrome5.0+、Opera10.6+、IPhone3.0+、Android2.0+
也就是说除IE6~IE8外,其它最新的浏览器基本上都支持,包括最新的移动手机。
Geolocation API存在于navigator对象中,只包含3个方法:
1、getCurrentPosition
2、watchPosition
3、clearWatch
getCurrentPosition、watchPosition的参数说明,示例:
navigator.geolocation.getCurrentPosition(success_callback, error_callback, {geolocation选项});
第一个参数是用户允许浏览器共享geolocation成功后的回调方法
第二个参数是用获取地理位置信息失败的处理方法,传入错误对象,包含code、message两个属性
第三个参数都是geolocation选项,所有的geolocation选项都是可选的,它包含的属性如下:
enableHighAccuracy(Boolean型,默认为false,是否尝试更精确地读取纬度和经度,移动设备上,这可能要使用手机上的GPS,这会消耗移动设备更多的电量)
timeout(单位为毫秒,默认值为0,在放弃并触发处理程序之前,可以等待的时间----用户选择期间是不计时的)
maximumAge(单 位为毫秒,默认值为0。用来告诉浏览器是否使用最近缓存的位置数据,如果在maximumAge内有一个请求,将会返回它,而不请求新位置。 maximumAge如果为Infinity,则总是使用一个缓存的位置,如果为0则必须在每次请求时查找一个新位置)
简单的一个示例:

当我点击拒绝时:

当点击允许时:

html源代码:

<html> 
<head> 
<meta http-equiv="Content-Type" contentType="text/html; charset=UTF-8" %> 
<title>HTML5 物理定位</title> 
<script type="text/javascript">
window.onload=function(){
    var options={
            enableHighAccuracy:true,
            maximunAge:1000,
            timeout:45000
    };
    if(window.navigator.geolocation){
        navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options);
    }else{
        alert("你的浏览器不支持定位!");
    }
}
function successCallback(position){
    var output="";
    output +="Your position has bean located . \r\n";
    output+=" Latitude:"+position.coords.latitude+" ";
    output+=" Longitude:"+position.coords.longitude+" ";
    output+=" Accuracy :"+position.coords.accuracy +" meters";
    if(position.coords.latitude){
        output+=" Accuracy :"+position.coords.altitudeAccuracy +" meters";
    }
    if(position.coords.heading){
        output+=" Heading :"+position.coords.Heading +" meters";
    }
    if(position.coords.speed){
        output+=" Speed :"+position.coords.Speed +" m/s";
    }
    output+=" Time of Position "+position.timestamp +" m/s";
    alert(output);
}
function errorCallback(error){
   switch(error.code){
   case error.PERMISSION_DENIED:
       alert("you have denied access to your position .");
       break;
   case error.POSITION_UNAVAILABLE:
       alert("there was a problem getting yout position .");
       break;
   case error.TIMEOUT:
       alert("The application has timed out attempting to get your location .");
       break;
       
   }
}
</script>
</head> 
<body > 
    
</body> 
</html> 

 

 

 

上面的例子中,只使用了success_callback中的纬度(latitude)和经度(longitude),成功后回调获取用户位置数据position,它包含两个属性:coords、timestamp。
coords属性有7个值,包含上面用到的纬度、经度。
1、accuracy 准确角
2、altitude 海拔高度
3、altitudeAcuracy 海拔高度的精确度
4、heading 行进方向
5、speed 地面的速度
根据获得的纬度与经度,很容易将用户的位置在google地图中显示出来,如下例所示:

核心的javascript脚本:

在google地图+HTML5定位个人位置

<html>    
<head>    
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />   
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>    
<title>google GEO 物理定位 </title>    

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script>
function getElem(id) {
    return typeof id === 'string' ? document.getElementById(id) : id;
}
function success(position) {
    var mapcanvas = document.createElement('div');
    mapcanvas.id = 'mapcanvas';
    mapcanvas.style.height = '100%';
    mapcanvas.style.width = '100%';
    getElem("map_canvas").appendChild(mapcanvas);
    var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 
    var myOptions = {
        zoom: 15,
        center: latlng,
        mapTypeControl: false,
        navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);
    var marker = new google.maps.Marker({
      position: latlng, 
      map: map, 
      title:"你在这里!"
    });
}
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(success); 
} else {
   alert("您当前使用的浏览器不支持geolocation服务");
}  
</script>
</head>
<body>
 <div id="map_canvas"></div>
</body>
</html>

 

watchPosition像一个追踪器,与clearWatch成对。watchPosition与clearWatch有点像setInterval和clearInterval的工作方式。
var watchPositionId = navigator.geolocation.watchPosition(success_callback, error_callback, options);
navigator.geolocation.clearWatch(watchPositionId );

 

利用百度+HTML5定位个人位置:

<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
<title>百度地图</title>
<script type='text/javascript' src='http://api.map.baidu.com/api?v=1.3'></script>
<script type='text/javascript'>

function getLocation()
{
	if(navigator.geolocation){
		navigator.geolocation.getCurrentPosition(showMap, handleError, {enableHighAccuracy:true, maximumAge:1000});
	}else{
		alert('您的浏览器不支持使用HTML 5来获取地理位置服务');
	}
}

function showMap(value)
{
	var longitude = value.coords.longitude;
	var latitude = value.coords.latitude;
	var map = new BMap.Map('map');
	var point = new BMap.Point(longitude, latitude);    // 创建点坐标
	map.centerAndZoom(point, 15);
	var marker = new BMap.Marker(new BMap.Point(longitude, latitude));  // 创建标注
	map.addOverlay(marker);              // 将标注添加到地图中
}

function handleError(value)
{
	switch(value.code){
		case 1:
			alert('位置服务被拒绝');
			break;
		case 2:
			alert('暂时获取不到位置信息');
			break;
		case 3:
			alert('获取信息超时');
			break;
		case 4:
			alert('未知错误');
		break;
	}
}

function init()
{
	getLocation();
}

window.onload = init;

</script>
</head>

<body>
<div id='map' style='width:600px;height:600px;'></div>
</body>
</html>

 

 


 
关于Geolocation API的更多参考:
W3C geolocation API
Gears
BlackBerry geolocation API
Nokia geolocation API
Palm geolocation API
OMTP BONDI geolocation API
geo.js
Internet Explorer 9 Guide for Developers: Geolocation
MDN Using geolocation
http://diveintohtml5.org/geolocation.html

来源:草根网(www.20ju.com) - 互联网界的读者文摘

分享到:
评论
1 楼 xpxia 2014-08-04  
碰到一个问题啊,现在Android手机上不能获取定位信息了,这个是为什么呢?

相关推荐

    HTML5 geoLocation API

    HTML5的地理定位功能演示

    HTML5 Geolocation API的正确使用方法

    Geolocation是HTML5标准下的一个Web API,利用它可以获取设备的当前位置信息(坐标),本篇文章主要介绍了三个方法,非常具有实用价值,需要的朋友可以参考下

    ngGeolocator:让用户在 HTML5 Geolocation API 和 Google Maps 的帮助下告诉你他们在哪里

    ng地理定位器 让用户借助 HTML5 Geolocation API 和 Google Maps 告诉您他们在哪里。 现场演示: : 该项目使用作为起点。安装 npm install --save ng-geolocator或者 bower install --save ng-geolocator入门有关...

    mockgeolocation:用于模拟 html 5 geolocation api 的库

    MockGeolocation 是一个用于模拟 html 5 geolocation api 的库。 用法 // simulate a geolocation MockGeolocation.setCurrentLatLng(53.4152431, -8.2390307) // get current position navigator.geolocation....

    深入HTML5应用开发

    第一部分介绍了HTML5 Geolocation API。使用这种API,开发人员不必针对特定设备编程,就能够在浏览器中直接编写地理定位应用。这部分共6章,介绍了Geolocation API在浏览器代码中的使用,并通过大量示例向读者展示其...

    Find-Nearest-Marketo-Office:示例展示了如何通过 HTML5 Geolocation API 根据用户的位置动态更改页面内容

    查找最近的 Marketo-Office 此示例获取用户的位置,并返回最近的 Marketo 办公室位置及其电话号码。 如果无法访问用户的位置,则脚本默认为 Marketo 的... 该示例使用和 HTML5 Geolocation API。 讨论了更多实施细节。

    深入HTML+5应用开发

    第一部分介绍了HTML5 Geolocation API。使用这种API,开发人员不必针对特定设备编程,就能够在浏览器中直接编写地理定位应用。这部分共6章,介绍了Geolocation API在浏览器代码中的使用,并通过大量示例向读者展示其...

    HTML5高级程序设计

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

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

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

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

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

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

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

    HTML5 Geolocation(地理定位)

    HTML5 Geolocation API 用于获得用户的地理位置。 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。 浏览器支持 Internet Explorer 9+, Firefox, Chrome, Safari 和 Opera 支持...

    深入Html5应用开发

    第一部分介绍了HTML5 Geolocation API。使用这种API,开发人员不必针对特定设备编程,就能够在浏览器中直接编写地理定位应用。这部分共6章,介绍了Geolocation API在浏览器代码中的使用,并通过大量示例向读者展示其...

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

    从第 2章起,分别围绕构建令人神往的富Web 应用,逐一讨论了HTML5的Canvas、Geolocation、Communication、WebSocket、Forms、WebWorkers、Storage等API的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员...

    HTML5高级程序设计.part5

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

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

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

    HTML5高级程序设计.part4

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

    HTML5高级程序设计.part1

    为读者清晰解读了HTML5规范的缘由、发展和现状,全面展示了如何使用 WebSocket、Geolocation、Web Storage、Canvas及音频视频等前所未有的新特性构建先进的Web应用,并以大量的示例涵盖全部HTML5 API。此外,还介绍...

Global site tag (gtag.js) - Google Analytics