8 个版本 (4 个破坏性更新)
0.5.1 | 2024年2月11日 |
---|---|
0.5.0 | 2024年2月11日 |
0.4.0 | 2023年6月11日 |
0.3.1 | 2023年4月18日 |
0.1.1 | 2017年11月19日 |
#36 在 日期和时间
3,344 次每月下载
用于 2 crate
125KB
361 行
太阳位置算法(SPA)
太阳位置算法模块(SPA)用于 Rust 计算特定地理位置和时间(UTC)的日出日落以及方位角和天顶角;例如用于太阳能板定位或汽车。
计算日出日落
以下函数用于计算在地理坐标 lat/lon
和时间 t
(UTC)的日出日落。
该算法已从http://lexikon.astronomie.info/zeitgleichung/neu.html 移植到 Rust。其精度在几分钟之内。
参数
utc
- UTC 时间点(DateTime)lat
- WGS84 系统中的纬度,范围为 -90.0 到 90.0。lon
- WGS84 系统中的经度,范围为 -180.0 到 180.0
该函数返回类型为 SunriseAndSet
的结果。
pub enum SunriseAndSet {
PolarNight,
PolarDay,
Daylight(DateTime<Utc>, DateTime<Utc>),
}
地球北极圈和南极圈附近地区会出现极夜现象,即夜间持续超过24小时。这仅发生在极圈内。相反的现象,即极昼或午夜太阳,发生在太阳持续高于地平线超过24小时。这里的“夜间”是指太阳中心位于自由地平线下方的时刻,用 SunriseAndSet::PolarNight
或 SunriseAndSet::PolarDay
变体表示。
由于大气弯曲了太阳光线,因此极昼比极夜长,受极夜影响的区域略小于午夜太阳的区域。极圈位于这两个区域之间,大约在66.5度的纬度上。该函数使用0.833333度的海拔高度近似大气弯曲。
变体 SunriseAndSet::Daylight(DateTime<Utc>, DateTime<Utc>)
表示日出和日落时间。
如果纬度或经度不在有效范围内,函数将返回 Result::Err(BadParam)
。
pub fn sunrise_and_set<F: FloatOps>(utc: DateTime<Utc>, lat: f64, lon: f64) -> Result<SunriseAndSet, SpaError> {..}
计算太阳位置
以下函数用于计算在时间 t
和地理位置 lat/lon
时的太阳位置(方位角和仰角)
该算法已从 http://www.psa.es/sdg/sunpos.htm 转移到 Rust。该算法对于1999年和之后的年份,精度在0.5分弧度以内。
参数
utc
- UTC 时间点(DateTime)lat
- WGS84 系统中的纬度,范围为 -90.0 到 90.0。lon
- WGS84 系统中的经度,范围为 -180.0 到 180.0
该函数返回类型为 SolarPos
的结果。
pub struct SolarPos {
// horizontal angle measured clockwise from a north base line or meridian
pub azimuth: f64,
// the angle between the zenith and the centre of the sun's disc
pub zenith_angle: f64,
}
如果纬度或经度不在有效范围内,函数将返回 Result::Err(BadParam)
。
pub fn solar_position<F: FloatOps>(utc: DateTime<Utc>, lat: f64, lon: f64) -> Result<SolarPos, SpaError> {..}
平台特定的浮点运算
SPA 库通过 FloatOps
特性同时支持 std
和 no_std
目标构建。
pub trait FloatOps {
fn sin(x: f64) -> f64;
fn cos(x: f64) -> f64;
fn tan(x: f64) -> f64;
fn asin(x: f64) -> f64;
fn acos(x: f64) -> f64;
fn atan(x: f64) -> f64;
fn atan2(y: f64, x: f64) -> f64;
fn trunc(x: f64) -> f64;
}
- 在
std
目标构建(默认)中,提供了内置实现StdFloatOps
,以便您方便使用,受std
功能的限制。
[dependencies]
spa = "^0.5"
- 在
no_std
目标构建中,您需要提供自己的浮点运算实现,例如使用 libm。必须在依赖声明中指定default-features = false
选项。
[dependencies]
spa = { version = "^0.5", default-features = false }
依赖项
~1–1.3MB
~21K SLoC