watchPosition()与getCurrentPosition()和setTimeout的区别

6 浏览
0 Comments

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()时,页面加载需要一段时间。

0