计算摄像头到目标检测点得距离d,详见: https://blog.csdn.net/qq_41694461/article/details/124473059.
计算代码
直接上干货
# 距离dis的单位是米,deg是方位角,需要化为弧度。lon1,lat1是起始点经纬度信息
def calc_situation(long1, lati1, deg, dis):
arc = 6371.393*1000
long2 = long1 + dis*math.sin(deg)/(arc*math.cos(lati1)*2*math.pi/360)
lati2 = lati1 + dis*math.cos(deg)/(arc*2*math.pi/360)
return long2,lati2
推理过程
假设方位角是α, 那从点1到点2的平移距离分别如下所示d*sinα, d*cosα。 这里正北为0度。基中点1经纬度(long1, lati1)和距离d是已知的。 求点2的经纬度(long2,lati2)
点1所在的纬度,其实也是一个有用的角度,通过它可以知道当前纬度的那个切面的半径长度,下图红线所示用arc表示。这里假设地球是近似球体,赤道圆的半径是ARC,侧从下图中可以得出:
就是知道φ是当前点1的纬度。则当前的纬度的切面半径 arc = ARC*cos(φ) ,其中φ其实就是当前的方位的纬度值,即arc = ARC*cos(lat1)
我们再讨论下地球半径,其实地球是一个椭球体。
极半径 从地心到北极或南极的距离,大约3950英里(6356.9088千米)(两极的差极小,可以忽略)。
赤道半径 是从地心到赤道的距离,大约3963英里(6377.830千米)。
如果只是做近似计算的,我们这里取平均距离,平均半径 大约3959英里(6371.393千米) 。这个数字是地心到地球表面所有各点距离的平均值。
这里取平均半径那么ARC=6371.393*1000(米)
计算推导
-
计算第二点的经度,就是 水平平移的距度(dsinα)除以 当前纬度切面周长(2πarc),再每乘以360度) ,就知道了水平横向平移了多少度,再加上long1,就是long2的值了。
-
计算第二点的纬度,比较简单,就是, 垂直平移的距离d(d*cosα)除以 地球纵向周长,再乘上360度,就知道纵向平移了多少度,再加上lat1,就知道lat2的值了。
long2 = long1 + d*sinα/[ARC*cos(lat1)*2π/360]
lati2 = lati1 +d*cosα/ (ARC*2π/360)
注意:α是方位角,需要化为弧度
PYthon代码实现:
# 距离dis的单位是米,deg是方位角,需要化为弧度。lon1,lat1是起始点经纬度信息
def calc_situation(long1, lati1, deg, dis):
arc = 6371.393*1000
long2 = long1 + dis*math.sin(deg)/(arc*math.cos(lati1)*2*math.pi/360)
lati2 = lati1 + dis*math.cos(deg)/(arc*2*math.pi/360)
return long2,lati2