从控制器中的导航器获取用户位置

Get user location from navigator in controller

本文关键字:获取 用户 位置 导航 控制器      更新时间:2023-09-26

我使用navigator.geolocation.getcurrentposition来获取当前用户的位置(纬度/长度)。下面是我的函数:

function userLocation(){
    var response = [];
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(p){
            // on success
            response['latitude'] = p.coords.latitude;
            response['longitude'] = p.coords.longitude;
            console.log(response);
        }, function(e){
            // on error
            console.log(e);
        });
    } else {
        console.log("Geolocation is not supported by this browser.");
    }
    return response;
}

它总是返回空数组,我理解getCurrentPosition函数使异步调用,所以不可能返回响应。

我尝试使用谷歌地理代码api来获取位置,但这是基于用户的IP地址,而不是那么准确。

我想要一个函数来返回这些lat/long。是否有任何方法我可以从getCurrentPosition在我的控制器函数的响应?

getLocation()函数放在window onload中,一个弹出窗口将询问是否允许您的位置,如果您允许您的纬度和经度将被捕获。

请使用下面的代码。

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else {
        console.log("Geolocation is not supported by this browser.");
    }
}
function showPosition(position) {
   console.log("Latitude: " + position.coords.latitude +
    "<br>Longitude: " + position.coords.longitude);
    $.ajax({
      url: 'abc.php',
      type: 'POST',
      data: 'latitude='+position.coords.latitude+'&longitude='+position.coords.longitude,
      success: function(data) {
        console.log(data);
      },
      error: function(e) {
        //called when there is an error
        //console.log(e.message);
      }
    });
}

请参考此链接获取更多信息http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation

如何处理结果:

function userLocation(cb) {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(p){
            // on success
            cb(null, p.coords);
        }, function(e){
            // on error
            cb(e, null);
        });
    } else {
        cb("Geolocation is not supported by this browser.", null);
    }
}

现在像这样调用函数:

userLocation(function(err, coords) {
    if (err) console.log(err);
    else {
        // do something with coords
    }
});

可以使用getCurrentPosition的第三个参数。请参考以下示例。

var response = [];
var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};
function success(pos) {
  response['latitude'] = pos.coords.latitude;
  response['longitude'] = pos.coords.longitude;
};
function error(err) {
  //
};
navigator.geolocation.getCurrentPosition(success, error, options);

你也可以参考下面的链接。

https://www.tutorialspoint.com/html5/geolocation_getcurrentposition.htm