移动设备的地理位置

Posted

技术标签:

【中文标题】移动设备的地理位置【英文标题】:Geolocation for mobile devices 【发布时间】:2015-12-23 12:39:07 【问题描述】:

我在我的网站上的 idevices 上遇到地理定位问题。

其实我只需要获取纬度/经度坐标。 在 PC 上,android 设备上一切都很酷,在 iphone 上也很好,但前提是我使用 wifi 连接。但是当我使用旧 iPhone 5s 使用 3g 或 LTE 时,我什么也得不到(但从 iphone 6 开始它可以工作)。

我了解到,如果 wifi 关闭,Safari 将不支持地理定位。 但我仍然需要让它在 iPhone 4,5 等 iDevices 上运行。 我正在使用这段示例代码:

<script>
    var x = document.getElementById("demo");
        function getLocation() 
        if (navigator.geolocation) 
            navigator.geolocation.getCurrentPosition(showPosition);
         else 
        x.innerhtml = "Geolocation is not supported by this browser.";
        
    
    function showPosition(position) 
        x.innerHTML = "Latitude: " + position.coords.latitude + 
        "<br>Longitude: " + position.coords.longitude; 
    
</script>

【问题讨论】:

好吧,我自己找到了解决方案,但它可能对其他人有用,因为我见过很多类似的线程。要强制在具有无线连接的设备(在我的情况下是 iPhone)上进行地理定位工作,您必须打开浏览器 (Safari) 的定位服务。据我了解,新型号默认启用此选项。所以当我这样做时,它对我来说就像一种魅力, 【参考方案1】:

我是 iPhone 5S 的拥有者,我尝试过通过 3G 进行地理定位,它就像一个魅力。我已经通过 Wifi 和 3G 尝试了这个CodePen,没有任何问题。

$(document).ready(function()
    setInterval(function() 
        getLocation(function(position) 
            //do something cool with position
            currentLat = position.coords.latitude;
            currentLng = position.coords.longitude;

            $("#status").html(currentLat + " " + currentLng);
        );
    , 1000);
);

var GPSTimeout = 10; //init global var NOTE: I noticed that 10 gives me the quickest result but play around with this number to your own liking

//function to be called where you want the location with the callback(position)
function getLocation(callback) 
  if (navigator.geolocation) 
    var clickedTime = (new Date()).getTime(); //get the current time
    GPSTimeout = 10; //reset the timeout just in case you call it more then once
    ensurePosition(callback, clickedTime); //call recursive function to get position
  
  return true;


//recursive position function
function ensurePosition(callback, timestamp) 
  if (GPSTimeout < 6000) 
    //call the geolocation function
    navigator.geolocation.getCurrentPosition(
      function(position) //on success
      
        //if the timestamp that is returned minus the time that was set when called is greater then 0 the position is up to date
        if (position.timestamp - timestamp >= 0) 
          GPSTimeout = 10; //reset timeout just in case
          callback(position); //call the callback function you created
         else //the gps that was returned is not current and needs to be refreshed
        
          GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
          ensurePosition(callback, timestamp); //call itself to refresh
        
      ,
      function() //error: gps failed so we will try again
      
        GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
        ensurePosition(callback, timestamp); //call itself to try again
      , 
        maximumAge: 0,
        timeout: GPSTimeout
      
    )
  

感谢 Chris Beckett 提供示例。

如果你还不能让它工作,也许你可以提供更多细节?

Ps:只是编辑以确保需要地理定位的每个人都检查是否启用了 Safari 的定位服务:

首先检查是否在以下位置启用了定位服务:设置 > 隐私 > 定位服务 接下来检查是否为 Safari 网站启用

【讨论】:

不幸的是它对我不起作用。我的错,我提到我有 iPhone 5s,但我只有一个普通的 iPhone 5,它不能用它。 你好 Roman,我已经请了一些使用旧型号的朋友进行测试。他们有 4、4S 和 5。在 4(ios 7.1.2)中没有可用的 wifi 连接无法工作,而在 4S(iOS 8.4.1)中工作。我正在等待更多反馈来更新您。您的 iPhone 目前是否已更新至最新的 iOS?我的是。 这很奇怪,我在 iPhone 4 和 5 上测试过,但都失败了。在您发表评论后,我已经让我的 4s 同事尝试了它,但它也失败了。哦,等等,这取决于你什么时候尝试过。我有一个针对 iDevices 的修复程序,当它看到 iPhone 时,它​​会通过 IP 搜索位置,但我们不得不取消它,因为它绝对不精确。 我不明白你所说的这个修复是什么意思。请你澄清一下好吗?另外,您的解决方案是否在我可以访问的链接上运行,以便我可以尝试一下?问候。 我为 iDevices 使用了 ipinfo.io 服务

以上是关于移动设备的地理位置的主要内容,如果未能解决你的问题,请参考以下文章

如果设备没有移动并且移动了 300m 的距离,则停止位置更新,然后获取它的位置

移动设备的地理位置

移动设备:获取位置

在移动设备上滚动时保持标题位置固定

离子混合移动应用程序获取设备位置

来自移动设备的 PHP 地理定位,无需重定向