Javaで画像ファイルからGPSデータを取得する方法
画像に埋め込まれたGPS位置情報をJavaで抽出する方法を解説。JDeli、Apache Tika、ImageIOの3つのアプローチをコード例付きで比較します。

スマートフォンで撮影した写真には、撮影場所のGPS座標(緯度・経度)が自動的に埋め込まれていることをご存知でしょうか。この位置情報は、写真管理アプリでの地図表示、不動産物件の位置特定、SNS投稿の位置タグ付けなど、さまざまな用途で活用されています。この記事では、Javaプログラムから画像ファイルに含まれるGPSデータを取り出す方法を、複数のアプローチで解説します。
画像のGPSデータとは?
GPSデータとは、全地球測位システム(Global Positioning System)によって取得された緯度・経度の座標情報のことです。最近のスマートフォンやデジタルカメラには、撮影時に自動的にこの位置情報を画像ファイルに記録する機能(ジオタグ機能)が搭載されています。
記録されるGPS情報には、主に以下のような項目が含まれます。
- 緯度(Latitude): 北緯・南緯の座標
- 経度(Longitude): 東経・西経の座標
- 高度(Altitude): 撮影地点の海抜高度
- タイムスタンプ: GPS測位時のUTC時刻
- 測位精度: 位置情報の精度指標
これらの情報は、画像ファイルの「メタデータ」と呼ばれる領域に、EXIF(Exchangeable Image File Format)規格に基づいて格納されています。
GPSデータはどこに格納されているのか
GPS情報はEXIFメタデータの「GPS IFD(Image File Directory)」と呼ばれる領域に保存されます。EXIFデータを含むことができる主な画像フォーマットは以下のとおりです。
| フォーマット | EXIFサポート | GPS情報 |
|---|---|---|
| JPEG | 対応 | 取得可能 |
| HEIC | 対応 | 取得可能 |
| TIFF | 対応 | 取得可能 |
| PNG | 対応(拡張) | 取得可能 |
| WebP | 対応 | 取得可能 |
| GIF | 非対応 | 取得不可 |
| BMP | 非対応 | 取得不可 |
JDeliのビューア機能を使えば、画像ファイルに含まれるEXIFメタデータ(GPS情報を含む)をGUIで簡単に確認できます。開発前の調査やデバッグに便利です。
Javaでの抽出方法
JavaでGPSデータを抽出するには、いくつかのアプローチがあります。それぞれの特徴とコード例を紹介します。
方法1: JDeliによるGPSデータ抽出(推奨)
JDeliを使えば、シンプルなAPIでEXIFメタデータからGPS座標を簡単に抽出できます。
// 画像ファイルからメタデータを取得
ImageInfo imageInfo = JDeli.getImageInfo(new File("photo.jpg"));
// GPS情報を含むEXIFデータにアクセス
// ImageInfoオブジェクトから位置情報を取得可能バイト配列からの取得も可能です。
byte[] imageData = Files.readAllBytes(Paths.get("photo.jpg"));
ImageInfo imageInfo = JDeli.getImageInfo(imageData);JDeliのメリットは、JPEG、HEIC、PNG、TIFF、WebPなど14種類以上のフォーマットに対応しており、フォーマットごとにコードを変える必要がない点です。統一されたAPIで、どのフォーマットでも同じ方法でメタデータを取得できます。
方法2: Apache Tikaによる方法
Apache Tikaは、多目的なメタデータ抽出ライブラリです。画像だけでなく、PDF、Office文書など幅広いファイル形式に対応しています。
ImageDetector detector = new ImageDetector();
MediaType type = detector.detect(
TikaInputStream.get(Paths.get("photo.jpg")), null
);
// Tikaのメタデータ抽出APIでGPS情報を取得
Parser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
parser.parse(TikaInputStream.get(Paths.get("photo.jpg")),
new DefaultHandler(), metadata, new ParseContext());
String latitude = metadata.get("geo:lat");
String longitude = metadata.get("geo:long");Apache Tikaは機能が豊富ですが、依存ライブラリが多く、画像処理だけが目的の場合にはオーバースペックになりがちです。
方法3: ImageIO(Java標準API)による方法
Java SEに標準搭載されているImageIOでも、限定的ながらEXIFデータの取得が可能です。
ImageReader imageReader = ImageIO.getImageReadersByFormatName("jpeg").next();
imageReader.setInput(
ImageIO.createImageInputStream(new FileInputStream("photo.jpg")), true
);
IIOMetadata metadata = imageReader.getImageMetadata(0);ただし、ImageIOでのEXIFメタデータ取得にはいくつかの制約があります。
- 取得したメタデータのパースを自前で実装する必要がある
- HEICやWebPなどの新しいフォーマットには非対応
- GPS情報の緯度・経度変換(度分秒から10進数への変換)も手動で行う必要がある
3つの方法の比較
| 項目 | JDeli | Apache Tika | ImageIO |
|---|---|---|---|
| 導入の容易さ | JARファイル1つ | 多数の依存ライブラリ | 追加不要(標準API) |
| 対応フォーマット | 14種類以上 | 多種多様 | JPEG, PNG, BMP, GIF等 |
| HEIC/WebP対応 | 対応 | 対応 | 非対応 |
| GPS情報の取得 | シンプルなAPI | メタデータキーで取得 | 手動パースが必要 |
| ライブラリサイズ | 軽量 | 大きい | なし |
| 画像処理との統合 | 読み書き・変換・加工も可能 | メタデータ取得のみ | 読み書きのみ |
GPS情報を扱う際の注意点
画像のGPS情報を扱う際には、プライバシーに関する配慮も重要です。
- 個人情報の保護: GPS座標から撮影者の自宅や勤務先が特定される可能性があります。不特定多数に公開する画像からはGPS情報を除去することを検討してください
- メタデータの除去: 画像をWebに公開する前に、EXIFデータを意図的に除去するワークフローを組み込むことが推奨されます
- 同意の取得: ユーザーの位置情報を収集・利用する場合は、適切な同意を得る必要があります
JDeliの利点
JDeliは、GPS情報の取得だけでなく、Javaでの画像処理全般を強力にサポートする開発ライブラリ(SDK)です。
- 14種類以上の画像フォーマットに対応(JPEG、PNG、TIFF、HEIC、WebP、JPEG 2000、JPEG XLなど)
- 統一されたAPI: フォーマットに関わらず同じコードでメタデータの取得が可能
- 高速な処理: ImageIOと比較して読み書きのパフォーマンスが向上
- 安定性: ヒープ関連のJVMクラッシュを防止
- 画像加工機能: クロップ、リサイズ、回転、フォーマット変換なども統合的に利用可能
無料トライアルが提供されていますので、まずはお手元の環境でGPSデータ取得の動作をお試しください。

開発者向けPDF入門ガイド
PDFの仕様や活用方法など、開発者に必要な情報をコンパクトにまとめました。初めてPDFを扱う開発者にも分かりやすく、基礎から応用までカバーしているため、PDFのポテンシャルを最大限に引き出し、アプリケーション開発やドキュメント管理の効率化を図るための手引きとなるでしょう。