0

私の問題: 正確な結果を得るには、モバイルブラウザ(iPhoneでテスト)から2ページの読み込みが必要です。最初の負荷は0.5マイル以上離れ、2番目の負荷は非常に近くなります。

私の質問: 最初のロードで正確な位置を取得するには何をする必要がありますか?

追加情報:

http://www.w3.org/TR/geolocation-API/を読み、enableHighAccuracyでwatchPositionを利用しています。また、maximumAge:0を使用していて、タイムアウトが設定されていません。

http://www.w3.org/TR/geolocation-API/から

maximumAgeが0に設定されている場合、実装はすぐに新しい位置オブジェクトの取得を試みる必要があります

タイムアウト属性に使用されるデフォルト値はInfinityです。

私のコードは以下のとおりです

// Try HTML5 geolocation
    if(navigator.geolocation) {

    // updated this with watchPosition rather than getCurrentPosition
      navigator.geolocation.getCurrentPosition(function(position) {
        var pos = new google.maps.LatLng(position.coords.latitude,
                                         position.coords.longitude);

        var infowindow = new google.maps.InfoWindow({
          map: map,
          position: pos,
          content: 'Location found using HTML5.'
        });

        map.setCenter(pos);
      }, function() {
        handleNoGeolocation(true);
      },
    // enable high accuracy
    //  {maximumAge:100, timeout:5000, enableHighAccuracy: true}
            // 
                {maximumAge:0, enableHighAccuracy: true}
      );
    } else {
      // Browser doesn't support Geolocation
      handleNoGeolocation(false);
    }
  }

  function handleNoGeolocation(errorFlag) {
    if (errorFlag) {
      var content = 'Error: The Geolocation service failed.';
    } else {
      var content = 'Error: Your browser doesn\'t support geolocation.';
    }
4

2 に答える 2

2

可能な限り正確な地理位置情報を取得するための解決策があります。特定のタイムアウト後に clearWatch() を呼び出す必要があります。タイムアウトは、おそらく時間やフォームのクリックなどのイベントです。

私のアプリケーションでは、5 秒のタイムアウトとフォーム要素のクリックを使用しています。

ここにすべての便利なコード スニペットがあります。

オンクリックを設定する

<select onclick="aFormClick()" id="location"

watchPosition 関数の親関数にタイムアウトを設定する

setTimeout("stopWatchPosition()",5000);

フォームのクリックをリッスンする関数を作成する

function aFormClick(){
stopWatchPosition();
}

clearnWatch() を呼び出す関数を作成する

function stopWatchPosition(){
if (clearWatchCalled == 0){
    navigator.geolocation.clearWatch(watchID);
    clearWatchCalled++;
}
}

ID で watchPosition を参照できることを確認してください

watchID = navigator.geolocation.watchPosition(function(position) {
于 2012-08-05T22:50:18.810 に答える
0

最初のページの読み込み時に、GPS ラジオの電源が入っていない可能性があります。無線をオンにする時間を与えるには、場所を読み取って GPS を開始し、その最初の場所の結果を破棄し、GPS ラジオがウォームアップするまで数秒待って、適切な場所の修正を取得するのに十分な衛星を見つけることができます。 、次に時間指定された非同期コールバック関数で場所を再度読み取ります。

于 2012-06-20T21:05:04.980 に答える