考虑到附近的山脉(使用Python),如何计算给定日期和位置的日照时数?

考虑到附近的山脉(使用Python),如何计算给定日期和位置的日照时数?,python,landscape,topography,Python,Landscape,Topography,我的目标是在晴朗天空的假设下,使用Python计算给定一天中太阳照射到给定位置的小时数。这个问题源于寻找房地产。我想知道我在某些房产上实际能得到多少阳光,这样我就不必依赖房地产销售人员的陈述,也可以仅根据地址判断房产。我在附近有几座山的地区搜索,这应该在计算中考虑。 我想采用的方法如下: 在一整年(2020年1月1日至2020年12月31日)内,以给定的时间分辨率(例如分钟)计算定义位置的太阳高度和方位角 从位置上查看附近障碍物的角度高度,得出方位角和高度角的值对。这可以是树木、建筑物或已经提到

我的目标是在晴朗天空的假设下,使用Python计算给定一天中太阳照射到给定位置的小时数。这个问题源于寻找房地产。我想知道我在某些房产上实际能得到多少阳光,这样我就不必依赖房地产销售人员的陈述,也可以仅根据地址判断房产。我在附近有几座山的地区搜索,这应该在计算中考虑。 我想采用的方法如下:

  • 在一整年(2020年1月1日至2020年12月31日)内,以给定的时间分辨率(例如分钟)计算定义位置的太阳高度和方位角
  • 从位置上查看附近障碍物的角度高度,得出方位角和高度角的值对。这可以是树木、建筑物或已经提到的山脉。让我们假设树木和建筑物可以忽略不计,主要是山脉带走了太阳
  • 对于每一天,在给定的分辨率下检查每次,在太阳的方位位置,太阳的高度角是否高于障碍物的高度角。一年中的每一天,我都能知道太阳在什么时候可见
    步骤1和3很简单。对于步骤1,我可以使用Python模块pysolar作为示例。第二步更复杂。如果我站在一个延伸到地平线的完美平面上,所有方位角的障碍物高度都是0。如果附近有一座山,我需要知道从位置上看这座山的形状。不幸的是,我甚至不知道从哪里开始解决步骤2,我也不知道如何命名这个问题,也就是说,我不知道如何用谷歌搜索解决方案。在最好的情况下,将有一个Python模块为我完成计算,例如,通过连接基于OpenStreetMap或其他服务的地形数据。如果这样一个模块不存在,我将不得不手动编程访问地形数据,然后进行某种类型的网格搜索-在精细网格(可能是球面坐标)中划分景观,计算从位置上看到的网格点的高度和方位角(考虑地球曲率和该位置的海拔)并找到给定方位角的最大值。有更简单的方法吗?是否有Python模块可以做到这一点?

    如果您有高度图,并且我确信有可用的高度图,那么第2步并不难

    从您的位置以360度均匀分布的方式投射
    n
    射线,并沿该射线从您的起始位置每隔
    delta
    米访问所有地图位置。如果
    d
    是一个点到您的距离,
    h
    是它的高度,
    h0
    是您在高度地图上的高度保持最大值沿着路径的e/e
    (h-h0)/d
    (如果某物距离两倍远,则需要两倍高才能投射相同长度的阴影)

    你几乎可以忽略地球的曲率——它对阳光遮挡的影响可以忽略不计