getCurrentPosition与watchPosition

watchPosition会监视你的移动,并在位置改变时向你报告位置。watchPPosition方法看上去确实与getCurrentPosition方法很像,不过行为稍有不同,每次位置比阿奴啊时会重复调用你的成功处理程序

watchPosition调用步骤:

  1. 你的应用watchPosition,传入一个成功处理函数
  2. watchPosition在后台不断监视你的位置
  3. 你的位置改变时,watchPostion调用成功处理函数来报告你的新位置
  4. watchPostion继续监视你的位置(并向成功处理程序报告),直至你调用clearWatch将它清除

HTML代码

我 们已HTML5COL学院中级课程相关章节的课程为基础,再向HTML增加几个按钮,从而能开始和结束跟踪你的位置;我们设置开始按钮是因为用户不想一直 被跟踪,他们通常希望对此有些控制;设置结束按钮,是考虑到对于移动设备来说,不停检查用户的位置是一个相当耗费电的操作,如果一直打开跟踪,会严重影响 电池寿命:

注: 实时跟踪用户可能非常耗电。一定要为用户提供信息,指出日前正在跟踪,另外还要提供相应的一些控件

<!DOCTYPE html>
<html>
<head>
<meta='keywords' content='HTML5COL学院,HTML5COL,CSS3,HTML5COL,编码社区'>
<script>
<!--script代码,见HTML5COL学院的应用课程:Geolocation API应用:计算两地距离--->
</script>
</head><body><form><input type="button" id="watch" value="Watch me"><input type="button" id="clearWatch" value="Clear watch"></form><p>position:</p><div id="location" ></div><div id="distance" ></div>
</body></html>

代码释义: 我们增加了一个表单元素,其中包括两个按钮,一个用来启动监视,id为'watch',另一个用来清除监视,id为'clearwatch';并且 我们用原来的

报告实时位置

为按钮添加程序

只 有在支持地理定位情况下我们才会在getMyLocation函数中增加按钮点击处理程序。另外,由于要用两个按钮控制所有地理位置定位跟踪,所以要从 getMyLocation删除现在的getCurrentPosition调用。下面删除这个代码,再增加两个处理程序:watchPostion对应 监视按钮,clearWatch对应清除按钮:

function getMyLocation() {if (navigator.geolocation) {var watchButton = document.getElementById("watch");watchButton.onclick = watchLocation;var clearWatchButton = document.getElementById("clearWatch");clearWatchButton.onclick = clearWatch;}else {alert("Oops, no geolocation support");}
}

代码释义: 如果浏览器支持地理定位,则我们会增加按钮点击处理程序;如果不支持地理定位,则增加这些处理程序毫无意义;上述代码中我们调用watchLocation来启动监视,调用clearWatch停止监视

编写watchLocation处理程序

目 前,我们要做的工作是:用户点击监视按钮时,他们希望开始跟踪他们的位置。所以我们将使用geolocation.watchPosition方法开始监 视他们的位置。geolocation.watchPosition方法有有两个参数程序:一个成功处理程序和一个错误处理程序,所以我们将使用原来已有 的两个处理程序。它还会返回一个watchId,可以在任何时刻使用这个id取消监视行为。我们把这个watchId放在一个全局变量中,为清除按钮编写 点击处理程序时会用到这个变量。一下是watchLocation函数和watchId的代码:

var watchId = null;
function watchLocation() {watchId = navigator.geolocation.watchPosition(displayLocation, displayError);
}

代码释义: 在文件最上面增加watchId作为一个全局变量。我们把它初始化为null,以后还需要把这个变量清除监视;调用watchLocation方法,传入前面编写的成功处理程序displayLocation和现有的错误处理程序displayError

编写watchLocation处理程序

现在来编写处理程序清除监视行为。为此需要得到watchId,并把它传递到geolocation.clearWatch方法

function clearWatch() {if (watchId) {navigator.geolocation.clearWatch(watchId);watchId = null;}
}

最后,对displayLocation做小的修改

还 需要做一个很小的修改,设计前面编写的Google Maps代码。在这代码中,我们调用了showMap来显示Google Map。showMap会在页面中创建一个地图,这件事你只希望做一次。不过,要记住,开始用watchPosition监视你的位置时,每次位置有更新 时都会调用displayLocation

要确保只调用一次showMap,首先查看这个地图是否存在,如果不存在,则调用showMap。否则,说明showMap已经调用过(而且已经创建了地图),所以不需要再调用这个函数了:

function displayLocation(position) {var latitude = position.coords.latitude;var longitude = position.coords.longitude;var div = document.getElementById("location");div.innerHTML = "You are at Latitude: " + latitude + ", Longitude: " + longitude;div.innerHTML += " (with " + position.coords.accuracy + " meters accuracy)";var km = computeDistance(position.coords, ourCoords);var distance = document.getElementById("distance");distance.innerHTML = "You are " + km + " km from the WickedlySmart HQ";if (map == null) {showMap(position.coords); //如果还没有调用showMap,则调用这个函数,否则不需要每次调用displayLocation时都调用showMap}
}

确保您使用的是移动设备

当您离开HTML5COL学院大门时,您一直在移动,所以为了监控您的行踪,一台设备是必须的;

综合代码展示;

基本HTML代码;

<!doctype html>
<html>
<head>
<title>Wherever you go, there you are</title>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
<meta charset="utf-8">
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script src="myLoc.js"></script>
<link rel="stylesheet" href="myLoc.css">
</head>
<body><form>
<input type="button" id="watch" value="Watch me">
<input type="button" id="clearWatch" value="Clear watch">
</form><div id="location">
Your location will go here.
</div><div id="distance">
Distance from HTML5COL OFFICE will go here.
</div><div id="map">
</div></body>
</html>

myLoc.js代码;

/* myLoc.js */var watchId = null;
var map = null;
var ourCoords =  {latitude: 47.624851,longitude: -122.52099
};window.onload = getMyLocation;function getMyLocation() {if (navigator.geolocation) {var watchButton = document.getElementById("watch");watchButton.onclick = watchLocation;var clearWatchButton = document.getElementById("clearWatch");clearWatchButton.onclick = clearWatch;}else {alert("Oops, no geolocation support");}
}function displayLocation(position) {var latitude = position.coords.latitude;var longitude = position.coords.longitude;var div = document.getElementById("location");div.innerHTML = "You are at Latitude: " + latitude + ", Longitude: " + longitude;div.innerHTML += " (with " + position.coords.accuracy + " meters accuracy)";var km = computeDistance(position.coords, ourCoords);var distance = document.getElementById("distance");distance.innerHTML = "You are " + km + " km from the WickedlySmart HQ";if (map == null) {showMap(position.coords);}
}// --------------------- Ready Bake ------------------
//
// Uses the Spherical Law of Cosines to find the distance
// between two lat/long points
//
function computeDistance(startCoords, destCoords) {var startLatRads = degreesToRadians(startCoords.latitude);var startLongRads = degreesToRadians(startCoords.longitude);var destLatRads = degreesToRadians(destCoords.latitude);var destLongRads = degreesToRadians(destCoords.longitude);var Radius = 6371; // radius of the Earth in kmvar distance = Math.acos(Math.sin(startLatRads) * Math.sin(destLatRads) + Math.cos(startLatRads) * Math.cos(destLatRads) *Math.cos(startLongRads - destLongRads)) * Radius;return distance;
}function degreesToRadians(degrees) {radians = (degrees * Math.PI)/180;return radians;
}// ------------------ End Ready Bake -----------------function showMap(coords) {var googleLatAndLong = new google.maps.LatLng(coords.latitude, coords.longitude);var mapOptions = {zoom: 10,center: googleLatAndLong,mapTypeId: google.maps.MapTypeId.ROADMAP};var mapDiv = document.getElementById("map");map = new google.maps.Map(mapDiv, mapOptions);// add the user markervar title = "Your Location";var content = "You are here: " + coords.latitude + ", " + coords.longitude;addMarker(map, googleLatAndLong, title, content);
}function addMarker(map, latlong, title, content) {var markerOptions = {position: latlong,map: map,title: title,clickable: true};var marker = new google.maps.Marker(markerOptions);var infoWindowOptions = {content: content,position: latlong};var infoWindow = new google.maps.InfoWindow(infoWindowOptions);google.maps.event.addListener(marker, 'click', function() {infoWindow.open(map);});
}function displayError(error) {var errorTypes = {0: "Unknown error",1: "Permission denied",2: "Position is not available",3: "Request timeout"};var errorMessage = errorTypes[error.code];if (error.code == 0 || error.code == 2) {errorMessage = errorMessage + " " + error.message;}var div = document.getElementById("location");div.innerHTML = errorMessage;
}//
// Code to watch the user's location
//
function watchLocation() {watchId = navigator.geolocation.watchPosition(displayLocation, displayError);
}function clearWatch() {if (watchId) {navigator.geolocation.clearWatch(watchId);watchId = null;}
}

测试地址: 在线测试

原文:http://www.html5col.com/watchposition_apply/

HTML5 Geolocation API : 实时跟踪应用相关推荐

  1. HTML5 Geolocation API

    HTML5 Geolocation API 封装在 navigator.geolocation 属性里,各种接口即是 navigator.geolocation 对象的方法. 1.getCurrent ...

  2. html 获取用户地理位置,HTML5 geolocation API获得用户当前地理位置

    html5 里面引入了geolocation的api可以帮助用户获得所在的地理位置,它不仅可以标示出当前的经纬度,还可以与google map api结合使用来在地图上标示出当前位置. html代码, ...

  3. html5获取城市,HTML5 geolocation API获得用户当前城市名

    HTML5 Demo: geolocation var geocoder = null; function addAddressToMap(response) { if (!response || r ...

  4. html浏览位置坐标,HTML5教程 | HTML5地理定位(GeoLocation API)

    HTML5 GeoLocation API(地理定位API)可以获取用户所在的地理位置.由于安全的原因,在使用HTML5 GeoLocation的时候,会弹出对话框让用户决定是否共享他们所在的位置,只 ...

  5. HTML5 地理位置定位(HTML5 Geolocation)原理及应用 (调用GPS)

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  6. HTML5 Geolocation用来定位用户的位置。

    HTML5 Geolocation用来定位用户的位置. 定位用户的位置 HTMl5 Geolocation API用来得到用户的地理位置. 由于这个可能和个人隐私相关.除非用户同意否则不能使用. 浏览 ...

  7. HTML5 Geolocation(地理定位)简介

    HTML5 Geolocation(地理定位)用于定位用户的位置. 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否 ...

  8. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)...

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是coo ...

  9. html5 地理api,HTML5地理定位-Geolocation API

    HTML5提供了一组Geolocation API,来自navigator定位对象的子对象,获取用户的地理位置信息 Geolocation API使用方法: 1.判断是否支持 navigator.ge ...

最新文章

  1. JaveWeb中实现分页的总结
  2. sqoop增量导入hdfs和导出
  3. 创建虚拟机以及安装Linux操作系统
  4. 为什么两个controller的session的id不一样_我,为什么会离婚?我为什么离婚?
  5. 字体海报设计灵感|这海报的字体够别致,脑洞够大!
  6. srsLTE源码学习:协议数据单元PDU:pdu.h
  7. uiautomator-CTS上运行,出xml报告
  8. 递归法:求n个元素的全排列
  9. 大中小型项目管理的区别
  10. 19.MongoDB值distinct性能验证
  11. python思维方法_小白3个月学会Python的路径和思维方式“大揭秘”!
  12. Web全栈工程师养成记
  13. LIS3DH 三轴加速度传感器使用流程及示例
  14. 【ROM制作工具】如何美化ROM、集成高级设置等特色功能到刷机包教程
  15. 页面中的黑白滤镜css3,filter属性
  16. R语言按照城市取样(一个城市有多行观测,想筛选一些城市)
  17. 分布式配置管理平台 Disconf
  18. JSON.parse 转换字符串样式的数组
  19. 今天第一次电面,国信证券金融工程
  20. java——重试机制

热门文章

  1. 暑期训练日志----2018.8.24
  2. 拦截导弹(信息学奥赛一本通-T1289)
  3. 5.1.7 INSERT新增数据
  4. python的print语句有哪些_Python语句print(type([1,2,3,4]))的输出结果是。
  5. jq fileupload 设置最大文件大小5m_如何在 Linux 服务器上设置 ulimit 和文件描述符数限制 | Linux 中国...
  6. python idle打不开_孩子,给你的Python安个家吧!
  7. Python:pyinstaller报错【A RecursionError maximum recursion depth exceeded occurred】
  8. torch.cuda.FloatTensor 与 torch.FloatTensor(torch.Tensor)--CPU和GPU上的数据类型
  9. nn.dropout()的用法,随机失活
  10. 解决:vue项目的页面刷新之 title被重置问题