From e33bca52d26faa836a4db7436e85eb3a0a08adff Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 19 八月 2025 17:26:02 +0800
Subject: [PATCH] 1、增加查询所有作物昨日蒸腾量功能; 2、增加查询一个作物一段时间内容所有蒸腾量功能。

---
 pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java |  149 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 149 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java
new file mode 100644
index 0000000..08defd7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java
@@ -0,0 +1,149 @@
+package com.dy.pipIrrModel.modelCalculate;
+
+import net.objecthunter.exp4j.Expression;
+import net.objecthunter.exp4j.ExpressionBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/18 14:51
+ * @Description 鍝堟牸閲屽か鏂紙Hargreaves锛夊叕寮� 璁$畻浣滅墿瀹為檯钂告暎閲忥紙mm/day锛�
+ */
+public class Hargreaves {
+
+    /**
+     * 璁$畻寮у害
+     * 寮у害=瑙掑害脳 蟺/180
+     * @param lat 鍦扮悊绾害
+     * @return
+     */
+    public static Double rad(Double lat) {
+        Expression expression = new ExpressionBuilder("x * pi / 180")
+                .variables("x")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", lat);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 澶槼纾佸亸瑙�
+     * @param dayIndex 涓哄勾鍐呮煇澶╃殑鏃ュ簭鏁帮紙姣斿1鏈�1鏃ヤ负1锛�12鏈�31鏃ヤ负365鎴�366锛�
+     * @return
+     */
+    public static Double sunMagnetismAngular(Integer dayIndex){
+        Expression expression = new ExpressionBuilder("0.409 * sin(((2 * pi) / 365) * x - 1.39)")
+                .variables("x")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", dayIndex);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 鏃ュ湴闂寸浉瀵硅窛绂荤殑鍊掓暟
+     * @param dayIndex 涓哄勾鍐呮煇澶╃殑鏃ュ簭鏁帮紙姣斿1鏈�1鏃ヤ负1锛�12鏈�31鏃ヤ负365鎴�366锛�
+     * @return
+     */
+    public static Double sunEarthDistance(Integer dayIndex){
+        Expression expression = new ExpressionBuilder("1 + (0.033 * cos(((2 * pi) / 365) * x))")
+                .variables("x")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", dayIndex);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+
+    /**
+     * 澶槼鏃惰
+     * 0.409 * sin(2 * pi / 365 * x - 1.39)
+     * @param fai 鍦扮悊寮у害
+     * @param sunMagnetismAngular 澶槼纾佸亸瑙�
+     * @return
+     */
+    public static Double sunTimeAngular(Double fai, Double sunMagnetismAngular){
+        Expression expression = new ExpressionBuilder("acos(-tan(x) * tan(y))")
+                .variables("x", "y")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", fai);
+        expression.setVariable("y", sunMagnetismAngular);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 璁$畻澶╅《杈愬皠
+     * @param sunEarthDistance 鏃ュ湴闂寸浉瀵硅窛绂荤殑鍊掓暟
+     * @param sunTimeAngular 澶槼鏃跺亸瑙�
+     * @param fai 鍦扮悊寮у害
+     * @param sunMagnetismAngular 澶槼纾佸亸瑙�
+     * @return
+     */
+    public static Double zenithRadiation(Double sunEarthDistance,
+                                         Double sunTimeAngular,
+                                         Double fai,
+                                         Double sunMagnetismAngular){
+        Expression expression = new ExpressionBuilder("((24 * 60) / pi) * 0.082 * a * ((b * sin(c) * sin(d)) + (cos(c) * cos(d) * sin(b)))")
+                .variables("a", "b", "c", "d")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("a", sunEarthDistance);
+        expression.setVariable("b", sunTimeAngular);
+        expression.setVariable("c", fai);
+        expression.setVariable("d", sunMagnetismAngular);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 鏍奸噷澶柉锛圚argreaves锛夊叕寮忚绠椾綔鐗╄捀鏁i噺锛坢m/day锛�
+     * @param kc 浣滅墿绯绘暟
+     * @param maxT 涓�鏃ュ唴鏈�楂樻俯搴�
+     * @param maxT 涓�鏃ュ唴鏈�楂樻俯搴�
+     * @param zenithRadiation 澶╅《杈愬皠
+     * @return
+     */
+    public static Double ET0(Double kc, Double maxT, Double minT, Double zenithRadiation){
+        Expression expression = new ExpressionBuilder("x * (0.0023 * (((a + b) / 2) + 17.8) * ((a + b)^(1/2)) * c * 0.408)")
+                .variables("x", "a", "b", "c")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", kc);
+        expression.setVariable("a", maxT);
+        expression.setVariable("b", minT);
+        expression.setVariable("c", zenithRadiation);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    public static void main(String[] args) {
+        Double lat = 38.561976140977116 ;
+        Integer dayIndex = 180 ;
+        Double kc = 0.41 ;//浣滅墿绯绘暟
+        Double maxT = 40.1 ;//涓�鏃ュ唴鏈�楂樻俯搴�
+        Double minT = 40.1 ;//涓�鏃ュ唴鏈�浣庢俯搴�
+
+        Double fai = rad(lat);
+        System.out.println(fai);
+
+        Double sunMagnetismAngular = sunMagnetismAngular(dayIndex);
+        System.out.println(sunMagnetismAngular);
+
+        Double sunEarthDistance = sunEarthDistance(dayIndex);
+        System.out.println(sunEarthDistance);
+
+        Double sunTimeAngular = sunTimeAngular(fai, sunMagnetismAngular);
+        System.out.println(sunTimeAngular);
+
+        Double zenithRadiation = zenithRadiation(sunEarthDistance, sunTimeAngular, fai, sunMagnetismAngular);
+        System.out.println(zenithRadiation);
+
+        Double et0 = ET0(kc, maxT, minT, zenithRadiation);
+        System.out.println(et0);
+    }
+
+}

--
Gitblit v1.8.0