0

同様のGPSの問題をいくつか確認しました。しかし、あまり運がなかったようです。この方法でGPSをプルすると、古いデータ、つまり最後のGPSプルがどこから来たのかをプルしているように見えます。助言がありますか?

これは単純なJavaScriptGPSプルであり、要求されたときにフォームに入力されます。

 <script type="text/javascript"> 

function getLocationConstant()
{
    if(navigator.geolocation)
    {
        watchID = navigator.geolocation.watchPosition(onGeoSuccess,onGeoError); 
    } else {
        alert("Your browser or device doesn't support Geolocation");
    }
}

// Get a single location update
function getLocationConstant()
{
    if(navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(onGeoSuccess,onGeoError);
    } else {
        alert("Your browser or device doesn't support Geolocation");
    }
}

// If we have a successful location update
function onGeoSuccess(event)
{
    document.getElementById("Latitude").value =  event.coords.latitude; 
    document.getElementById("Longitude").value = event.coords.longitude;

}

// If something has gone wrong with the geolocation request
function onGeoError(event)
{
    alert("Error code " + event.code + ". " + event.message);
}
 </script>

 <div class=general align=center>
 <cfform action="gps_pull.cfm" method="post">
 <div align=center>
 <b>GPS Services Needs to be enabled on your device.</b>
 <br>
 <br>With a GPS Capable Device - Choose "Get Location". Once the GPS data is pulled in, choose "Add GPS".
 <br><span class=code8>You may need to allow GPS Device time to pull current location</span>
 </div>
 <br>
 <table align=center>
 <tr>
 <td>Latitude:</td>
 <td><cfinput type="text" id="Latitude" name="gpslat" value="" required="yes" message="Choose Get Location First"></td>
 </tr>
 <tr>
 <td>Longitude:</td>
 <td><cfinput type="text" id="Longitude" name="gpslong" value=""></td>
 </tr>
 <tr>
 <td colspan=2 align=center><br><input type="button" value="Get Location" onclick="getLocationConstant()"/> &nbsp; <input type="submit" value="Add GPS"></td>
 </tr>
 </table>
 <input type="hidden" name="src" value="gpsup">
 </cfform>
4

2 に答える 2

0

watchPosition はオプションを取ることができます:watchPosition(onGeoSuccess,onGeoError,options);デフォルト値は

options = { "enableHighAccuracy": false,
            "timeout"           : Infinity,
            "maximumAge"        : 0 }

でない限り、GPS デバイスが位置の小さな変化を記録しない可能性がありenableHighAccuracyますtrue。位置の変化に気付くと、onGeoSuccess再度呼び出されます。また、時計を再作成することで、強制的に位置を再検出することもできます (ただし、GPS が保持している位置は、enableHighAccuracy設定により変更されていない可能性があります)。

enableHighAccuracyオプションにも適用できgetCurrentPosition、同じように機能します。

于 2012-05-22T16:30:13.293 に答える
0

これは私もコードを書き留めているものです。まだ古いデータをプルします。通常、正しいデータを取得するには 3 回以上のプルが必要です。Android Samsung Galaxy S2 を使用 - GPS モードのみと GPS + Cell Triangulation で試しました。それでも、正しいデータを取得するには、通常 3 回以上プルする必要があります。

アイデアの人?

 <script type="text/javascript"> 

// Get a single location update
function getLocationConstant()
{
    if(navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(onGeoSuccess,onGeoError,{enableHighAccuracy:true,maximumAge:0});
    } else {
        alert("Your browser or device doesn't support Geolocation");
    }
}

// If we have a successful location update
function onGeoSuccess(event)
{
    document.getElementById("Latitude").value =  event.coords.latitude; 
    document.getElementById("Longitude").value = event.coords.longitude;

}

// If something has gone wrong with the geolocation request
function onGeoError(event)
{
    alert("Error code " + event.code + ". " + event.message);
}
 </script>
于 2012-05-24T15:56:49.757 に答える