golang 经纬度距离运算

golang 经纬度距离运算,第1张

概述根据博客地址代码修改 //转化为弧度(rad)func rad(d float64) (r float64) { r = d * math.Pi / 180.0 return}func latitude_longitude_distance(lon1, lat1, lon2, lat2 float64) (distance float64) { //赤道半径(单位m) const

根据博客地址代码修改

//转化为弧度(rad)func rad(d float64) (r float64) {	r = d * math.Pi / 180.0	return}func latitude_longitude_distance(lon1,lat1,lon2,lat2 float64) (distance float64) {	//赤道半径(单位m)	const EARTH_RADIUS = 6378137	rad_lat1 := rad(lat1)	rad_lon1 := rad(lon1)	rad_lat2 := rad(lat2)	rad_lon2 := rad(lon2)	if rad_lat1 < 0 {		rad_lat1 = math.Pi/2 + math.Abs(rad_lat1)	}	if rad_lat1 > 0 {		rad_lat1 = math.Pi/2 - math.Abs(rad_lat1)	}	if rad_lon1 < 0 {		rad_lon1 = math.Pi*2 - math.Abs(rad_lon1)	}	if rad_lat2 < 0 {		rad_lat2 = math.Pi/2 + math.Abs(rad_lat2)	}	if rad_lat2 > 0 {		rad_lat2 = math.Pi/2 - math.Abs(rad_lat2)	}	if rad_lon2 < 0 {		rad_lon2 = math.Pi*2 - math.Abs(rad_lon2)	}	x1 := EARTH_RADIUS * math.Cos(rad_lon1) * math.Sin(rad_lat1)	y1 := EARTH_RADIUS * math.Sin(rad_lon1) * math.Sin(rad_lat1)	z1 := EARTH_RADIUS * math.Cos(rad_lat1)	x2 := EARTH_RADIUS * math.Cos(rad_lon2) * math.Sin(rad_lat2)	y2 := EARTH_RADIUS * math.Sin(rad_lon2) * math.Sin(rad_lat2)	z2 := EARTH_RADIUS * math.Cos(rad_lat2)	d := math.Sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2))	theta := math.Acos((EARTH_RADIUS*EARTH_RADIUS + EARTH_RADIUS*EARTH_RADIUS - d*d) / (2 * EARTH_RADIUS * EARTH_RADIUS))	distance = theta * EARTH_RADIUS	return}
总结

以上是内存溢出为你收集整理的golang 经纬度距离运算全部内容,希望文章能够帮你解决golang 经纬度距离运算所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1278987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存