module EstimateDistance
Constants
- EARTH_RADIUS
- PI
Public Class Methods
circle_distance(lat1, lng1, lat2, lng2)
click to toggle source
# File lib/estimate_distance.rb, line 35 def self.circle_distance(lat1, lng1, lat2, lng2) lat1, lng1, lat2, lng2 = [lat1, lng1, lat2, lng2].map(&:to_f) radLat1 = get_rad(lat1) radLat2 = get_rad(lat2) a = radLat1 - radLat2 b = get_rad(lng1) - get_rad(lng2) s = 2*Math.asin(Math.sqrt(Math.sin(a/2)**2 + Math.cos(radLat1)*Math.cos(radLat2)*Math.sin(b/2)**2)) s = s*EARTH_RADIUS return (s/1000).round(2) end
direct_calculate_distance(former_address, latter_address, ak='')
click to toggle source
# File lib/estimate_distance.rb, line 46 def self.direct_calculate_distance(former_address, latter_address, ak='') former_result = location_address_info(former_address, ak) latter_result = location_address_info(latter_address, ak) if former_result['status'] == 0 && latter_result['status'] == 0 lat1 = former_result['result']['location']['lat'] lng1 = former_result['result']['location']['lng'] lat2 = latter_result['result']['location']['lat'] lng2 = latter_result['result']['location']['lng'] circle_distance(lat1, lng1, lat2, lng2) else return { status: -1 ,message: 'ak有误或超出调用次数'} end end
get_rad(d)
click to toggle source
# File lib/estimate_distance.rb, line 31 def self.get_rad(d) return d.to_f*PI/180.0 end
location_address_info(address, ak)
click to toggle source
def self.real_address(real_address)
[real_address.city.try(:name), real_address.district.try(:name), real_address.address].compact.join
end
# File lib/estimate_distance.rb, line 13 def self.location_address_info(address, ak) if ak == '' params = {address: address, output: 'json', ak: 'dAYeNt1licEwUDKoyeNBskBQjHRKDDmb'} else params = {address: address, output: 'json', ak: ak} end request_info(params) end
request_info(params)
click to toggle source
# File lib/estimate_distance.rb, line 22 def self.request_info(params) begin result = RestClient.get('http://api.map.baidu.com/geocoder/v2/', params: params) JSON(result) rescue Exception=> e return false end end