python - 根据纬度和日出时间计算经度?

标签 python math astronomy xephem

我正在计算当前太阳高度当前为 ~0.0 的位置的经度。这是通过在纬度范围内迭代,计算日出时间 (0.0, latitude) 然后通过将时差(小数小时)乘以 15(度数)来计算经度来完成的太阳在地球表面“移动”)。

当从计算的坐标元组计算日出时间时,最低纬度与最高纬度显示几分钟的时间差。如何解释这种差异?

在:

points=walk_the_earth()

输出:

[-66.53673944994807, -65.0] 2012-08-21 12:07:04.748893
[-67.13184367865324, -64.5] 2012-08-21 12:07:05.666852
[-67.70314011722803, -64.0] 2012-08-21 12:07:06.541521
...
[-119.24775995314121, 64.0] 2012-08-21 12:08:45.536679
[-119.93103107437491, 64.5] 2012-08-21 12:08:47.770382
[-120.64480075612664, 65.0] 2012-08-21 12:08:50.152224

(时间为 UTC)。代码在 ~second 下运行。

造成这种差异的原因是什么?

代码

import math
import xephem

def longitude_from_latitude(lat):
    """
    Calculate the longitude at which Sun altitude is ~0.0.

    Args:
        lat: A float indicating the latitude to calculate longitude
            for.

    Returns:
        float
    """
    now = xephem.julianday.now()
    meridian = xephem.Observer(now.midnight.dublin, 0.0, lat)
    sun = xephem.Sun.fromobserver(meridian)
    transit = sun.transit(-1)
    # Calculate time difference between sun position and local time.
    delta_t = ((now - transit['rs_risetm']) * 24.0) * 15.0
    return delta_t


def walk_the_earth(resolution=0.5, minlat=-65.0, maxlat=65.0):
    """
    Calculate the coordinate at which Sun altitude is ~0.0 for
    a given range of latitudes.

    Args:
        resolution: A float indicating the number of points to
            return for the specified range of latitudes. 1.0 means
            that 1 longitude will be calculated for each real
            latitude, 0.5 means 2, etc.
        minlat: A float indicating the lowest latitude to start
            calculating.
        maxlat: A float indicating the highest latitude to 
            calculate up to.

    Returns:   
        list of longitude, latitude, xephem.Sun tuples.
    """
    now = xephem.julianday.now()
    lat = minlat
    points = []
    while True:
        if lat > maxlat:
            break
        lng = longitude_from_latitude(lat)
        # Create an Observer for longitude and latitude
        obs = xephem.Observer(now.dublin, lng, lat)
        sun = xephem.Sun.fromobserver(obs)
        points.append([lng, lat, sun])
        # sun.transit() calculates the rising, transit and setting times
        # of the sun at Observers location. The -1 argument specifies
        # that we consider sunrise to occur when the upper limb touches
        # the horizon (0 indicates center, 1 indicates lower limb).
        print points[-1], sun.transit(-1)['rs_risetm'].datetime()
        lat += resolution
    return points

最佳答案

我在 NOAA's solar calculator 检查了您列表中极端 N 点和 S 点的日出时间.输入纬度/经度和今天的日期给出的日出时间与您发布的表格中的相同,但计算器只给出最接近分钟的日出时间。

不过,如果您的问题是我的代码有什么问题?,答案很可能是什么都没有

但是,如果您的问题确实是关于日出时间相对于位置和日期的变化,我有什么不理解的?那么您的问题对于 SO 来说就严重偏离主题了。

关于python - 根据纬度和日出时间计算经度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054613/

相关文章:

python - 在 Airflow 中的后续任务中获取先前任务 ID 的名称?

python - 使用 getattr 获取包含在描述符中的方法

algorithm - 线相交横向

python - 在 Python 中比较 2 个字符串的最有效方法是什么

python - 如何在 emacs 终端中启用 `flymake-display-err-menu-for-current-line`?

C# 数学问题

python - 两个整数在某些基础上是否相等?

python - 如何从图像中过滤特定的图像坐标

python - 如何使用 PyEphem 计算经度

python - 将一组 x,y 点匹配到另一个已缩放、旋转、平移且缺少元素的集合