Javascript 从硬件GPS获取坐标

Javascript 从硬件GPS获取坐标,javascript,php,android,geolocation,gps,Javascript,Php,Android,Geolocation,Gps,我发现了很多关于GPS坐标的问题,但没有一个能证实使用移动硬件GPS而不是像地理定位这样的网络GPS 我的实际方法: 我使用的是navigator.geolocation.getCurrentPosition(),Lat/Long来自Web,下面是代码: 函数getGPS(函数回调) { if(导航器.地理位置) { var timeoutVal=getCookie(“GPSTimeout”); navigator.geolocation.getCurrentPosition(成功 ,错误 ,{

我发现了很多关于GPS坐标的问题,但没有一个能证实使用移动硬件GPS而不是像地理定位这样的网络GPS

我的实际方法:

我使用的是
navigator.geolocation.getCurrentPosition()
Lat/Long
来自Web,下面是代码:

函数getGPS(函数回调) { if(导航器.地理位置) { var timeoutVal=getCookie(“GPSTimeout”); navigator.geolocation.getCurrentPosition(成功 ,错误 ,{enableHighAccurance:正确 ,timeout:timeoutVal ,最大值:0} ); } 否则{ 警报('GPS已关闭,或无法找到它。现在,在不进行本地化的情况下登录'); window.gpsLat=0; window.gpsLng=0; window.gpsAcc=0; funcCallBack(); } 函数成功(位置)//成功 { window.gpsLat=position.coords.lation; window.gpsLng=position.coords.longitude; window.gpsAcc=position.coords.accurity; funcCallBack(); } 函数错误()//错误 { window.gpsLat=0; window.gpsLng=0; window.gpsAcc=0; funcCallBack(); } } 我的问题:

有时当我登录时,我没有得到GPS坐标(它们为0),有时我得到的坐标精度超过2000(这是不精确的)

顺便说一句,我正在数据互联网服务上测试GPS,当我使用Wi-Fi连接时,它的准确度不到100

详细信息:

也许你在抱怨:

  • timeoutVal
    :它是一个cookie,里面有数字
    5000
  • funcCallBack
    :它是一个继续登录操作的函数
  • window.gpsLat
    :它是一个全局变量,包含从
    地理位置
    获取的
    纬度
  • window.gpsLng
    :它是一个全局变量,包含从
    地理位置
    获取的
    经度
  • window.gpsAcc
    :它是一个全局变量,包含从
    地理定位
    获取的
    精度
  • 我想要什么?


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

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

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

    如果启用本机GPS,javascript将访问该数据而不是wi-fi数据,但如果GPS数据不可用,则无法阻止对wi-fi数据进行检查

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


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

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

    例如,如果网络关闭或无法联系定位卫星,则位置_不可用(2)。 但它不确定短的方式,你必须处理一些条件

    我建议使用watchposition{我同意它的意思是监视和连续定位位置}你可以保持它,如果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(); 
    

    您确定
    navigator.geolocation.getCurrentPosition()
    使用了当前可用的最精确的数据吗?还有,你知道本地gps的平均
    精度吗?还有,我在浏览器方面也遇到了一些问题,比如当我使用firefox浏览器时,我可以从数据互联网服务获取gps坐标,而当使用opera或任何其他浏览器时,我只能获取0个坐标,你知道这是什么吗?它确实提供了最精确的坐标(如有,请选择本机GPS),但我不能告诉你平均值,我相信这取决于设备和条件。你真的不在乎数据来自何处,只要它在一个准确度阈值内。此外,你现在可以在android设备上运行JS,使用最新版本的chrome,这将能够给你一些测试数据。有用的信息+1关于
    geoLocation
    和关于
    PhoneGap
    的提示,也许我可以建议我的老板开始使用它,但目前他只想要一个任何人都可以通过在浏览器中键入URL轻松访问的网页,而不需要下载任何东西或在
    手机上安装任何东西当GPS“预热”到您特定位置上方的卫星阵列时,会出现斑点。您还可以检查watchPosition()上返回的频率检测gps/wifi:wifi不经常更新,但gps有点嘈杂。正如eddiec在其回答的最后几行中所建议的,如果你正在构建一个移动应用程序,你肯定应该使用PhoneGap这样的框架,它在大多数情况下提供对本机gps实现的完全或半完全访问。使用内置浏览器解决方案是一个很好的选择顺便说一句:不要混淆——PhoneGap API对于Geolocation对象具有相同的函数名