【问题标题】:Get coordinates from Hardware GPS从硬件 GPS 获取坐标
【发布时间】:2013-12-06 11:01:31
【问题描述】:

我发现了很多关于 GPS 坐标的问题,但没有一个确认使用移动硬件 GPS 而不是像 geoLocation 之类的 Web GPS。

我的实际方法:

我用的是navigator.geolocation.getCurrentPosition()Lat/Long来自网络,代码如下:

function getGPS(funcCallBack)
{
   if (navigator.geolocation)
   {
     var timeoutVal = getCookie("GPSTimeout");
     navigator.geolocation.getCurrentPosition(sucess
                                             ,error
                                             ,{enableHighAccuracy: true
                                              ,timeout: timeoutVal
                                              ,maximumAge: 0}
                                             );
   }
   else{
   alert('GPS is turned off, or was not possible to find it. Now, doing the login without localization.');
   window.gpsLat = 0;
   window.gpsLng = 0;
   window.gpsAcc = 0;
   funcCallBack();
   }
   function sucess(position) //sucess
   {
      window.gpsLat = position.coords.latitude;
      window.gpsLng = position.coords.longitude;
      window.gpsAcc = position.coords.accuracy;
      funcCallBack();
    }
    function error()         //error
    {
      window.gpsLat   = 0;
      window.gpsLng   = 0;
      window.gpsAcc   = 0;
      funcCallBack();
    }
}

我的问题:

有时我在登录时没有得到 GPS 坐标(它们为 0),有时我得到的坐标精度超过 2,000(不精确)。

顺便说一句,我正在数据互联网服务上测试 GPS,当我使用 Wi-Fi 连接时,它以低于 100 的准确度完美运行。

详情:

也许你在抱怨:

  1. timeoutVal:这是一个cookie,里面有数字5000
  2. funcCallBack:是一个继续登录操作的函数。
  3. window.gpsLat:它是一个全局变量,包含从 geoLocation 获得的 Latitude 值。
  4. window.gpsLng:它是一个全局变量,包含从 geoLocation 获得的 Longitude 值。
  5. window.gpsAcc:它是一个全局变量,包含从geoLocation 获得的Accuracy 值。

我想要什么?

我想要一个 JavaScript 或 PHP 解决方案,可以从移动硬件设备获取坐标,即 Native GPS,而不是地理位置,当 Native GPS 关闭时,要求用户打开它。

【问题讨论】:

  • 有时,当 GPS 对您特定位置上方的卫星阵列“预热”时,前几个读数会参差不齐。您还可以检查 watchPosition() 上的返回频率以检测 gps/wifi:wifi 不会经常更新,但 gps 有点嘈杂。
  • 正如 eddiec 在他回答的最后几行中所建议的那样,如果您正在构建一个移动应用程序,您应该绝对使用像 PhoneGap 这样的框架,它在大多数情况下都提供完整的或半完全访问本地 GPS 实现。使用内置浏览器解决方案是一个弱点子。顺便说一句:不要混淆——PhoneGap API 具有与 Geolocation 对象相同的函数名称,例如浏览器中的 Geolocation (HTML5),但在其背后支持更充分的原生 GPS 实现。

标签: javascript php android geolocation gps


【解决方案1】:

您应该使用 javascript 而不是 PHP 来获取位置。 PHP 只能进行 IP 查找,这是确定位置的最不准确的方法。

navigator.geolocation.getCurrentPosition() 的工作方式是使用当前可用的最准确的数据。对于移动设备,如果启用,它将首先使用 GPS,然后是 wi-fi。

如果启用了原生 GPS,javascript 将访问该数据而不是 wi-fi 数据,但如果 GPS 数据不可用,则无法阻止对 wi-fi 数据的检查。

您最好的解决方案是检查准确度字段,如果它不在您满意的范围内,请让用户启用 GPS。

或者,如果您正在构建一个混合应用程序,大多数框架(PhoneGap 等)都具有直接查询设备 GPS 的 API。 Use PhoneGap to Check if GPS is enabled

【讨论】:

  • 您确定navigator.geolocation.getCurrentPosition() 使用的是当前可用的最准确的数据吗?还有,你知道原生gps的平均Accuracy吗?
  • 而且,我也遇到了一些浏览器问题,比如当我使用 firefox 浏览器时,我可以从数据互联网服务获取 GPS 坐标,而当使用 opera 或任何其他浏览器时,我只能获取 0 坐标,这样做你知道那是什么吗?
  • 它确实给出了最准确的(如果有的话,那么原生 GPS),但我不能告诉你平均值,我确定这取决于设备和条件。实际上,只要数据在准确度阈值内,您就不会关心数据的来源。
  • 另外,你现在可以在安卓设备上运行 JS,使用最新版本的 chrome,这将能够为你提供一些测试数据。
  • +1 获取有关geoLocation 的有用信息和有关PhoneGap 的提示,也许我可以建议我的老板开始使用它,但目前他只想要一个任何人都可以使用的网页只需在浏览器中输入 URL 即可轻松访问,无需下载任何内容或将任何内容安装到 Phone
【解决方案2】:

Geolocation API 没有提供直接的方法来检查 GPS 是否打开,但您可以捕获地理定位的错误,并根据错误类型从中得出结论。

例如POSITION_UNAVAILABLE (2) 如果网络中断或无法联系到定位卫星。 但它不确定你必须处理一些条件的捷径!

我会建议使用 watchPostion {我同意它的意思是观看并连续定位位置}你可以保持它打开,如果 GPS 抛出错误你可以提示自定义警报让用户打开 GPS 设备/wifi/互联网。 . 如果成功回调,您可以清除手表。

 var watch =null;
 function success(position)
{
   var lat = position.coords.latitude;
   var lon= position.coords.longitude;
   if (watch != null ) 
 /*Need to take care .. as maybe there is no gps and user 
  want it off so keep attempt 3 times or some kind a way out otherwise it will 
  infinite loop */
    {
        navigator.geolocation.clearWatch(watch);
        watch = null;
    }

}
function getLatLon()
{
    var geolocOK = ("geolocation" in navigator);
    if ( geolocOK ) 
    {
        var option = {enableHighAccuracy:true, maximumAge: 0,timeout:10000 };
        watch =  navigator.geolocation.watchPosition(success, fails,  option);
    }
    else {
        //disable the current location?  
    }
}
function fails()
{
    alert("please turn on the GPS !");
}
getLatLon(); 

【讨论】:

  • +1 作为答案,这是一个很好的答案,但我不想看职​​位,我只想得到一次将它发送到我的服务器并保存在数据库中以了解用户登录时所在的位置。同样,就我使用数据互联网服务(这里的服务很差)而言,我需要尽可能少地使用互联网来做到这一点。
  • 我能想到的唯一解决方案 :-) 在第一次命中时执行上述 js 并将纬度/经度保持在服务器或 cookie 端,而不是将其关闭/不包含在下一次命中此地理位置 js 中。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多