Используя формулу Хаверсинуса для вычисления расстояния по большому кругу, я использую следующий код для вычисления координат любой точки между известным начальным местоположением (с широтой 1 / долгота) и известным пунктом назначения (с широтой 2 / долгота 2):
Вот полный код:
from math import radians, sin, cos, acos, atan2, sqrt, pi
#enter the following numbers in the corresponding input fields:
#lat1 = starting latitude = 33.95
#lon1 = starting longitude = -118.40
#lat2 = destination latitude = 40.6333
#lon2= destination longitude = -73.7833
lat1 = radians(float(input("Starting latitude: ")))
lon1 = radians(float(input("Starting longitude: ")))
lat2 = radians(float(input("Destination latitude: ")))
lon2 = radians(float(input("Destination longitude: ")))
#Haversine formula to calculate the distance, in radians, between starting point and destination:
d = ((6371.01 * acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(lon1 - lon2)))/1.852)/(180*60/pi)
import numpy as np
x = np.arange(0, 1, 0.2)
for f in x:
A=sin((1-f)*d)/sin(d)
B=sin(f*d)/sin(d)
x = A*cos(lat1)*cos(lon1) + B*cos(lat2)*cos(lon2)
y = A*cos(lat1)*sin(lon1) + B*cos(lat2)*sin(lon2)
z = A*sin(lat1) + B*sin(lat2)
lat_rad=atan2(z,sqrt(x**2+y**2))
lon_rad=atan2(y,x)
lat_deg = lat_rad*180/pi
lon_deg = lon_rad*180/pi
print('%.2f' %f, '%.4f' %lat_deg, '%.4f' %lon_deg)
Я использую функцию np.arange()
для дробной итерации f между 0 (начальная точка) и 1 (конечная точка).
Результат для l oop:
0.00 33.9500 -118.4000
0.20 36.6040 -110.2685
0.40 38.6695 -101.6259
0.60 40.0658 -92.5570
0.80 40.7311 -83.2103
Где первое число - это дробь (f); второе число - это широта (lat_deg), а третье число - долгота (lon_deg).
Мой вопрос: как мне преобразовать вывод моего кода в кадр данных pandas (3x6) с данные расположены в 3 столбца с заголовком Fraction (col1), Latitude (col2), Longitude (col3)?
Как только вывод находится в кадре данных pandas, я могу легко записать данные в CSV файл.