PyEphem: небесные координаты вдоль долготы 90 ° идентичны - PullRequest
0 голосов
/ 22 октября 2018

Я использую скрипт, который вычисляет небесные позиции относительно определенной точки на Земле по долготе и широте.Однако, когда я использовал 90 ° для долготы, я заметил, что результаты получаются идентичными.

Небесные местоположения относительно: 70 ° Долготы, Широты -50 и 50 соответственно

date            sun(ra)     sun(ra)
10/11/18 1:00   3.425910744 3.425889278
10/11/18 1:00   3.425916336 3.425894886

Небесные местоположения относительно: 90 ° Долготы, Широты -50 и 50 соответственно

date            sun(ra)     sun(ra)
10/11/18 1:00   3.425897035 3.425897035
10/11/18 1:00   3.425902615 3.425902615
10/11/18 1:01   3.425908196 3.425908196

Это, кажется, происходит для всех широт на 90 долготе.

Код ниже:

import numpy as np
import scipy as sp

import ephem
import scipy.constants
import datetime

celestial_masses = {
    'sun': 1.989e30,
    'mercury': 0.330e24,
    'venus': 4.870e24,
    'earth': 5.970e24,
    'moon': 0.073e24,
    'mars': 0.642e24,
    'jupiter': 1898e24,
    'saturn': 568e24,
    'uranus': 86.8e24,
    'neptune': 102e24,
    'pluto': 0.0146e24, }
celestials = {
    name: (eval('ephem.{}()'.format(name.title())), mass)
    for name, mass in celestial_masses.items() if name != 'earth'}
gg = sp.constants.gravitational_constant

observer = ephem.Observer()
# Revere, Massachusetts, USA
observer.lon = '-50'
observer.lat = '70'

start_datetime = datetime.datetime(2018, 10, 1, 1, 0, 0)
end_datetime = datetime.datetime(2018, 10, 30, 23, 0, 0)

values = 'ra', 'dec'
labels = ('date',) + tuple(
    '{}({})'.format(name, value)
    for name in celestials.keys()
    for value in values)
data = []
observer.date = start_datetime
delta_datetime = datetime.timedelta(minutes=5)
while (observer.date.datetime() < end_datetime):
    row = [observer.date]
    for name, (body, mass) in celestials.items():
        body.compute(observer)
        row.extend([
            body.ra, body.dec])
    data.append(row)
    observer.date = observer.date.datetime() + delta_datetime

    import csv

    filepath = 'celestial_bodies.csv'
    with open(filepath, 'w') as file_obj:
        csv_obj = csv.writer(file_obj)
        csv_obj.writerow(labels)
        for row in data:
            # : use default string conversion
            # csv_obj.writerow(row)

            # : a possible conversion to float for all but the `date`
            csv_obj.writerow([
                float(x) if i != labels.index('date') else x
                for i, x in enumerate(row)])
...