Я хотел бы, в частности, определить данные азимута и высоты для любого заданного местоположения на поверхности земли относительно другого места на поверхности земли (для моих целей последним будет Лондон, Великобритания).
Данные и API легко доступны для некоторых небесных объектов, но мне не удалось найти нужные данные.
Может ли кто-нибудь просветить меня относительно метода расчета таких данных?
Большое спасибо.
Это можно сделать с помощью Python-пакета Skyfield довольно легко.
Вот оболочка скрипта; Я использовал некоторые словари для хранения данных, вы можете сделать что-то еще. Я сохранил много вкусностей, но распечатал только азимут, высоту и расстояние в километрах.
По умолчанию метод Скайфилда .altaz()
рассчитывает атмосферную рефракцию для всего, что выше -1 градуса ( геометрически на 1 градус ниже горизонта ). Вы можете отключить это, заменив его на .altaz(pressure_mbar=0)
.
ВЫХОД:
place altitude azimuth distance (km)
Caracas -33.67 258.26 7075.28
Edinburgh -2.39 338.98 533.65
Canberra -76.25 64.93 12377.25
Вот скрипт Python:
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Topos, Loader
load = Loader('~/Documents/fishing/SkyData') # avoids multiple copies of large files
data = load('de421.bsp')
ts = load.timescale()
Earth = data['earth']
London = Earth + Topos(latitude_degrees = 51.51,
longitude_degrees = -0.1275,
elevation_m = 11.)
places = {'Caracas':(10.48, -66.90, 900), 'Edinburgh':(55.95, -3.19, 47.),
'Canberra':(-35.29, 149.13, 578.)}
now = ts.now()
answer_dict = dict()
for name, (lat, lon, elev) in places.items():
place = Earth + Topos(latitude_degrees = lat,
longitude_degrees = lon,
elevation_m = elev)
vector_km = place.at(now).position.km - London.at(now).position.km
distance_km = np.sqrt((vector_km**2).sum())
dic = dict()
answer_dict[name] = dic
dic['lat'] = lat
dic['lon'] = lon
dic['elev'] = elev
dic['vector_km'] = vector_km
dic['vector_distance_km'] = distance_km
alt, az, d = London.at(now).observe(place).apparent().altaz()
dic['altaz'] = alt._degrees, az._degrees
dic['dist'] = d.km
for name, dic in answer_dict.items():
print(name, dic['altaz'], dic['dist'])
Тим Аллан
ооо