watchPosition()与getCurrentPosition()和setTimeout的区别
watchPosition()与getCurrentPosition()和setTimeout的区别
我需要确定一个人在50米范围内的位置。我想知道是应该使用navigator.location.watchPostion()
还是多次调用getCurrentPostion()
。虽然watchPostion()
是实现我想要的功能的正确的W3C API,但实际上,它似乎有些过度。
这是我的代码:
var map = null; var marker = null; var layer = null; function locFn(pos) { var lat = pos.coords.latitude; var lon = pos.coords.longitude; $("#hlat").val(lat); $("#hlong").val(lon); document.getElementById("lnkMap").href = "http://maps.google.com/maps?q=My+Loc@" + lat + "," + lon + "&z=18&t=h"; var point = new GLatLng(lat, lon); if (pos.coords.accuracy < 100) { map.setCenter(point, 18); if (marker != null) { marker.setLatLng(point); } else { var ico = new GIcon(); ico.image = "img/Blue-Dot.png"; ico.iconSize = new GSize(22, 22); ico.iconAnchor = new GPoint(11, 11); marker = new GMarker(point, { icon: ico }); layer = map.addOverlay(marker, { title: "You are here." }); } } else if (pos.coords.accuracy > 2000) { if (marker != null) { marker.setLatLng(point); } map.setCenter(point, 15); } else if (pos.coords.accuracy > 900) { if (marker != null) { marker.setLatLng(point); } map.setCenter(point, 16); } else if (pos.coords.accuracy > 100) { if (marker != null) { marker.setLatLng(point); } map.setCenter(point, 17); } } function locFail() { //alert("Failed to retrieve location."); } var watchID = null; function processPoints() { map = new GMap2(document.getElementById("map_canvas"), { mapTypes: [G_HYBRID_MAP] }); try { watchID = navigator.geolocation.watchPosition(locFn, locFail, { enableHighAccuracy: true }); } catch(err) { /* desktop?*/ } } $(function(){processPoints();});
我注意到watchPostion()
似乎最终结果更精确(一段时间后),但我想知道位置是否变化得太快,导致大量的内容被下载到我的地图画布上,不断的HTTP请求很快就会过时,被新的请求取代。当我使用watchPosition()
时,页面加载需要一段时间。