PCSE_NASA 天气数据获取(5.5新版本)
之前有个河南农大的哥们写了一个,但是现在NASA接口更新了,然后我随便改了一下好像是能用了,就是作者里面又加了几条数据【平均温度、经纬度、海拔】总辐射量单位发生了变化,作者把单位从千焦变成了焦,不知道再5.5的版本里面是否有对应修改
# 获取数据的基础函数
import pandas as pd
import numpy as np
import requests
import datetime as dt
from math import exp
import json
import time
# 1.公式单位转换
MJ_to_J = lambda x: x * 1e6
mm_to_cm = lambda x: x / 10.
tdew_to_hpa = lambda x: ea_from_tdew(x) * 10.
to_date = lambda d: d.date()
# 2.接口调用设定经纬与时间
def getnasadata(latitude, longitude, start_date, end_date):
server = "https://power.larc.nasa.gov/api/temporal/daily/point"
# Variable names in POWER data
power_variables = ["TOA_SW_DWN", "ALLSKY_SFC_SW_DWN", "T2M", "T2M_MIN",
"T2M_MAX", "T2MDEW", "WS2M", "PRECTOTCORR"]
payload = {
"request": "execute",
"parameters": ",".join(power_variables),
"latitude": latitude,
"longitude": longitude,
"start": start_date.strftime("%Y%m%d"),
"end": end_date.strftime("%Y%m%d"),
"community": "AG",
"format": "JSON",
"user": "anonymous"
}
req = requests.get(server, params=payload)
return req.json() # 或者 req.json()
# 3.处理并返回气象记录
def _process_POWER_records(powerdata):
"""Process the meteorological records returned by NASA POWER
"""
fill_value = float(powerdata["header"]["fill_value"])
power_variables = ["TOA_SW_DWN", "ALLSKY_SFC_SW_DWN", "T2M", "T2M_MIN",
"T2M_MAX", "T2MDEW", "WS2M", "PRECTOTCORR"]
df_power = {
}
for varname in power_variables:
s = pd.Series(powerdata["properties"]["parameter"][varname])
s[s == fill_value] = np.NaN
df_power[varname] = s
df_power = pd.DataFrame(df_power)
df_power["DAY"] = pd.to_datetime(df_power.index, format="%Y%m%d")
# find all rows with one or