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