Paradigm Shift Design

ISHITOYA Kentaro's blog.

exifrで取得したEXIFに含まれる緯度経度情報の変換

ruby-exif.rbをあきらめてExifrを使ってみる - Paradigm Shift Designの続き

結局、exifrでデータを取得するコードは

@tags = EXIFR::JPEG.new(@filename)
if @tags.exif?
  @content.width = @tags.width;
  @content.height = @tags.width
  @content.capture_date = @tags.exif[:date_time];

  if @tags.exif.nil?.equal?(false)
    @latitude = @tags.exif[:gps_latitude]
    @content.latitude = @latitude[0] + @latitude[1]/60 + @latitude[2]/3600
    @longitude = @tags.exif[:gps_longitude]
    @content.longitude = @longitude[0] + @longitude[1]/60 + @longitude[2]/3600
  end
  p @content
end

みたいになった。


上記コードで、

@tags.exif[:gps_latitude]
@tags.exif[:gps_longitude]

の値は、

:gps_latitude =>[Rational(35, 1),  Rational(93, 10),   Rational(0, 1)]
:gps_longitude=>[Rational(136, 1), Rational(2901, 50), Rational(0, 1)]

となっていて、緯度経度が時・分・秒に分割され、3つRationalの配列になっている。
これをGoogleMapsなんかで使える値にするには、上記コードのように

@latitude = @tags.exif[:gps_latitude]
@latitude[0] + @latitude[1]/60 + @latitude[2]/3600
@longitude = @tags.exif[:gps_longitude]
@longitude[0] + @longitude[1]/60 + @longitude[2]/3600

のように変換する必要がある。
上記のデータを変換すると、

latitude: 35.155
longitude: 136.967

というデータが得られる。

Google Mapsで表示させて確認。


・・・びっみょーにずれてるな。研究室の中でとった写真なんだけど。
まいっか。