Local Exif Geo Map 📍
強力でプライバシー重視のブラウザベースツール。写真からGPSデータを可視化・分析できます。画像をドラッグ&ドロップするだけで、インタラクティブなマップ、ヒートマップ、標高プロファイル、トリップ統計を生成します。

なぜ?
ずっと自分でホストできるツールが欲しくて、写真を分析してマップに変換したかったんです。そこにクロアチア旅行がやってきて、風が私のハンモックを宿敵と決めつけたかのようでした。午前2時、睡眠不足で少し風に焼かれ、ビーチに退却し、まるで完全なマニアのようにスマホでこのアプリのコア全体をコードしました。
今でも美しい災害です——海風、不眠症、そして疑わしい人生の選択が原動力。でも衝撃的なことに、ほとんどの機能は実際に動いています。
バイエルン語以外の翻訳(苦労して自分でやりました。なぜなら私はどうやらその特定の種類の変わり者だから)はAI、主に EuroLLM と Claude が生成しました。だからドイツ語がロボットが発作を起こしているように読めても、その理由がわかります。
📸 スクリーンショット
 |  |  |  |
|---|
| インタラクティブマップ | ダークモード | 標高プロファイル | Overpassインポート |
✨ 機能
📷 画像分析
- ドラッグ&ドロップアップロード: サイドバーに写真をドロップするだけでGPSデータを抽出
- EXIF GPS抽出: 画像メタデータからGPS座標、タイムスタンプ、標高を自動読み取り
- 孤立写真同期: 新機能! GPSデータがない写真も、アップロードしたGPXトラックのタイムスタンプに一致すれば自動的にマップ上に配置(テストが必要です)
- 一括処理: 数千枚の画像を処理(50,000枚以上でテスト済み)
- 進行状況追跡: 画像処理中のリアルタイム進行状況バー
インタラクティブマッピング
- 12以上のマップスタイル: OpenStreetMap、Esri Satellite/Terrain、CartoDB(light/dark/voyager)、OpenTopoMap、OPNV(交通)、OpenRailwayMapなど
- トラックカスタマイズ:
- 線のスタイル: 実線、破線、点線
- ビジュアル: 線の色、太さ、透明度を調整可能
- トラックポイント:
- マーカー: カスタム形状(円、四角、星など)、色、サイズ、境界線
- タイムスタンプ: すべてのポイントに永続的なタイムスタンプラベルを表示/非表示
- 方向矢印: 移動方向を可視化(サイズ/間隔調整可能)
- 自動追従: 「追従モード」で再生中マップを現在地にセンター
📍 興味ポイント&OpenStreetMapデータ
- POIエディタ: マップ上の任意の場所をクリックして、名前と説明付きのカスタムウェイポイントを追加
- OpenStreetMapデータ: Overpass APIから近くのPOIを直接読み込み(「サーバー混雑中」処理あり):
- 観光: 展望台、博物館、ホテル、ホステル、案内所、観光名所
- 飲食: レストラン、カフェ、ファストフード、バー、パブ、ビアガーデン
- 水: 飲料水、泉
- 山頂: 山のピーク(標高メートル表示)
- 史跡: 城、遺跡、モニュメント、記念碑、遺跡
- 自然: キャンプ場、山小屋、自然保護区(NSG)、景観保護区域(LSG)、鳥獣保護区(VSG)、FFHエリア
- 交通: バス停、駅
- 情報ボックス: 任意のPOIをクリックして詳細表示:
- 名前と種類
- 標高(ある場合)
- ウェブサイトリンク
- Wikipediaリンク(言語自動検出)
🔥 ヒートマップ
- 密度可視化: 最も時間を過ごした場所を表示
- 5色の配色: Fire、Cool、Earth、Marine、Twilight
- 調整可能パラメータ: 強度、半径、ぼかし、透明度
📈 標高プロファイル
- インタラクティブチャート: チャートをクリックしてマップ上の位置をハイライト、正確な統計を表示
- ズーム&パン: Chart.js搭載のインタラクティブ標高グラフ
- 統計: 総標高増減、最小/最大標高
- レスポンシブ: 「標高プロファイルにジャンプ」リンクと展開可能なサイドバーで詳細分析
▶️ アニメーション
- 再生コントロール: 時間経過に沿った旅の再生/一時停止
- 速度調整: 0.5倍~5倍の再生速度
- 追従モード: カメラが現在地を自動追従
- 軌跡エフェクト: 再生中の経路履歴を表示
📊 統計
- 総距離: トラック長(km)を計算
- 所要時間: 最初の写真から最後の写真までの時間
- 平均速度: 移動速度を計算
- ポイント数: 画像とトラックからのGPSポイント数
📅 タイムライン
- 時系列表示: すべてのトラックポイントを時間順に表示
- 位置にジャンプ: タイムラインエントリをクリックしてマップ上で移動
💾 エクスポートオプション
- PNGエクスポート: 現在のマップビューを高品質PNG画像としてワンクリックダウンロード(アクティブなレイヤー、ヒートマップ、マーカーすべてを含む)
- GPXエクスポート: 解析済み写真トラックを標準GPXファイルとしてエクスポート。Strava、Garmin、Komoot、Google Earthで使用可能
- バックアップ: キュレーション済みマップデータを後で使用するために保存
🌐 多言語対応
11言語対応:
- 🇬🇧 英語
- 🇩🇪 ドイツ語
- 🇮🇹 イタリア語
- 🇭🇷 クロアチア語
- 🇵🇱 ポーランド語
- 🇪🇸 スペイン語
- 🇺🇦 ウクライナ語
- 🇳🇱 オランダ語
- 🇸🇪 スウェーデン語
- 🇳🇴 ノルウェー語
バイエルン語
🎨 UI/UX
- ダークモード: 明るいテーマと暗いテーマを切り替え(デフォルトはダーク)
- レスポンシブデザイン: デスクトップおよびモバイルブラウザで動作
- 折りたたみ可能セクション: 展開可能なパネルでサイドバーを整理
- トースト通知: ユーザーフレンドリーなフィードバックメッセージ
🔒 プライバシー最優先
あなたの写真はデバイスから離れることはありません!
すべてのGPS抽出と処理は 完全にブラウザ内 で行われます。画像がサーバーにアップロードされることはありません。唯一のネットワークリクエストは:
- マップタイルの読み込み(OpenStreetMapなどのタイルプロバイダから)
- オプション: OSM POIデータの読み込み(Overpass APIから)
つまり、あなたの個人写真と位置データは100%プライベートに保たれます。
また、アプリからのログ記録は一切ありません。
🛠️ テクノロジー
📦 インストール&使用方法
要件
- PHP 8.2以上
- 最新のウェブブラウザ(Chrome、Firefox、Safari、Edge)
インストール
- リポジトリをクローン(またはZIPとしてダウンロードして展開)
- ウェブサーバーが
public/ ディレクトリを指すように設定
デプロイ
本番環境では、PHP対応のウェブサーバー(Apache、Nginx + PHP-FPMなど)にデプロイしてください。
📁 プロジェクト構成
gps-track-viewer/
├── public/ # ウェブルート
│ ├── assets/
│ │ ├── js/ # アプリケーションJavaScript
│ │ │ ├── app.js # メインアプリケーションロジック
│ │ │ └── TrackParser.js # GPX/KML解析
│ │ └── styles.css # アプリケーションスタイル
│ ├── lib/ # PHPクラス
│ │ ├── Assets/ # アセット処理
│ │ ├── Security/ # セッション&セキュリティ
│ │ ├── View/ # テンプレートレンダリング
│ │ └── Config.php # 設定
│ ├── templates/ # PHPテンプレート
│ │ └── app.php # メインアプリケーションテンプレート
│ ├── vendor/ # フロントエンドライブラリ(Leaflet等)
│ ├── index.php # アプリケーションエントリポイント
│ └── router.php # 開発サーバールーター
└── README.md
⚠️ 制限事項
- GPSデータ必須: GPS EXIFデータが埋め込まれている写真のみマッピング可能
- ブラウザメモリ: 非常に大量のバッチ(50,000枚以上)は、RAMの少ないデバイスで遅くなる可能性あり
- タイルプロバイダ: 一部のマップスタイルには使用制限や帰属表示が必要な場合あり
- OSMデータ: Overpass APIクエリは、過負荷防止のため1リクエストあたり約300 POIに制限
🤝 貢献
貢献は歓迎します!問題の報告やプルリクエストを遠慮なく送ってください。
🙏 クレジット
GPS Track Viewerは巨人の肩の上に成り立っています。以下の素晴らしいオープンソースプロジェクトの開発者と貢献者に感謝します:
☕ プロジェクトを支援
これが役に立ち、支援したい場合:
Bitcoin (BTC): bc1q3lz8vxpk0rchqn6dq8g08rkcqts425csuvnjr2477uzdenak5n8sfds2ke
📬 お問い合わせ
質問、提案、バグ報告については、GitHubでIssueを開いてください。