骑行起点经纬度 + 骑行终点经纬度 => 骑行的位移
新增“distance”列,通过计算骑行起点和终点的经纬度得到骑行的位移,单位为千米。
geodistance()封装的 是通过两点经纬度求两点直线距离的数学公式。对背后公式的推导过程和数学原理
感兴趣的可以戳 https://blog.csdn.net/sunjianqiang12345/article/details/60393437 了解。
摩拜单车骑行轨迹经纬度 => 骑行的路径
新增“adderLength”列,通过计算“track”列数据得到骑行路径。
把骑行轨迹字符串按“#”分隔符分隔成列表,得到骑行轨迹的经纬度信息列表
通过不断两两轮询该骑行轨迹列表,每一次按顺序取出两个列表元素(前轨迹采样点的经纬度和后轨迹
采样点的经纬度)按“,”分隔符分隔,得到四个值(前轨迹 采样点的经度、前轨迹采样点的纬度、后轨迹
采样点的经度、后轨迹采样点 的 纬度),组合成一个item字典传入给geodistance()计算出两点的位移,再
把每一小段每一小段的位移累加起来得到骑行的路径。
def geodistance(item):
lng1_r, lat1_r, lng2_r, lat2_r = map(radians, [item["start_location_x"],
item["start_location_y"], item["end_location_x"], item["end_location_y,"]]) # 经纬度转
换成弧度
dlon = lng1_r - lng2_r
dlat = lat1_r - lat2_r
dis = sin(dlat/2)**2 + cos(lat1_r) * cos(lat2_r) * sin(dlon/2)**2
distance = 2 * asin(sqrt(dis)) * 6371 * 1000 # 地球平均半径为6371km
distance = round(distance/1000,3)
return distance
#data按行应用geodistance()得到distance列的数值
data["distance"] = data.apply(geodistance,axis=1)
#通过摩拜单车的踪迹获取每次交易骑行的路径
def geoaadderLength(item):
track_list = item["track"].split("#")
adderLength_item = {}
adderLength = 0
for i in range(len(track_list)-1):
start_loc = track_list[i].split(",")
end_loc = track_list[i+1].split(",")
adderLength_item["start_location_x"],adderLength_item["start_location_y"] =
float(start_loc[0]),float(start_loc[1])
adderLength_item["end_location_x"],adderLength_item["end_location_y"] =
float(end_loc[0]),float(end_loc[1])