HTML5 – 地理定位
HTML5 地理定位 API 允许你与自己喜爱的网站分享你的位置。JavaScript 可以捕获你的纬度和经度,并可以发送到后端服务器,做像查找当地商家或在地图上显示你的位置等有趣的位置感知功能。
如今,大多数浏览器和移动设备都支持地理定位 API。地理位置 API 与一个全局导航器对象的新属性,即地理位置对象(Geolocation object),一起运作。可通过以下代码创建地理位置对象 −
var geolocation = navigator.geolocation;
地理位置对象是一个服务对象,允许插件检索设备的地理位置信息。
地理定位方法
地理位置对象提供以下方法 −
序号 | 方法 & 描述 |
---|---|
1 | getCurrentPosition() 该方法检索用户当前的地理位置。 |
2 | watchPosition() 该方法会不断接收当前设备地理位置的周期性更新。 |
3 | clearWatch() 该方法可取消继续 watchPosition 调用。 |
示例
以下是使用上述任何方法的样本代码 −
function getLocation() {
var geolocation = navigator.geolocation;
geolocation.getCurrentPosition(showLocation, errorHandler);
}
这里,showLocation 和 errorHandler 是回调方法,将在下一节中被用来获取实际位置和处理任何错误。
地址属性
地理位置方法 getCurrentPosition() 和 getPositionUsingMethodName() 指定了检索位置信息的回调方法。这些方法通过一个存储完整位置信息的对象 Position 异步调用。
Position 对象指定了设备当前的地理位置。位置表示为一组地理坐标及有关方向和速度的信息。
下表描述了 Position 对象的属性。对于可选属性,如果系统无法提供值,则该属性的值设置为 null。
属性 | 类型 | 描述 |
---|---|---|
coords | 对象 | 指定设备的地理位置。位置由一组地理坐标和有关方向和速度的信息组成。 |
coords.latitude | 数字 | 指定以小数度表示的纬度估计。值范围为[-90.00,+90.00]。 |
coords.longitude | 数字 | 指定以小数度表示的经度估计。值范围为[-180.00,+180.00]。 |
coords.altitude | 数字 | [可选]指定相对于WGS 84椭球体的高度估计,以米为单位。 |
coords.accuracy | 数字 | [可选]指定经纬度估计的精度,以米为单位。 |
coords.altitudeAccuracy | 数字 | [可选]指定高度估计的精度,以米为单位。 |
coords.heading | 数字 | [可选]指定设备当前相对于真北的度数,顺时针计数为方向。 |
coords.speed | 数字 | [可选]指定设备当前地面速度,以米/秒为单位。 |
timestamp | 日期 | 指定获取位置信息并创建Position对象时的时间。 |
示例
以下是使用Position对象的示例代码。showLocation方法是一个回调方法。
function showLocation( position ) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
...
}
处理错误
地理定位很复杂,非常需要捕捉任何错误并优雅地处理它们。
geolocations方法getCurrentPosition()和watchPosition()使用错误处理程序回调方法,该方法返回PositionError对象。此对象具有以下两个属性:
属性 | 类型 | 描述 |
---|---|---|
code | 数字 | 包含错误的数字代码。 |
message | 字符串 | 包含错误的人类可读描述。 |
以下表格描述了PositionError对象中可能返回的可能错误代码。
Code | Constant | 描述 |
---|---|---|
0 | UNKNOWN_ERROR | 由于未知错误,该方法无法检索设备位置。 |
1 | PERMISSION_DENIED | 应用程序无权限使用位置服务,因此该方法无法检索设备的位置信息。 |
2 | POSITION_UNAVAILABLE | 无法确定设备的位置。 |
3 | TIMEOUT | 在指定的最大超时间隔内,该方法无法检索位置信息。 |
示例
以下是使用PositionError对象的示例代码。errorHandler方法是一个回调方法。
function errorHandler( err ) {
if (err.code == 1) {
// access is denied
}
...
}
位置选项
以下是getCurrentPosition()方法的实际语法 –
getCurrentPosition(callback, ErrorCallback, options)
这里的第三个参数是 PositionOptions 对象,该对象指定了用于检索设备地理位置的一组选项。
以下是可以指定为第三个参数的选项 −
属性 | 类型 | 说明 |
---|---|---|
enableHighAccuracy | 布尔 | 指定部件是否希望接收最准确的位置估计值。默认情况下为false。 |
timeout | 数字 | timeout属性是您的Web应用程序愿意等待位置的毫秒数。 |
maximumAge | 数字 | 指定缓存位置信息的到期时间(以毫秒为单位)。 |
例子
以下是一个示例代码,显示如何使用上述方法 −
function getLocation() {
var geolocation = navigator.geolocation;
geolocation.getCurrentPosition(showLocation, errorHandler, {maximumAge: 75000});
}