🛰️ GPSは“意味”を指し示すか?Web開発者がExifでつまずいた日
Webアプリ開発者として、画像はただのファイルだった。
しかし、Exifに含まれるGPS情報に触れた瞬間、**“意味の深み”**に足を踏み入れた。
📍 GPSタグとの出会い
画像ファイルに含まれるExif情報には、GPSLatitude
や GPSLongitude
といったタグがある。
座標を持っているなら、地図に展開できるはず。そう思っていた。
しかし、実際にはこうだった:
- 座標が度分秒表記で格納されている(例:35°10'23.5")
-
GPSLatitudeRef
が"N"
か"S"
、GPSLongitudeRef
が"E"
か"W"
で方向を示す - 小数点に変換するには、手動で計算が必要
→ つまり、**“座標っぽい何か”**が入っているだけで、すぐに使えるわけではない。
🧠 つまずきポイント
-
表記の違い
Webでは小数点表記(例:35.1732)が主流。Exifは度分秒。変換が必要。 -
方向の扱い
北緯・南緯、東経・西経を示すRefタグが別にある。これを見落とすと、座標が逆になる。 -
Exifの信頼性
GPS情報が入っていない画像も多い。スマホの設定やアプリによっては記録されない。 -
意味の空洞
GPSがあっても、それが**“どんな場所か”**はわからない。座標は意味を持たない。
🛠️ 技術Tips:Exif GPSを扱うときの実践ノウハウ
① Exifデータの取得(ExifInterface)
val exif = ExifInterface(filePath)
val latLong = exif.latLong
if (latLong != null) {
val latitude = latLong[0]
val longitude = latLong[1]
Log.d("GPS", "緯度: $latitude, 経度: $longitude")
} else {
Log.e("GPS", "位置情報がありません")
}
→ latLong は DoubleArray? 型で、null の可能性あり。
→ ExifInterface は AndroidXライブラリに含まれてる。
② 度分秒 → 小数点変換(手動でやる場合)
Exifのタグを直接読む場合はこう👇
fun convertToDecimal(dms: Array<String>, ref: String): Double {
val (d, m, s) = dms.map {
val parts = it.split("/")
parts[0].toDouble() / parts[1].toDouble()
}
var result = d + m / 60 + s / 3600
if (ref == "S" || ref == "W") result *= -1
return result
}
使い方例:
val latDMS = arrayOf(
exif.getAttribute(ExifInterface.TAGGPSLATITUDE) ?: "0/1",
exif.getAttribute(ExifInterface.TAGGPSLATITUDE_REF) ?: "N"
)
→ ただし、latLong が使えるならそっちのほうがスマート!
③ Google Mapsで座標を表示
val geoUri = Uri.parse("geo:$latitude,$longitude?q=$latitude,$longitude")
val mapIntent = Intent(Intent.ACTION_VIEW, geoUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
→ geo: URIスキームでGoogle Mapsを起動できる!
④ GPSがない場合のフォールバック
- ExifInterface.TAGDATETIMEORIGINAL で撮影日時を取得
- ファイル名やフォルダ名から推定
- ユーザー入力で位置を補完するUI設計もあり
val dateTaken = exif.getAttribute(ExifInterface.TAGDATETIMEORIGINAL)
⑤ テスト用画像の作り方(Exif付き画像)
exiftool -GPSLatitude=35.6586 -GPSLongitude=139.7454 -GPSLatitudeRef=N -GPSLongitudeRef=E photo.jpg
→ exiftool を使えば、Exif情報を自由に編集できる!
🧭 設計美的まとめ
GPSはただの座標じゃない。
それは、“意味を持たせる設計”の起点であり、技術と哲学の交差点。
ExifのGPSタグに出会ったことで、Webアプリ開発者は「意味の地図」を描き始める。
そのつまずきは、設計美への第一歩だった。
📼 次は「Exifの撮影日時」や「命名の哲学」にも意味を見出してみよう。
Discussion