22
33import pandas as pd
44import requests
5+ import numpy as np
56
67URL = 'https://power.larc.nasa.gov/api/temporal/hourly/point'
78
9+ DEFAULT_PARAMETERS = [
10+ 'ALLSKY_SFC_SW_DNI' , 'ALLSKY_SFC_SW_DIFF' , 'ALLSKY_SFC_SW_DWN' ,
11+ 'T2M' , 'WS10M'
12+ ]
13+
814VARIABLE_MAP = {
915 'ALLSKY_SFC_SW_DWN' : 'ghi' ,
1016 'ALLSKY_SFC_SW_DIFF' : 'dhi' ,
1117 'ALLSKY_SFC_SW_DNI' : 'dni' ,
1218 'CLRSKY_SFC_SW_DWN' : 'ghi_clear' ,
1319 'T2M' : 'temp_air' ,
1420 'WS2M' : 'wind_speed_2m' ,
15- 'WS10M' : 'wind_speed_10m ' ,
21+ 'WS10M' : 'wind_speed ' ,
1622}
1723
1824
19- def get_nasa_power (latitude , longitude , start , end , parameters ,
20- community = 're' , elevation = None ,
21- wind_height = None , wind_surface = None , map_variables = True ):
25+ def get_nasa_power (latitude , longitude , start , end ,
26+ parameters = DEFAULT_PARAMETERS , community = 're' , url = URL ,
27+ elevation = None , wind_height = None , wind_surface = None ,
28+ map_variables = True ):
2229 """
2330 Retrieve irradiance and weather data from NASA POWER.
2431
@@ -37,15 +44,14 @@ def get_nasa_power(latitude, longitude, start, end, parameters,
3744 end: datetime like
3845 Last timestamp of the requested period.
3946 parameters: str, list
40- List of parameters. Some common parameters are mentioned below; for the
41- full list see [3]_:
47+ List of parameters. The default parameters are mentioned below; for the
48+ full list see [3]_. Note that the pvlib naming conventions can also be
49+ used.
4250
4351 * ``ALLSKY_SFC_SW_DWN``: Global Horizontal Irradiance (GHI) [Wm⁻²]
4452 * ``ALLSKY_SFC_SW_DIFF``: Diffuse Horizontal Irradiance (DHI) [Wm⁻²]
4553 * ``ALLSKY_SFC_SW_DNI``: Direct Normal Irradiance (DNI) [Wm⁻²]
46- * ``CLRSKY_SFC_SW_DWN``: Clear-sky GHI [Wm⁻²]
4754 * ``T2M``: Air temperature at 2 m [C]
48- * ``WS2M``: Wind speed at 2 m [m/s]
4955 * ``WS10M``: Wind speed at 10 m [m/s]
5056
5157 community: str, default: ``'re'``
@@ -119,7 +125,7 @@ def get_nasa_power(latitude, longitude, start, end, parameters,
119125 'wind-surface' : wind_surface ,
120126 }
121127
122- response = requests .get (URL , params = params )
128+ response = requests .get (url , params = params )
123129 if not response .ok :
124130 # response.raise_for_status() does not give a useful error message
125131 raise requests .HTTPError (response .json ())
@@ -129,6 +135,7 @@ def get_nasa_power(latitude, longitude, start, end, parameters,
129135 hourly_data = data ['properties' ]['parameter' ]
130136 df = pd .DataFrame (hourly_data )
131137 df .index = pd .to_datetime (df .index , format = '%Y%m%d%H' ).tz_localize ('UTC' )
138+ df = df .replace (- 999 , np .nan )
132139
133140 # Create metadata dictionary
134141 meta = data ['header' ]
0 commit comments