class ExifGpsInjector::Kml

Kml

Attributes

list[R]
max_distance_time[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/exif_gps_injector/kml.rb, line 7
def initialize(options = {})
  @dir = options.delete(:dir)
  @max_distance_time = options.delete(:max_distance_time) || 2.minutes
  @list = {}
  Dir.glob("#{@dir}/*.kml").each { |kml| @list.merge!(extract_list_from_kml(File.read(kml))) }
end

Public Instance Methods

locate_at(date) click to toggle source
# File lib/exif_gps_injector/kml.rb, line 14
def locate_at(date)
  date = DateTime.parse(date).utc
  @list.select { |key, _value| key <= date && key >= date - @max_distance_time }.to_a.last.try(:last) ||
    @list.select { |key, _value| key >= date && key <= date + @max_distance_time }.to_a.first.try(:last)
end

Private Instance Methods

extract_list_from_kml(kml) click to toggle source
# File lib/exif_gps_injector/kml.rb, line 22
def extract_list_from_kml(kml)
  Nokogiri::XML(kml).search('when')
    .map { |e| { (DateTime.parse(e.text).utc) => e.next_element.text } }
    .reduce({}, :merge)
    .sort.to_h
end