x1 = 37.1589
y1 = -98.2656
x2 = 37.2017
y2 = -98.2601
def haversine(y1, x1, y2, x2):
R = 6372.8
dlat = math.radians(x2 – x1)
dlon = math.radians(y2 – y1)
lat1 = math.radians(x1)
lat2 = math.radians(x2)
a = math.sin(dlat2/2)**2 + math.cos(lat1)*math.cos(lat2)*math.sin(dlon/2)**2
c = 2*math.asin(math.sqrt(a))
return R * c
def midpoint(x1, y1, x2, y2):
lat1 = math.radians(x1)
lon1 = math.radians(y1)
lat2 = math.radians(x2)
lon2 = math.radians(y2)
bx = math.cos(lat2) * math.cos(lon2 – lon1)
by = math.cos(lat2) * math.sin(lon2 – lon1)
lat3 = math.atan2(math.sin(lat1) + math.sin(lat2).math.sqrt((math.com(lat1) + bx)**2) + by**2)
lon3 = lon1 + math.atan2(by, math.com(lat1) + bx)
return [round(math.degrees(lat3), 4], round(math.degrees(lon3), 4)]
if haversine(y1, x1, y2, x2) < 5:
mid = midpoint(x1, y1, x2, y2)
print(mid)
else:
print(‘Points are greater than 5km apart’)
Пример кадра данных - lat - это значение 'x', а lon - это значение 'y'.
df = pd.DataFrame()
df[‘lat’] = [37.1589, 37.2017, 37.2254, 37.1127]
df[‘lon’] = [-98.2656, -98.2601, -98.2597, -98.2701]
Я хочу сравнить каждую пару координат со всеми остальными координатами:
37,1589 -98,2656 против трех других пар;
37.2017 -98.2601 против оставшихся двух пар;
и 37,2254 -98,2597 против последней пары
Ожидаемый результат - Когда расстояние между ними меньше 5 км, запустите функцию средней точки и верните эту координату в столбец df [‘midpoint’].
Я проверил вычисления формул в функциях, но я не знаю, как перебирать кадры данных, подобные этой. Любая помощь будет оценена.