solartime R包computeSunPosition计算悉尼太阳位置输出结果异常问题
问题排查与修复方案
1. 核心问题:时区设置错误
你当前传入的DateTime字段被强制标记为UTC时区,但实际时间为澳大利亚悉尼的当地时间。你所在的经度对应东十区,比UTC早10小时,错误的时区标记会导致函数计算的太阳时完全偏离实际值,是方位角曲线异常、达不到0的主要原因。
修复代码如下:
latdeg<--33.611627 longdeg<-150.745147 NewDat<-as.data.frame(C3$DateTime) colnames(NewDat)<-c("DateTime") # 修正DateTime时区为悉尼当地时区 NewDat$DateTime <- as.POSIXct(NewDat$DateTime, tz = "Australia/Sydney") # 重新计算太阳位置 sunposition<-as.data.frame(computeSunPosition(timestamp = NewDat$DateTime,latDeg = latdeg,longDeg = longdeg)) sunposition$DateTime<-NewDat$DateTime
2. 方位角单位与定义适配
computeSunPosition返回的azimuth默认单位为弧度,范围为[-π, π],如果你需要使用0~360°的角度值,可以增加转换代码:
# 弧度转角度,负值转换为0~360°范围 sunposition$azimuth_deg <- sunposition$azimuth * 180 / pi sunposition$azimuth_deg <- ifelse(sunposition$azimuth_deg < 0, sunposition$azimuth_deg + 360, sunposition$azimuth_deg)
该包默认方位角定义为正北为0、顺时针递增,由于你处于南半球南回归线以南,全年正午太阳都在正北天区,修正时区后正午(悉尼当地时间12点左右)的方位角会接近0/360°,时间-方位角曲线也会变为平滑的U型。
3. 结果验证
修正后可以校验正午数据:4月太阳赤纬接近0,当地正午太阳高度应该在56°左右,和计算值匹配即可确认结果正确。
内容的提问来源于stack exchange,提问作者ChelseaRae
相关产品推荐
相关产品推荐

