🙆

🛰️ GPSは“意味”を指し示すか?Web開発者がExifでつまずいた日

に公開

Webアプリ開発者として、画像はただのファイルだった。
しかし、Exifに含まれるGPS情報に触れた瞬間、**“意味の深み”**に足を踏み入れた。


📍 GPSタグとの出会い

画像ファイルに含まれるExif情報には、GPSLatitudeGPSLongitude といったタグがある。
座標を持っているなら、地図に展開できるはず。そう思っていた。

しかし、実際にはこうだった:

  • 座標が度分秒表記で格納されている(例:35°10'23.5")
  • GPSLatitudeRef"N""S"GPSLongitudeRef"E""W" で方向を示す
  • 小数点に変換するには、手動で計算が必要

→ つまり、**“座標っぽい何か”**が入っているだけで、すぐに使えるわけではない。


🧠 つまずきポイント

  1. 表記の違い
    Webでは小数点表記(例:35.1732)が主流。Exifは度分秒。変換が必要。

  2. 方向の扱い
    北緯・南緯、東経・西経を示すRefタグが別にある。これを見落とすと、座標が逆になる。

  3. Exifの信頼性
    GPS情報が入っていない画像も多い。スマホの設定やアプリによっては記録されない。

  4. 意味の空洞
    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