#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()方法的语法: