Skip to the content.

オフライン動作記録

English version

状態

これは、v1.3.3開発時に導入したオフライン地図対応と、現行v1.3.4リリース候補を区別するために 更新した履歴上の実装記録です。最終Releaseの受入記録ではありません。現行の検証には release_checklist.mdとtesting.mdを使用します。

概要

本ドキュメントは、EnvGeo-Seawaterにおける Plotlyインタラクティブ地図の オフライン/低速ネットワーク対応に関する設計判断と実装詳細を記録します。元の実装メモは v1.3.3用ですが、ここで説明するmap modeとローカル海岸線への縮退はv1.3.4にも残っています。


背景

EnvGeo Seawater は、インタラクティブな 2-D / 3-D 地図に Plotly Mapbox を 使用しています。デフォルトでは Plotly Mapbox は描画時にサードパーティ CDN サーバーからタイル画像を取得します。そのサーバーに接続できない環境(例: 学術ネットワーク外のエアギャップ環境・船上など)では地図背景が白くなり、 ユーザーが地理的文脈を失います。

ローカル海岸線オーバーレイ(Natural Earth 50 m 解像度、CSV としてバンドル)は、 ネットワーク状態によらず海岸線が常に表示されることを保証するために導入されました。


Map mode 別タイル供給元

Map mode タイル供給元 ネットワーク必要
Coastline (offline) なし(白背景) 不要
Standard OpenStreetMap タイル 必要
Satellite USGS National Map 必要
Bathymetry (Sea) Esri World Ocean Base 必要
Contour (GSI) 国土地理院(GSI) 必要

Release時の確認事項: これらのmodeにはプロジェクトのAPIキーを設定していません。 上流の利用条件、可用性、推奨帰属表示は変わり得るため、タグ付きRelease時に再確認します。 CARTOベースマップは設定していません。


海岸線オーバーレイ — 常時表示

スプリント #48(2026-09)以降、apply_map_style() は返却前に すべての map mode に対して add_coastline_overlay() を呼び出します。 これにより:

オーバーレイは冪等(idempotent)です。_coastline_overlay トレースがすでに 存在する場合、2 回目以降の add_coastline_overlay() 呼び出しは無操作になります。


オフライン検出とユーザーへのフィードバック

resolve_map_mode(map_mode) は軽量なソケット接続確認を行い (effective_mode, fell_back) を返します。fell_back が True の場合、 呼び出し元ページは以下のメッセージを表示します:

⚠️ Online map tiles are unavailable. Showing the local coastline map.

ページは図を構築する前に resolve_map_mode() を呼び、その結果の effective_mode を apply_map_style() に渡してください。


自己完結 HTML ダウンロード

figure_to_self_contained_html(fig) → bytes は Plotly 図を完全オフライン対応の HTML ファイルとしてエクスポートします。Plotly.js(約 4.5 MB)がインラインで 埋め込まれ(include_plotlyjs=True)、CDN 参照は一切含みません。 ネットワーク接続なしで任意の現代的ブラウザで開くことができます。

エクスポートされた HTML の設定フラグ:

フラグ 値
scrollZoom true
displayModeBar true
responsive true

“Download interactive HTML” ラベルのダウンロードボタンはページ 03・04 に あります。ページ 05 も download_figure() 経由でダウンロードボタンを提供します。


対象範囲と残る制約


テストカバレッジ

テストファイル スイート 検証内容
test/test_offline_map.py TestAddCoastlineOverlayIdempotency 2 回目呼び出しが無操作・True 返却・トレース名
test/test_offline_map.py TestApplyMapStyleAddsCoastline 全 5 mode で _coastline_overlay が存在・二重適用でも 1 本のみ
test/test_offline_map.py TestOfflineFallbackWarningText 英語のみ・⚠️ 始まり・日本語なし・/ 区切りなし
test/test_self_contained_html.py TestFigureToSelfContainedHtmlSource helper 定義・include_plotlyjs=True・設定定数の存在
test/test_self_contained_html.py TestFigureToSelfContainedHtmlRuntime bytes >1 MB 返却・CDN script src なし・設定フラグの HTML 埋め込み
test/test_self_contained_html.py TestPage03/04/05* ページが helper を呼ぶ・ダウンロードボタンあり・CDN 参照なし