我发现了很多关于GPS坐标的问题,但没有一个确认使用移动硬件GPS而不是像地理位置等网络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精度。
详细信息:
也许你在抱怨:
timeoutVal
:它是一个内部带有5000
号的Cookie。funcCallBack
:它是一个继续登录操作的函数。window.gpsLat
:它是一个全局变量,包含从Latitude
获得的geoLocation
值。window.gpsLng
:它是一个全局变量,包含从Longitude
获得的geoLocation
值。window.gpsAcc
:它是一个全局变量,包含从Accuracy
获得的geoLocation
值。我想要什么?
我想要一个JavaScript或PHP的解决方案,可以从移动硬件设备,本地GPS,而不是地理位置获取坐标,当原生GPS关闭时,请让用户打开它。
答案 0 :(得分:11)
你应该使用javascript而不是PHP获取位置。 PHP只能进行IP查找,这是确定位置的最不准确的方法。
navigator.geolocation.getCurrentPosition()
的工作方式是使用当前可用的最准确数据。对于移动设备,如果启用,它将首先使用GPS,然后使用Wi-Fi。
如果启用原生GPS,javascript将访问该数据而不是wi-fi数据,但如果GPS数据不可用,则无法阻止对Wi-Fi数据进行检查。
您最好的解决方案是检查准确性字段,如果它不在您要求用户启用GPS的范围内。
或者,如果您正在构建混合应用程序,大多数框架(PhoneGap .etc。)都有API来直接查询设备GPS。 Use PhoneGap to Check if GPS is enabled
答案 1 :(得分:4)
Geolocation API不会直接检查GPS是打开还是关闭,但是您可以捕获地理位置的错误,并且基于错误类型可以从那里得出结论。
E.g。 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();