`

Ruby 版根据经纬度计算距离

 
阅读更多
ER = 6378137.0
FL = 1/298.257;

def rad(d) 
    d * Math::PI / 180.0
end

def calc_distance(lat1, lng1, lat2, lng2)
	cl1 = rad((lat1 + lat2)/2)
	cl2 = rad((lat1 - lat2)/2)
	cl = rad((lng1 - lng2)/2)

    	scl1 = Math.sin(cl1) ** 2
   	scl2 = Math.sin(cl2) ** 2
   	scl = Math.sin(cl) ** 2

	s = scl2 * (1 - scl) + (1 - scl1) * scl
    	c = (1 - scl2) * (1 - scl) + scl1 * scl
	w = Math.atan(Math.sqrt(s / c))
	r = Math.sqrt(s * c) / w;
	d = 2 * w * ER;
	
	h1 =  (3 * r - 1) / 2 / c
    	h2 = (3 * r + 1) / 2 / s;
    	s = d * (1 + FL * (h1 * scl1 * (1 - scl2) - h2 * (1 - scl1) * scl2));
	
	puts '> 99km' if s > 99000
	s
end

 

分享到:
评论

相关推荐

    Ruby-GeokitGeokitgem提供了地理编码和距离计算

    Ruby-Geokit是一个强大的开源库,专为Ruby开发者设计,用于处理与地理位置相关的任务,如地理编码、反向地理编码以及进行距离和方向的计算。这个gem极大地简化了在Ruby应用中集成地理服务的工作,使得开发者能够轻松...

    rvincenty:Ruby的Vincenty公式的实现,以计算地球上两点之间的距离

    这是Vincenty公式的Ruby实现,用于计算地球上两点之间的距离。 该公式假定地球的形状是扁球形,因此比假定球形地球的其他方法要准确得多。 该代码在很大程度上受到Chris Venues Javascript实现和解释的启发: 两...

    Ruby-rgeoRuby的地理空间数据的库

    Rgeo库支持对这些几何对象进行各种计算,如距离计算、面积计算、交集、并集、差集等。它还实现了球面几何算法,考虑到地球并非完美的平面,这在处理全球范围的地理数据时至关重要。例如,你可以计算两个地点之间的...

    使用Ruby on Rails和PostGIS创建位置感知网站

    这样的网站能够处理地理数据,提供地图展示、地理编码、距离计算等特性,常见于地图服务、本地搜索应用或者基于位置的社交网络。 **1. Ruby on Rails框架介绍** Ruby on Rails(简称Rails)是基于Ruby语言的一个...

    Laravel开发-geocode

    这个API可以用于获取位置信息,比如地址验证、距离计算、定位用户等。通过发送HTTP请求到特定的URL,并传递查询参数,如地址,开发者可以获得JSON或XML格式的响应,其中包含了地理编码的结果。 **Laravel中的集成**...

Global site tag (gtag.js) - Google Analytics