# Convert OSGB36 eastings and northings to WGS84 latitudes and longitudes
# $ ruby en2latlon.rb infile.csv > outfile.csv
# http://adrianshort.org/2013/01/23/converting-eastings-and-northings-to-latitudes-and-longitudes-in-ruby/
require 'csv'
require_relative './OSGB36'

lines = CSV.read(ARGV[0]) # read the whole file into an array of arrays

easting_col = nil
northing_col = nil

(0..lines.size - 1).each do |i|
  if i == 0
    easting_col = lines[i].index("Eastings")
    northing_col = lines[i].index("Northings")
    lines[i] << "lat"
    lines[i] << "lng"
  else
    ll = OSGB36.en_to_ll(lines[i][easting_col].to_f, lines[i][northing_col].to_f)
    lines[i] << ll[:latitude]
    lines[i] << ll[:longitude]
  end
end

csv_str = CSV.generate do |csv|
  lines.each do |line|
    csv << line
  end
end

puts csv_str