diff --git a/data/aspect3857.tif b/data/aspect3857.tif
new file mode 100644
index 0000000..b4ebb69
Binary files /dev/null and b/data/aspect3857.tif differ
diff --git a/data/slope3857.tif b/data/slope3857.tif
new file mode 100644
index 0000000..0ffe167
Binary files /dev/null and b/data/slope3857.tif differ
diff --git a/pom.xml b/pom.xml
index c5591cf..fbbdfee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -185,17 +185,6 @@
1.5.6
-
- com.cuit.mete
- geoserver
- 3.0-SNAPSHOT
-
-
-
- com.cuit.gis
- metegis
- 2.0-SNAPSHOT
-
@@ -240,6 +229,23 @@
commons-compress
1.27.1
+
+ com.cuit.gis
+ metegis
+ 3.0-SNAPSHOT
+
+
+ com.cuit.mete
+ musicutil
+ 2.0-SNAPSHOT
+
+
+
+ com.cuit.mete
+ geoserver
+ 3.0-SNAPSHOT
+
+
diff --git a/src/main/java/com/cuit/solarenergy/service/SolarenergyService.java b/src/main/java/com/cuit/solarenergy/service/SolarenergyService.java
new file mode 100644
index 0000000..0a8e9b9
--- /dev/null
+++ b/src/main/java/com/cuit/solarenergy/service/SolarenergyService.java
@@ -0,0 +1,174 @@
+package com.cuit.solarenergy.service;
+
+import com.cuit.gis.analysis.SAEnvironment;
+import com.cuit.gis.analysis.solarradiation.RasterSolarRadiationOperation;
+import com.cuit.gis.analysis.solarradiation.SolarRadiationSpatialAnalysis;
+import com.cuit.gis.exception.GeoTiffException;
+import com.cuit.gis.exception.SAException;
+import com.cuit.gis.projections.CoordinateUtil;
+import com.cuit.gis.raster.GeoTiff;
+import com.cuit.gis.raster.GridCoverageUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.geotools.coverage.grid.GridCoverage2D;
+import org.opengis.referencing.FactoryException;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.UUID;
+
+/**
+ * @author cuitg -- ZengwuWang
+ * @date 2024年11月26日 20:14
+ */
+@Slf4j
+@Service
+public class SolarenergyService {
+ /**
+ * 太阳辐射计算空间计算,包括:
+ * 指定本地时间的直接辐射 w / m-2
+ * LOCALTIME_DIRECT_SOLARRADIATION
+ * 指定本地时间的散射辐射 w / m-2
+ * LOCALTIME_DIFFUSE_SOLARRADIATION
+ * 指定本地时间的反射辐射 w / m-2
+ * LOCALTIME_REFLECTED_SOLARRADIATION
+ * 指定本地时间的总辐射 w / m-2
+ * LOCALTIME_TOTAL_SOLARRADIATION
+ * 指定日期的直接辐射量 MJ / m-2
+ * DAY_DIRECT_SOLARRADIATION_AMOUNT
+ * 指定日期的散射辐射量 MJ / m-2
+ * DAY_DIFFUSE_SOLARRADIATION_AMOUNT
+ * 指定日期的反射辐射量 MJ / m-2
+ * DAY_REFLECTED_SOLARRADIATION_AMOUNT
+ * 指定日期的总辐射量 MJ / m-2
+ * DAY_TOTAL_SOLARRADIATION_AMOUNT
+ * 指定月份的直接辐射量 MJ / m-2
+ * MONTH_DIRECT_SOLARRADIATION_AMOUNT
+ * 指定月份的散射辐射量 MJ / m-2
+ * MONTH_DIFFUSE_SOLARRADIATION_AMOUNT
+ * 指定月份的反射辐射量 MJ / m-2
+ * MONTH_REFLECTED_SOLARRADIATION_AMOUNT
+ * 指定月份的总辐射量 MJ / m-2
+ * MONTH_TOTAL_SOLARRADIATION_AMOUNT
+ * 指定年的直接辐射量 MJ / m-2
+ * YEAR_DIRECT_SOLARRADIATION_AMOUNT
+ * 指定年的散射辐射量 MJ / m-2
+ * YEAR_DIFFUSE_SOLARRADIATION_AMOUNT
+ * 指定年的反射辐射量 MJ / m-2
+ * YEAR_REFLECTED_SOLARRADIATION_AMOUNT
+ * 指定年的总辐射量 MJ / m-2
+ * YEAR_TOTAL_SOLARRADIATION_AMOUNT
+ * 日出时间 小时
+ * SUNRISETIME
+ * 日落时间 小时
+ * SUNSETTIME
+ * 指定日期的日照时数 小时
+ * DAY_SUNSHINE_DURATION
+ * 指定月的日照时数 小时
+ * MONTH_SUNSHINE_DURATION
+ * 指定年的日照时数 小时
+ * YEAR_SUNSHINE_DURATION
+ * 指定日期的可照时数 小时
+ * DAY_POSSIBLE_SUNSHINE_DURATION
+ * 指定月的可照时数 小时
+ * MONTH_POSSIBLE_SUNSHINE_DURATION
+ * 指定年的可照时数 小时
+ * YEAR_POSSIBLE_SUNSHINE_DURATION
+ * @param calendar
+ * @param cloudcoverof10parts
+ */
+ public String calSolarRadiation(RasterSolarRadiationOperation.SolarEadiationAnalysisType type, Calendar calendar, double cloudcoverof10parts, int cellSize) {
+ String workSpacePath = System.getProperty("user.dir");
+ String path = workSpacePath + File.separator + "data" + File.separator;
+ CoordinateReferenceSystem crs = null;
+ try {
+ crs = CoordinateUtil.getCoordinateReferenceSystem("EPSG:3857");
+ } catch (FactoryException e) {
+ log.error("坐标系处理时出错!" + e.getMessage());
+ throw new RuntimeException(e);
+ }
+ SAEnvironment envi = new SAEnvironment(cellSize, crs); // DefaultGeographicCRS.WGS84
+ SolarRadiationSpatialAnalysis solarRadiationSpatialAnalysis = new SolarRadiationSpatialAnalysis(envi);
+
+ String name = type.name();
+ String outFileName = path + "out" + File.separator + name + "_" + UUID.randomUUID().toString().replace("-", "") + ".tif";
+
+ String slopfile = path + "slope3857.tif";
+ String aspectfile = path + "aspect3857.tif";
+ try {
+ GeoTiff slopTiff = new GeoTiff(slopfile);
+ GridCoverage2D slopCoverage = slopTiff.getCoverage();
+ GeoTiff aspectTiff = new GeoTiff(aspectfile);
+ GridCoverage2D aspectCoverage = aspectTiff.getCoverage();
+ /*
+ 指定本地时间的直接辐射 w / m-2
+ LOCALTIME_DIRECT_SOLARRADIATION
+ 指定本地时间的散射辐射 w / m-2
+ LOCALTIME_DIFFUSE_SOLARRADIATION
+ 指定本地时间的反射辐射 w / m-2
+ LOCALTIME_REFLECTED_SOLARRADIATION
+ 指定本地时间的总辐射 w / m-2
+ LOCALTIME_TOTAL_SOLARRADIATION
+ 指定日期的直接辐射量 MJ / m-2
+ DAY_DIRECT_SOLARRADIATION_AMOUNT
+ 指定日期的散射辐射量 MJ / m-2
+ DAY_DIFFUSE_SOLARRADIATION_AMOUNT
+ 指定日期的反射辐射量 MJ / m-2
+ DAY_REFLECTED_SOLARRADIATION_AMOUNT
+ 指定日期的总辐射量 MJ / m-2
+ DAY_TOTAL_SOLARRADIATION_AMOUNT
+ 指定月份的直接辐射量 MJ / m-2
+ MONTH_DIRECT_SOLARRADIATION_AMOUNT
+ 指定月份的散射辐射量 MJ / m-2
+ MONTH_DIFFUSE_SOLARRADIATION_AMOUNT
+ 指定月份的反射辐射量 MJ / m-2
+ MONTH_REFLECTED_SOLARRADIATION_AMOUNT
+ 指定月份的总辐射量 MJ / m-2
+ MONTH_TOTAL_SOLARRADIATION_AMOUNT
+ 指定年的直接辐射量 MJ / m-2
+ YEAR_DIRECT_SOLARRADIATION_AMOUNT
+ 指定年的散射辐射量 MJ / m-2
+ YEAR_DIFFUSE_SOLARRADIATION_AMOUNT
+ 指定年的反射辐射量 MJ / m-2
+ YEAR_REFLECTED_SOLARRADIATION_AMOUNT
+ 指定年的总辐射量 MJ / m-2
+ YEAR_TOTAL_SOLARRADIATION_AMOUNT
+ 日出时间 小时
+ SUNRISETIME
+ 日落时间 小时
+ SUNSETTIME
+ 指定日期的日照时数 小时
+ DAY_SUNSHINE_DURATION
+ 指定月的日照时数 小时
+ MONTH_SUNSHINE_DURATION
+ 指定年的日照时数 小时
+ YEAR_SUNSHINE_DURATION
+ 指定日期的可照时数 小时
+ DAY_POSSIBLE_SUNSHINE_DURATION
+ 指定月的可照时数 小时
+ MONTH_POSSIBLE_SUNSHINE_DURATION
+ 指定年的可照时数 小时
+ YEAR_POSSIBLE_SUNSHINE_DURATION
+ */
+ //RasterSolarRadiationOperation.SolarEadiationAnalysisType type = RasterSolarRadiationOperation.SolarEadiationAnalysisType.MONTH_TOTAL_SOLARRADIATION_AMOUNT;
+// RasterSolarRadiationOperation.SolarEadiationAnalysisType type = RasterSolarRadiationOperation.SolarEadiationAnalysisType.SUNRISETIME;
+
+ GridCoverage2D solarRadiationCoverage2D = solarRadiationSpatialAnalysis.calculateSolarRadiation(slopCoverage, aspectCoverage, type, calendar, cloudcoverof10parts);
+
+ GridCoverageUtil.writeGeoTiff(solarRadiationCoverage2D, outFileName);
+ return outFileName;
+// } catch (FactoryException e) {
+// throw new RuntimeException(e);
+ } catch (GeoTiffException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (SAException e) {
+ throw new RuntimeException(e);
+ } catch (FactoryException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 8b1247c..926529a 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -52,7 +52,7 @@ mygeoserverconfig:
geoserverapiurl: http://1.92.75.33:8082/geoserver/
username: admin #adminuser
password: geoserver #Wzw@Geoserver
- workspaces: cztl
+ workspaces: nctyn
geoserverpath: /opt/geoserver/data_dir/data
## 删除GeoServer配置
diff --git a/src/test/java/com/cuit/solarenergy/SolarenergyApplicationTests.java b/src/test/java/com/cuit/solarenergy/SolarenergyApplicationTests.java
index 8095fbd..695fd81 100644
--- a/src/test/java/com/cuit/solarenergy/SolarenergyApplicationTests.java
+++ b/src/test/java/com/cuit/solarenergy/SolarenergyApplicationTests.java
@@ -1,13 +1,83 @@
package com.cuit.solarenergy;
+import com.cuit.gis.analysis.solarradiation.RasterSolarRadiationOperation;
+import com.cuit.mete.musicutil.MusicQueryParameters;
+import com.cuit.mete.musicutil.SurfEleInterface;
+import com.cuit.mete.musicutil.exception.*;
+import com.cuit.solarenergy.service.SolarenergyService;
+import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import java.io.FileNotFoundException;
+import java.util.Calendar;
+
@SpringBootTest
+@Slf4j
class SolarenergyApplicationTests {
+ @Autowired
+ SolarenergyService solarenergyService;
@Test
void contextLoads() {
}
+
+ @Test
+ public void cal(){
+ String s = solarenergyService.calSolarRadiation(RasterSolarRadiationOperation.SolarEadiationAnalysisType.DAY_TOTAL_SOLARRADIATION_AMOUNT, Calendar.getInstance(), 0, 2000);
+ System.out.println(s);
+ }
+
+ @Test
+ public void testMusic() throws FileNotFoundException, MusicConfigException {
+ try {
+ //1、接口实例化
+ SurfEleInterface surfEleInterface = new SurfEleInterface();
+ surfEleInterface.setUserConfig("10.96.90.120","80","BCCD_BFNA_NCGFZX", "NCgongfu123!");
+ log.debug("1---接口初始化成功");
+ //2、接口参数实例化
+ //需要传数据数据代码
+ MusicQueryParameters musicQueryParameters = new MusicQueryParameters("SURF","RADI_CHN_MUL_HOR");
+ log.debug("2---接口查询参数");
+ //3、设置查询时间,可设置时间段
+ musicQueryParameters.setTimes("20241126080000");
+
+ //可设置站号
+ //设置经纬度范围
+ //可设置站事情
+ musicQueryParameters.setAdminCodes("510000");
+ log.debug("3---设置时间及区号");
+ //开始查询
+ String dataByMusic = surfEleInterface.queryDataByMusic(musicQueryParameters);
+ log.debug("4---查询结束");
+ log.debug("查询结果长度:" + dataByMusic.length());
+ } catch (FileNotFoundException e) {
+ //配置文件没有找到
+ log.error("Error1:" + e.getMessage());
+ } catch (MusicConfigException e) {
+ //无效的配置文件
+ log.error("Error2:" + e.getMessage());
+ } catch (InvalidInterfaceParametersException e) {
+ //无效的接口参数据错误
+ log.error("Error3:" + e.getMessage());
+ } catch (InterfaceParameterMismatchException e) {
+ //查询接口参数据错误
+ log.error("Error4:" + e.getMessage());
+ } catch (MusicInterfaceException e) {
+ //接口调用异常;
+ log.error("Error7:" + e.getMessage());
+ } catch (MusicInterfaceReturnException e) {
+ //接口调用返异常;
+ log.error("Error5:接口ID为" + e.getInterfaceID());
+ log.error("Error5:接口参数为" + e.getParaMap());
+ log.error("Error5:MUSIC返回错误" + e.getErrMsg());
+ log.error("Error5:错误代码" + e.getErrcode());
+ log.error("Error5:错误信息" + e.getMessage());
+ log.error("Error5:错误处理建议" + e.getErrTips());
+ } catch (DataSetElementsInvalidExecption e) {
+ log.error("Error6:要素代码不正确" + e.getMessage());
+ }
+ }
}