リーフレット:オプション「watch」が「true」に設定されている場合、後続のmap.locate()がタイムアウトします

ベルゼブブ

リーフレットのmap.locate()が最初に「locationfound」イベントを正しく発生させるという問題を解決するのに苦労していますが、その後の各呼び出しは、何をしてもタイムアウト/フリーズします。

「watch」がfalseに設定されている場合、「map.locate(options)」の呼び出しは正しく機能します。

再現する手順:

  • 上記のリンクを開き、
  • ジオロケートボタンを1回クリックして、しばらく待ちます。
  • 地図は地理的に配置された場所にズームします、
  • 地図をパンし、
  • geolocatebtnをもう一度クリックします。
  • 失敗するのを見る(コンソールで)

これを解決する方法はありますか?

function geolocateMe() {

      if (!registered) {
        map.on("locationfound", cb);
        map.on("locationerror", eb);
        registered = true;
      }

      map.locate({
        watch: true,
        setView: true
      });
    }

ここでプランカーを見てくださいリーフレットは問題を見つけます

ベルゼブブ

わかりました。ここでgeolocationAPIを正しく読み取る必要があります。GeolocationAPI-watchPosition()

タイムアウトとmaximumAgeが重要であるため。基本的に、それは私が好きではないことです。timeoutとmaximumAgeを指定すると、場所がタイムアウト値内で更新されない場合、「locationerror」がタイムアウトエラーとともにスローされます。誤解を招くと思いますが、理解しやすい「no-update-within」イベントがあるはずです。

基本的に、タイムアウトを指定しない場合、位置の各要求はキャッシュされた位置を調べます。これが最後の更新以降のmaximumAgeよりも古い場合、デバイスからの新しい位置の取得がすぐにトリガーされます。

var geo_options = {
  enableHighAccuracy: true,
  maximumAge: 60000
    //timeout           : 1000
};

基本的なジオロケーションAPIを使用する別のプランカーで遊んでください->ここにリンクの説明を入力してください

それがお役に立てば幸いです。すべてのタイムアウトメッセージが表示され、場所が表示されない理由がわかりませんでした。今、私はそれを理解しています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ