Javascript:返回嵌套函数(异步)

时间:2014-05-06 22:10:36

标签: javascript jquery function nested

我想通过调用get.Location从函数getDistanceFromLatLonInKm的返回访问(或打印)d。我想我可能会使用回调但它没有工作(和/或我是n00b)。在这种情况下可以这样做吗?例如:document.write(getLocation(45.123,12.123)) //would print d somehow .

提前谢谢。

getLocation(45.123,12.123);

function getLocation(a,b) {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(p){ajmo(p,a,b);});
  }
}

function ajmo(position,a,b) {
  lat = position.coords.latitude;
  lng = position.coords.longitude;
  getDistanceFromLatLonInKm(a,b,lat, lng);
}


function getDistanceFromLatLonInKm(lat_origin, lon_origin, lat_pos, lon_pos) {
  var R = 6371;
  var dLat = deg2rad(lat_pos - lat_origin);
  var dLon = deg2rad(lon_pos - lon_origin);
  var a = 
    Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(deg2rad(lat_origin)) * Math.cos(deg2rad(lat_pos)) * 
    Math.sin(dLon / 2) * Math.sin(dLon / 2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}     

1 个答案:

答案 0 :(得分:1)

假设你有一个id ="距离"的HTML元素,你可能需要这个:

function getLocation(a, b, element) {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {
      lat = position.coords.latitude;
      lng = position.coords.longitude;
      var d = getDistanceFromLatLonInKm(a,b,lat, lng);
      document.getElementById(element).innerHTML = d;
    });
  }
}


function getDistanceFromLatLonInKm(lat_origin, lon_origin, lat_pos, lon_pos) {
  var R = 6371;
  var dLat = deg2rad(lat_pos - lat_origin);
  var dLon = deg2rad(lon_pos - lon_origin);
  var a = 
    Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(deg2rad(lat_origin)) * Math.cos(deg2rad(lat_pos)) * 
    Math.sin(dLon / 2) * Math.sin(dLon / 2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}  


getLocation(45.123, 12.123, 'distance');