python函数——根据经纬度计算距离公式的错误及修正

在实现根据经纬度计算两点间距离的Python函数时遇到`ValueError: math domain error`。问题源于`acos()`函数参数超出1的范围,由于浮点数精度误差。解决方案是检查并修正涉及`acos()`的数值处理,确保输入在-1到1之间。
摘要由CSDN通过智能技术生成
#coding: utf-8
#封装函数
import math
def cal_dis(latitude1, longitude1,latitude2, longitude2):
	latitude1 = (Math.PI/180)*latitude1
	latitude2 = (Math.PI/180)*latitude2
	longitude1 = (Math.PI/180)*longitude1
	longitude2= (Math.PI/180)*longitude2
	#因此AB两点的球面距离为:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R
	#地球半径
	global R = 6378.1;
	d =  math.acos(math.sin(latitude1)*math.sin(latitude2)+\
		 math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))*R
	return d;
	}

实现了根据输入两点经纬度,计算这两点距离的函数,但是在实际操作过程中,出现了报错:

ValueError: math domain error

下面是测试数据,这部分是正确的数据

print cal_dis(39.762146, -104.98248,39.758066, -104.902431)
print cal_dis(39.77455175, -105.01426466666665,39.76241472, -104.90343176000002)
print "横向一个纬度的距离:",cal_dis(39, -104,40, -104)
print "纵向一个经度的距离:",cal_dis(39, -105,39, -104)
print cal_dis(39.772779500000006, -104,39.762146, -104)
下面是会报错的数据集:

print "error"
print cal_dis(-6.174444, 106.829444, -6.174444, 106.82944400000001)
print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)
print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)
print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)
print cal_dis(37.647464, -77.624973, 37.647464, -77.624973)
经过搜索相关文章,最终发现是由于acos(x)中的x越界引起的。

语法

以下是acos()方法的语法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值