2017-09-20 7 views
1

私はユーザーの幾分正確なGPS位置を必要とするアプリケーションを構築しています。今私が使用している:しかし、アプリを実行している場合PhoneGap GPS Geolocationの精度を最小限に抑えるにはどうすればよいですか?

navigator.geolocation.getCurrentPosition(geolocationSuccess,geolocationError, 
    { maximumAge: 60000, timeout:8000 , enableHighAccuracy: true }); 

を、私は時々29000以上の値でposition.coords.accuracyを取得しています。これは受け入れられません。どのようにしてより低い(より正確な)GPS位置を強制することができますか?

これは、iOSとAndroidの両方で発生しています。私は

<gap:plugin name="cordova-plugin-geolocation" source="npm" /> 

答えて

2

最高accurancyを使用してい

注意を達成することができます:

  • maximumAgeが設定されています。
  • timeoutは、アプリの使い方によって異なります(主に車で使用される「ナビアプリ」ですか、主に徒歩で使用される「ジョガーアプリ」ですか)。基本ルール:timeoutを高く設定すると、hardware-gps-chipに正確な座標を要求する時間が長くなるほど設定されます。
  • もちろん、enableHighAccuracytrueに設定する必要があります。

私は(少し)より詳細に上記の点を説明しましょう。

maximumAge0(ゼロ)に設定すると、最も正確な座標にも一定の年齢があるため、「ライブ」-gps座標(キャッシュされていません)を返すことはありません。それは実際にあなたのアプリの要件に依存します。それはtimeoutに私をもたらします。

私が使用した最新のデバイスのほとんどが0.5〜3秒の間に座標を取得できるので、タイムアウトを5秒に設定します。あなたのアプリをどのくらい素早く動かすか(車、徒歩)を教えてくれます。アプリの移動が速くなればなるほど、timeoutが設定されていなければ、アプリはあまりにも不正確な座標を取得する可能性があります。一方、timeout0に設定してはいけません。これは今すぐリクエストがキャンセルされるたびに「ライブ」-gps座標が返されることがないためです。確かGPS-ハードウェアことを確認するために、垂直/

  • 水平精度
  • :あなたはまた、独自のプラグインを作るかをより詳細に制御を持っているインスタンスのgithubの上でプロジェクトをフォークすることができます


    チップは常に使用されます(常にAndroidのLocationManager.GPS_PROVIDERを初期化します)。 enableHighAccuracytrueに設定しても、gps-hardware-chipが実際に使用されているという保証はなく、このプラグインに(可能であれば)gps衛星を使用するよう「願う」だけであり、次の段落に私を連れて来る。

  • ....という

注:最も正確な理由は悪い環境条件のcoordiantes(ストリートキャニオン、強い曇りなど)を要求することができるとは限りません。あなたのアプリはいつでもどこでも座標を取得する必要がありますか?それから、正確さの必要性を緩和する必要があります。

最後に、リクエストが成功した後、特定のしきい値を超えてはいけない座標の精度属性を確認することができます(アプリ要件に応じて)。この例:

var threshold = "APP-ACCURANCY-REQUIREMENT-NUMBER-HERE"; 

function requestLocation(callback) { 
    navigator.geolocation.getCurrentPosition(
    function (position) { 
     console.log(position); 
     // Does this position fulfill the ACCURANCY-REQUIREMENT of your app? IF SO THEN STOP REQUESTING OTHERWISE REQUEST AGAIN 
     if (position.coords.accuracy < threshold) callback(position); 
     else requestLocation(callback); 
    }, 
    function (err) { 
     console.log(err); 
    }, 
    { 
     maximumAge: 60000,// IS A 1-MINUTE-COORDINATE TOO OLD WHILE DRIVING BY CAR? 130KM/hour -> 36 M/sec 
     timeout: 8000 ,// IS A WAITING-TIME OF 8 SECONDS TOO LONG WHILE DRIVING BY CAR? 
     enableHighAccuracy: true // YES, THIS ATTRIBUTE MUST BE SET TO TRUE 
    } 
); 
} 

requestLocation(function (position) { 
    // position that has got an accuracy less than ACCURANCY-REQUIREMENT 
    console.log('request accurate position', position); 
}); 

・ホープ、この「物語」は、あなたと幸運に役立ちます!

+0

ありがとう、非常に興味深い。私はWi-FiとGPSを無効にしようとしたので、モバイルデータ(4G +)を使用すると思ったが、100秒でも失敗する。これについて何か知っていますか? – Destal

+0

あなたは大歓迎です。その瞬間に携帯電話に「位置情報源」がないように聞こえる。私の知る限り、GPS-Symbol(ヘッダの設定バーにあるSymbol)はシステム全体のローカリゼーションを表しているため、非アクティブ化されているときにはアプリはその位置を要求できません。私のテスト - アンドロイドフォンで – Blauharley

+0

(ロリポップ)無線LANを無効にし、私はあなたの携帯電話との同じを推測するように、ローカリゼーションの観点で活性化モバイル・データを保持するオプションはありません。どちらの場合でも、電話機は、到達時間(信号伝播時間、gps)または受信信号強度(それぞれWi-Fiおよびモバイルデータ)のいずれかの信号メトリックを使用してローカライズすることしかできません。お役に立てれば。 – Blauharley

関連する問題