OpenLayers と WMS サービスを使用して、PhoneGap を使用して HTML/JS (TypeScript) でモバイル アプリを開発しています。アプリがオフラインで動作するように、特定の領域を事前にキャッシュする必要があります。
OpenLayers の CacheWrite コントロールと CacheRead コントロールのコードを使用して、独自のカスタム ハンドラーを実装しました。これにより、どのストレージを使用するか (localStorage ではなく SQLite) を制御し、クォータベースではなく循環キャッシュ サイズ制限を設け (x 個の最後のタイルをキャッシュに保持する)、ストレージに「コンテナー」を選択して、「通常のキャッシュ」と「プリロードされたキャッシュ」。アイデアは、ユーザーが事前キャッシュに固有の領域を選択できるようにすることです。
エリアを事前にキャッシュするために、「visible:false」を使用して WMS レイヤーを既存のマップに追加し、このレイヤーの「loadend」イベントに接続しようとしています。また、「OpenLayers.Strategy.Fixed」を使用して、その「プリロード」プロパティを true に設定しようとしました。
私の問題は、OpenLayers が (見えない) レイヤーをダウンロードしないことです。他のレイヤーでは問題なく動作します。
マップに「マップの切り替え」ボタンがあります (非表示のプリキャッシュ レイヤーとは関係ありません)。それを使用すると、「loadend」イベントがトリガーされます。「地図の切り替え」は基本的に、地図を表示している古い WMS レイヤーを削除し、新しい URL で新しいレイヤーを追加します (新しい WMS レイヤー)。
OpenLayers を使用してマップをプリロード (プリキャッシュ) するにはどうすればよいですか?