class Overhelper
Constants
- EARTH_RADIUS_IN_M
Public Class Methods
convert_to_ways(json_string)
click to toggle source
# File lib/overhelper.rb, line 54 def self.convert_to_ways(json_string) data = JSON.parse(json_string) node_library = nodes_to_dict(data) ways = [] data["elements"].each do |element| next unless element["type"] == "way" nodes_of_way = element["nodes"] prev_node = nil nodes_of_way.each do |node| unless prev_node.nil? way = {} way[:lat1] = (node_library[prev_node])[:lat] way[:lon1] = (node_library[prev_node])[:lon] way[:lat2] = (node_library[node])[:lat] way[:lon2] = (node_library[node])[:lon] ways << way end prev_node = node end end return ways end
distance_in_m(lat1, lon1, lat2, lon2)
click to toggle source
# File lib/overhelper.rb, line 19 def self.distance_in_m(lat1, lon1, lat2, lon2) =begin * Computes distance between two points on Earth using Haversine formula * Earth is assumed to be sphere, errors from assuming spherical geometry might be up to 0.55% crossing the equator * source: https://en.wikipedia.org/wiki/Haversine_formula and http://www.movable-type.co.uk/scripts/latlong.html =end lat1 = lat1 * Math::PI / 180 lon1 = lon1 * Math::PI / 180 lat2 = lat2 * Math::PI / 180 lon2 = lon2 * Math::PI / 180 dLat = (lat2 - lat1).abs dLon = (lon2 - lon1).abs # a: square of half the chord length between the points a = Math.sin(dLat / 2) * Math.sin(dLat / 2) a += Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat2) * Math.cos(lat1) angularDistanceInRadians = Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) delta_in_m = 2 * EARTH_RADIUS_IN_M * angularDistanceInRadians return delta_in_m end
list_of_locations_from_overpass_into_array(list, data = [])
click to toggle source
# File lib/overhelper.rb, line 8 def self.list_of_locations_from_overpass_into_array(list, data = []) list.split(/[\n]+/m).each do |element| element = Hash[[:lat, :lon].zip(element.split(/[\s]+/m))] element[:lat] = element[:lat].to_f element[:lon] = element[:lon].to_f data << element end return data end
nodes_to_dict(data)
click to toggle source
# File lib/overhelper.rb, line 41 def self.nodes_to_dict(data) node_library = {} data["elements"].each do |element| next unless element["type"] == "node" saved = {} saved[:lat] = element["lat"].to_f saved[:lon] = element["lon"].to_f node_library[element["id"]] = saved end return node_library end