Git Product home page Git Product logo

pysunnoaa's Introduction

pysunNOAA

Python implementation of NOAA's Solar Position Calculators

NOAA has the calculation details at their website at Solar Calculation Details

pysunNOAA is based on the spreadsheet NOAA_Solar_Calculations_day.xls . All the calculation cells in row 2 of the spreadsheet are implemented in pysunNOAA. This is a work in progress. But it is fully usable at this point

Sun Position

Here is what it can do:

import datetime
from pysunnoaa import noaa

latitude = 40 # Latitude (+ to N)
longitude = -105 # Longitude (+ to E)
timezone = -6 # Time Zone (+ to E)
thedatetime = datetime.datetime(2010, 6, 21, 9, 54)

altitude, azimuth = noaa.sunposition(
latitude, longitude, timezone, thedatetime, atm_corr=True
)

print(f"{altitude=}, {azimuth=}")

>> altitude=47.36178497432497, azimuth=98.30691558695895

The above calculation is corrected for atmospheric diffraction. We can also do the calculation without the correction for atmospheric diffraction by setting atm_corr=False:

altitude, azimuth = noaa.sunposition(
    latitude, longitude, timezone, thedatetime, atm_corr=False
)
print(f"{altitude=}, {azimuth=}")

>> altitude=47.346932081680364, azimuth=98.30691558695895

Many Sun Positions

Let us take a look at generating multiple sun positions for a time series. First we have to generate the time series:

thedates = noaa.datetimerange(
    datetime.datetime(2024, 6, 21, 10), # start
    datetime.datetime(2024, 6, 21, 11), # stop
    minutes=10 # step
) # The arguments are similar to python's range.
  # It returns a generator
for thedate in thedates:
    print(thedate)

2024-06-21 10:00:00
2024-06-21 10:10:00
2024-06-21 10:20:00
2024-06-21 10:30:00
2024-06-21 10:40:00
2024-06-21 10:50:00

So let us generate the sun positions for this time series:

thedates = noaa.datetimerange(
    datetime.datetime(2024, 6, 21, 10),
    datetime.datetime(2024, 6, 21, 11),
    minutes=10
)

positions = noaa.sunpositions(latitude, longitude, timezone, thedates, atm_corr=False)
for altitude, azimuth in positions:
    print(f"{altitude=}, {azimuth=}")

altitude=48.44972994443188, azimuth=99.43756106034147
altitude=50.33276597510335, azimuth=101.44934328356527
altitude=52.20206053830976, azimuth=103.57347468902549
altitude=54.05415607848319, azimuth=105.82830623146941
altitude=55.88497413825557, azimuth=108.23537482765607
altitude=57.689656999063025, azimuth=110.82001062044083

Let us print this again:

for altitude, azimuth in positions:
    print(f"{altitude=}, {azimuth=}")

WHAT !!! Why did it not print anything ??

Both noaa.datetimerange and noaa.sunpositions are generators. Once you loop through the generator, the values are exhausted (or emptied). To get the values again you will need to call the functions again:

thedates = noaa.datetimerange(
    datetime.datetime(2024, 6, 21, 10),
    datetime.datetime(2024, 6, 21, 11),
    minutes=10
)

positions = noaa.sunpositions(latitude, longitude, timezone, thedates, atm_corr=False)
for altitude, azimuth in positions:
    print(f"{altitude=}, {azimuth=}")

altitude=48.44972994443188, azimuth=99.43756106034147
altitude=50.33276597510335, azimuth=101.44934328356527
altitude=52.20206053830976, azimuth=103.57347468902549
altitude=54.05415607848319, azimuth=105.82830623146941
altitude=55.88497413825557, azimuth=108.23537482765607
altitude=57.689656999063025, azimuth=110.82001062044083

Sunrise and Sunset

Another useful thing is to be able to calculate sunset and sunrise. Here we go:

sunrise = noaa.sunrise(40, -105, -6, datetime.datetime(2010, 6, 21))
sunset = noaa.sunset(40, -105, -6, datetime.datetime(2010, 6, 21))
print(f"{sunrise=}")
print(f"{sunset=}")

>> sunrise=datetime.datetime(2010, 6, 21, 5, 31, 15, 842680)
>> sunset=datetime.datetime(2010, 6, 21, 20, 32, 8, 805539)

That's all for now.

pysunnoaa's People

Contributors

pyenergyplus avatar santoshphilip avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.