主要目的:
在处理卡口数据的过程中,遇到了一个问题:对于每个交叉口只知道其中心点的经纬度,而不知道每个进口道停车线的经纬度,对不同的进口道,难以将轨迹数据分开处理。
因此,采用了一种简化的方法,假设了每个交叉口中心点到每个停车线的距离为m米,根据相邻的两个交叉口中心经纬度,计算了路段方位角,进而根据交叉口中心点到每个停车线的距离、路段走向方位角、路段中心店经纬度这三个信息,计算出了每个进口道停车线的经纬度。其中用到的代码如下:
1.根据起始点经纬度、目标点经纬度计算它们之间的方位角
def calc_azimuth(lat1, lon1, lat2, lon2):
lat1_rad = lat1 * math.pi / 180
lon1_rad = lon1 * math.pi / 180
lat2_rad = lat2 * math.pi / 180
lon2_rad = lon2 * math.pi / 180
y = math.sin(lon2_rad - lon1_rad) * math.cos(lat2_rad)
x = math.cos(lat1_rad) * math.sin(lat2_rad) - \
math.sin(lat1_rad) * math.cos(lat2_rad) * math.cos(lon2_rad - lon1_rad)
brng = math.atan2(y, x) * 180 / math.pi
return float((brng + 360.0) % 360.0)
2.根据起始点经纬度、距离、方位角计算目标点经纬度
参考了这篇博客的计算方法:https://blog.csdn.net/sinat_32857543/article/details/107207553
def calc_situation(lon1, lat1, deg, dis):
arc = 6371.393*1000
lon2 = lon1 + dis*math.sin(deg)/(arc*math.cos(lat1)*2*math.pi/360)
lat2 = lat1 + dis*math.cos(deg)/(arc*2*math.pi/360)
return lon2,lat2
注意:距离dis的单位是米,deg是方位角,需要化为弧度。lon1,lat1是起始点经纬度信息。