class SRTM
Public Class Methods
new(input_file)
click to toggle source
# File lib/SRTMGem.rb, line 4 def initialize(input_file) @input_file = File.open(input_file, 'rb') end
Public Instance Methods
get_elevation(longitude, latitude)
click to toggle source
# File lib/SRTMGem.rb, line 9 def get_elevation(longitude, latitude) d_longitude = longitude d_latitude = latitude i_longitude = d_longitude.to_i i_latitude = d_latitude.to_i intervals = 1200 if d_longitude < 0 i_longitude = (i_longitude - 1) * -1 d_longitude = (i_longitude + d_longitude) + i_longitude.to_f end if d_latitude < 0 i_latitude = (i_latitude - 1) * -1 d_latitude = (i_latitude.to_f + d_latitude) + i_latitude.to_f end i_longitude_index = ((d_longitude - i_longitude.to_f) * intervals).to_i i_latitude_index = ((d_latitude - i_latitude.to_f) * intervals).to_i if i_longitude_index >= intervals i_longitude_index = intervals - 1 end if i_latitude_index >= intervals i_latitude_index = intervals - 1 end d_longitude_offset = d_longitude - i_longitude.to_f d_latitude_offset = d_latitude - i_latitude.to_f position = (((intervals - i_latitude_index) - 1) * (intervals + 1)) + i_longitude_index d_left_top = read_bin(position) position = ((intervals - i_latitude_index) * (intervals + 1)) + i_longitude_index d_left_bottom = read_bin(position) position = (((intervals - i_latitude_index) - 1) * (intervals + 1)) + i_longitude_index +1 d_right_top = read_bin(position) position = ((intervals - i_latitude_index) * (intervals + 1)) + i_longitude_index + 1 d_right_bottom = read_bin(position) d_delta_longitude = d_longitude_offset - (i_longitude_index.to_f * (1 / intervals.to_f)) d_delta_latitude = d_latitude_offset - (i_latitude_index.to_f * (1 / intervals.to_f)) d_longitude_height_left = d_left_bottom - calc_elev(d_left_bottom - d_left_top, 1 / intervals.to_f, d_delta_latitude) d_longitude_height_right = d_right_bottom - calc_elev(d_right_bottom - d_right_top, 1 / intervals.to_f, d_delta_latitude) d_elevation = d_longitude_height_left - calc_elev(d_longitude_height_left - d_longitude_height_right, 1 / intervals.to_f, d_delta_longitude) return d_elevation + 0.5 end
Private Instance Methods
calc_elev(height, length, diff)
click to toggle source
# File lib/SRTMGem.rb, line 73 def calc_elev(height, length, diff) return (height * diff) / length end
read_bin(position)
click to toggle source
# File lib/SRTMGem.rb, line 65 def read_bin(position) @input_file.seek(position * 2) bytes = @input_file.read(2) first_byte = bytes[0].ord second_byte = bytes[1].ord return first_byte * 256 + second_byte end