2017-01-16 6 views
-1

Когда вы извлекаете exif-данные из файла, координаты даются вам в массиве из трех чисел.Используйте ruby ​​для преобразования формата массива данных exif gps в поплавки широты и долготы

i.exif['gps_latitude'] 
=> ["6/1", "4/1", "911/50"] 

Это должно быть преобразовано в более общий формат float для общего использования.

ответ

5

Самый прямой способ я могу думать о том, чтобы преобразовать строки в Rational цифр:

arr = ["6/1", "4/1", "911/50"] 

d, m, s = arr.map(&:to_r) 
#=> [(6/1), (4/1), (911/50)] 

И рассчитать значение десятичных градусов через:

lat = d + m/60 + s/3600 
#=> (1092911/180000) 

Чтобы получить оценку поплавка e:

lat.to_f 
#=> 6.071727777777777 
0

Вы можете использовать следующий код, чтобы сделать преобразование в Ruby:

arr = exif.gps_latitude 
pic.lat = arr[0].to_f + arr[1].to_f/60 + arr[2].to_f/3600 
pic.lat *= exif.gps_latitude_ref == 'S' ? -1 : 1 

arr = exif.gps_longitude 
pic.lng = arr[0].to_f + arr[1].to_f/60 + arr[2].to_f/3600 
pic.lng *= exif.gps_longitude_ref == 'W' ? -1 : 1 
+0

Этот код игнорирует знаменатель, например. '50'. 3 числа переводят на '6 ° 4 '18,22" ', а не' 6 ° 4' 911 "' – Stefan