HTML5 Geolocation(地理位置)

HTML5 Geolocation(地理位置) API 用于获得用户的地理位置。

鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可以用的。


HTML5--使用地理定位

   使用getCurrentPosition()方法来获得用户的位置。

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<title>自选教程(如约智惠.com)</title>
		
	</head>
	<body > 
		<p id="demo">点击按钮获取您的当前坐标(可能需要比较长的时间获取):</p>
		<button onclick="getLocation()">点我</button>
		<script>
			var x=document.getElementById("demo");
			function getLocation()
			{
				if (navigator.geolocation)
				{
					navigator.geolocation.getCurrentPosition(showPosition);
				}
				else
				{
					x.innerHTML="该浏览器不支持获取地理位置。";
				}
			}

			function showPosition(position)
			{
				x.innerHTML="纬度: " + position.coords.latitude + 
				"<br>经度: " + position.coords.longitude;	
			}
						
		</script>

	</body>
</html>

实例解析:

  • 检测是否支持地理定位
  • 如果支持,则运行 getCurrentPosition() 方法。如果不支持,则向用户显示一段消息。
  • 如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象
  • showPosition() 函数获得并显示经度和纬度

处理错误和拒绝

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<title>自选教程(如约智惠.com)</title>
		
	</head>
	<body > 
		<p id="demo">点击按钮获取您的当前坐标(可能需要比较长的时间获取):</p>
		<button onclick="getLocation()">点我</button>
		<script>
			var x=document.getElementById("demo");
			function getLocation()
			{
				if (navigator.geolocation)
				{
					navigator.geolocation.getCurrentPosition(showPosition, showError);
				}
				else
				{
					x.innerHTML="该浏览器不支持获取地理位置。";
				}
			}

			function showPosition(position)
			{
				x.innerHTML="纬度: " + position.coords.latitude + 
				"<br>经度: " + position.coords.longitude;	
			}
			
			function showError(error)
			{
				switch(error)
				{
					case error.PERMISSION_DENIED:
						x.innerHTML="用户拒绝对获取地理位置的请求。";
						break;
					case error.POSITION_UNAVAILABLE:
						x.innerHTML="位置信息是不可用的。";
						break;
					case error.UNKNOWN_ERROR:
						x.innerHTML="未知错误.";
						break;
						
				}
			}
						
		</script>

	</body>
</html>

错误代码:

  • Permission denied - 用户不允许地理定位
  • Position unavailable - 无法获取当前位置
  • Timeout - 操作超时


在地图中显示结果

   如需在地图中显示结果,您需要访问可使用经纬度的地图服务,比如谷歌地图或百度地图:

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<title>自选教程(如约智惠.com)</title>
		
	</head>
	<body > 
		<p id="demo">点击按钮获取您的当前坐标(可能需要比较长的时间获取):</p>
		<button onclick="getLocation()">点我</button>
		<div id="mapholder"></div>
		<script>
			var x=document.getElementById("demo");
			function getLocation()
			{
				if (navigator.geolocation)
				{
					navigator.geolocation.getCurrentPosition(showPosition, showError);
				}
				else
				{
					x.innerHTML="该浏览器不支持获取地理位置。";
				}
			}

			function showPosition(position)
			{
				var latlon=position.coords.latitude + "," + position.coords.longitude;
				
				var img_url="http://maps.googleapis.com/maps/api/staticmap?center="
				+latlon+"&zoom=14&size=400x300&sensor=false";
				
				document.getElementById("mapholder").innerHTML=<img src='"+img_url+"';
			}
			
			function showError(error)
			{
				switch(error)
				{
					case error.PERMISSION_DENIED:
						x.innerHTML="用户拒绝对获取地理位置的请求。";
						break;
					case error.POSITION_UNAVAILABLE:
						x.innerHTML="位置信息是不可用的。";
						break;
					case error.TIMEOUT:
						x.innerHTML="请求用户地理位置超时。"
						break;
					case error.UNKNOWN_ERROR:
						x.innerHTML="未知错误.";
						break;
						
				}
			}
						
		</script>

	</body>
</html>

getCurrentPosition()方法--返回数据

属性 描述
coords.latitude 十进制数的纬度
coords.longitude 十进制数的经度
coords.accuracy 位置精度
coords.altitude 海拔,海平面以上以米计
coords.altitudeAccuracy 位置的海拔精度
coords.heading 方向,从正北开始以度计
coords.speed 速度,以米/每秒计
timestamp 响应的日期/时间

Geolocation 对象--其他有趣的方法

   watchPosition()---返回用户的当前位置,并继续返回用户移动时的更新位置;

   clearPosition()---停止watchPosition()方法

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="utf-8" />
		<title>自选教程(如约智惠.com)</title>
		
	</head>
	<body > 
		<p id="demo">点击按钮获取您的当前坐标(可能需要比较长的时间获取):</p>
		<button onclick="getLocation()">点我</button>
		<div id="mapholder"></div>
		<script>
			var x=document.getElementById("demo");
			function getLocation()
			{
				if (navigator.geolocation)
				{
					navigator.geolocation.watchPosition(showPosition, showError);
				}
				else
				{
					x.innerHTML="该浏览器不支持获取地理位置。";
				}
			}

			function showPosition(position)
			{
				var latlon=position.coords.latitude + "," + position.coords.longitude;
				
				var img_url="http://maps.googleapis.com/maps/api/staticmap?center="
				+latlon+"&zoom=14&size=400x300&sensor=false";
				
				document.getElementById("mapholder").innerHTML=<img src='"+img_url+"';
			}
			
			function showError(error)
			{
				switch(error)
				{
					case error.PERMISSION_DENIED:
						x.innerHTML="用户拒绝对获取地理位置的请求。";
						break;
					case error.POSITION_UNAVAILABLE:
						x.innerHTML="位置信息是不可用的。";
						break;
					case error.TIMEOUT:
						x.innerHTML="请求用户地理位置超时。"
						break;
					case error.UNKNOWN_ERROR:
						x.innerHTML="未知错误.";
						break;
						
				}
			}
						
		</script>

	</body>
</html>

猜你喜欢

转载自blog.csdn.net/lengyuezuixue/article/details/80211513