pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/controller/SimuController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/domain/vo/StationRainVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/utils/CsvToSQLiteUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/utils/ZarrUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/win32-x86-64/blosc.dll | 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -275,6 +275,17 @@ </repository> </repositories> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>win32-x86-64/blosc.dll</include> <include>**/*.yml</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> <finalName>SimuServer</finalName> <plugins> <plugin> src/main/java/com/se/simu/controller/SimuController.java
@@ -8,13 +8,11 @@ import com.se.simu.domain.dto.GeLayer; import com.se.simu.domain.po.DataPo; import com.se.simu.domain.po.SimuPo; import com.se.simu.domain.vo.CreateFilesSimuVo; import com.se.simu.domain.vo.CreateSimuVo; import com.se.simu.domain.vo.R; import com.se.simu.domain.vo.SimuVo; import com.se.simu.domain.vo.*; import com.se.simu.service.*; import com.se.simu.utils.CsvToSQLiteUtils; import com.se.simu.utils.ShpToolUtils; import com.se.simu.utils.ZarrUtils; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -271,13 +269,13 @@ String stationRainFile = vo.getStationRainFile(); log.info("ç«ç¹é¨éCSVæä»¶å°åï¼{}", floodFile); JSONArray array = new JSONArray(); // åå»ºè¡¨å æ¶é´æ³ String tableName = "station_rain_" + System.currentTimeMillis(); try { // 夿å°åä¸ä¸ºç©º if (StringUtils.isEmpty(stationRainFile)) { return fail("ç«ç¹é¨éCSVæä»¶å°åä¸è½ä¸ºç©º", false); } // åå»ºè¡¨å æ¶é´æ³ String tableName = "station_rain_" + System.currentTimeMillis(); // 1 读åCSV æä»¶ array = CsvToSQLiteUtils.readCsvSaveLocal(stationRainFile, tableName); // è·åä»¿çæ¶é´ duration @@ -341,5 +339,19 @@ } } @ApiOperation(value = "tarræä»¶ç»è£ ") @GetMapping(value = "/testZarr", produces = "application/json; charset=UTF-8") public R<Boolean> testZarr(@RequestParam("name") String tableName) throws IOException { List<String> list = CsvToSQLiteUtils.getNameList(tableName); String basePath="D:\\åå¸å æ¶\\sem\\é¨éç«ç¹æ°æ®\\éé¨ézarr\\"; for (String src : list ) { List<StationRainVo> stationRainVos = CsvToSQLiteUtils.getList(tableName, src); ZarrUtils.saveZarrRainfall(basePath+src,stationRainVos); ZarrUtils.saveZarrTime(basePath+src,stationRainVos); System.out.println(src+"çzarræ°æ®çæ====================="); } return success(true); } } src/main/java/com/se/simu/domain/vo/StationRainVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.se.simu.domain.vo; public class StationRainVo { private Long id; private String stationName; private Double rainfall; private Double longitude; private Double latitude; private String datetime; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getStationName() { return stationName; } public void setStationName(String stationName) { this.stationName = stationName; } public Double getRainfall() { return rainfall; } public void setRainfall(Double rainfall) { this.rainfall = rainfall; } public Double getLongitude() { return longitude; } public void setLongitude(Double longitude) { this.longitude = longitude; } public Double getLatitude() { return latitude; } public void setLatitude(Double latitude) { this.latitude = latitude; } public String getDatetime() { return datetime; } public void setDatetime(String datetime) { this.datetime = datetime; } } src/main/java/com/se/simu/utils/CsvToSQLiteUtils.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.se.simu.domain.vo.StationRainVo; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVRecord; @@ -12,6 +13,10 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; /** * CSV å° SQLite å®ç¨ç¨åº @@ -268,7 +273,6 @@ } catch (SQLException e) { System.err.println("SQLiteè¿æ¥å¤±è´¥: " + e.getMessage()); } return null; } @@ -299,4 +303,73 @@ return 1440; } /** * åç»æ¥è¯¢ * * @param tableName 表åç§° * @return {@link Double} */ public static List<String> getNameList(String tableName) { // 1. å建SQLiteæ°æ®åºè¿æ¥ try (Connection conn = DriverManager.getConnection("jdbc:sqlite:rainfall.db")) { if (conn != null) { // 2. æ§è¡SQLæ¥è¯¢ String queryDataSql = "SELECT station_name FROM " + tableName + " GROUP BY station_name"; // 3. å¤çæ¥è¯¢ç»æ try (PreparedStatement pstmt = conn.prepareStatement(queryDataSql)) { ResultSet rs = pstmt.executeQuery(); List<String> list = new ArrayList<>(); while (rs.next()) { // è·åæ»å list.add(rs.getString("station_name")); } return list; } catch (SQLException e) { System.err.println("æ¥è¯¢æ°æ®æ¶åºé: " + e.getMessage()); } } } catch (SQLException e) { System.err.println("SQLiteè¿æ¥å¤±è´¥: " + e.getMessage()); } return null; } /** * åç»æ¥è¯¢ * * @param tableName 表åç§° * @return {@link Double} */ public static List<StationRainVo> getList(String tableName, String name) { // 1. å建SQLiteæ°æ®åºè¿æ¥ try (Connection conn = DriverManager.getConnection("jdbc:sqlite:rainfall.db")) { if (conn != null) { // 2. æ§è¡SQLæ¥è¯¢ String queryDataSql = "SELECT * FROM " + tableName + " WHERE station_name='" + name + "' ORDER BY datetime asc"; // 3. å¤çæ¥è¯¢ç»æ try (PreparedStatement pstmt = conn.prepareStatement(queryDataSql)) { ResultSet rs = pstmt.executeQuery(); List<StationRainVo> list = new ArrayList<>(); StationRainVo vo; while (rs.next()) { vo = new StationRainVo(); vo.setId(rs.getLong("id")); vo.setStationName(rs.getString("station_name")); vo.setRainfall(rs.getDouble("rainfall")); vo.setLatitude(rs.getDouble("latitude")); vo.setLongitude(rs.getDouble("longitude")); vo.setDatetime(rs.getString("datetime")); list.add(vo); } return list; } catch (SQLException e) { System.err.println("æ¥è¯¢æ°æ®æ¶åºé: " + e.getMessage()); } } } catch (SQLException e) { System.err.println("SQLiteè¿æ¥å¤±è´¥: " + e.getMessage()); } return null; } } src/main/java/com/se/simu/utils/ZarrUtils.java
@@ -4,33 +4,70 @@ import com.bc.zarr.DataType; import com.bc.zarr.ZarrArray; import com.bc.zarr.ZarrGroup; import com.se.simu.domain.vo.StationRainVo; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class ZarrUtils { public static void main(String[] args) throws Exception{ // è¾å ¥ CSV æä»¶çè·¯å¾ String csvFilePath = "D:\\åå¸å æ¶\\sem\\é¨éç«ç¹æ°æ®\\é¨éç«å å«åæ .csv"; // è¾åº Zarr æä»¶çè·¯å¾ String zarrFilePath = "D:\\åå¸å æ¶\\sem\\é¨éç«ç¹æ°æ®\\é¨éç«å å«åæ .zarr"; try (CSVParser csvParser = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader())) { // public static void main(String[] args) throws Exception { // // è¾å ¥ CSV æä»¶çè·¯å¾ // String csvFilePath = "D:\\åå¸å æ¶\\sem\\é¨éç«ç¹æ°æ®\\é¨éç«å å«åæ .csv"; // // è¾åº Zarr æä»¶çè·¯å¾ // String zarrFilePath = "D:\\åå¸å æ¶\\sem\\é¨éç«ç¹æ°æ®\\å¤§åºæ"; // try (CSVParser csvParser = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader())) { // // è·å CSV åæ° // int numColumns = csvParser.getHeaderMap().size(); // // è®¡ç® CSV è¡æ° // int numRows = 0; // for (CSVRecord record : csvParser) { // numRows++; // } // // éæ°åå§å CSV è§£æå¨ï¼å 为ä¹åçéåå·²ç»èå°½äºè¿ä»£å¨ // csvParser.close(); // CSVParser csvRecords = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader()); // // å建 Zarr ç» // Path zarrPath = Paths.get(zarrFilePath); // ZarrGroup zarrGroup = ZarrGroup.create(zarrPath); // // å®ä¹ Zarr æ°ç»ç维度 // int[] shape = {numRows, numColumns}; // // å®ä¹ååå¤§å° // int[] chunks = {1440}; // // å建 Zarr æ°ç» // ArrayParams params = new ArrayParams(); // params.shape(chunks); // params.chunks(chunks); // params.dataType(DataType.f4); // ZarrArray zarrArray = zarrGroup.createArray("rainfall", params); // int rowIndex = 0; // for (CSVRecord record : csvRecords) { // double value = Double.parseDouble(record.get(1)); // zarrArray.write(value); // rowIndex++; // } // // å ³é Zarr ç» // //zarrGroup.close(); // } catch (IOException e) { // e.printStackTrace(); // } // } public static void saveZarrRainfall(String path, List<StationRainVo> stationRainVos){ try { // è·å CSV åæ° int numColumns = csvParser.getHeaderMap().size(); int numColumns = 5; // è®¡ç® CSV è¡æ° int numRows = 0; for (CSVRecord record : csvParser) { numRows++; } // éæ°åå§å CSV è§£æå¨ï¼å 为ä¹åçéåå·²ç»èå°½äºè¿ä»£å¨ csvParser.close(); CSVParser csvRecords = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader()); int numRows = stationRainVos.size(); // å建 Zarr ç» Path zarrPath = Paths.get(zarrFilePath); Path zarrPath = Paths.get(path); ZarrGroup zarrGroup = ZarrGroup.create(zarrPath); // å®ä¹ Zarr æ°ç»ç维度 int[] shape = {numRows, numColumns}; @@ -43,24 +80,55 @@ params.dataType(DataType.f4); ZarrArray zarrArray = zarrGroup.createArray("rainfall",params); int rowIndex = 0; for (CSVRecord record : csvRecords) { int[] x={rowIndex}; // for (int colIndex = 0; colIndex < numColumns; colIndex++) { // //double value = Double.parseDouble(record.get(colIndex)); // String value = record.get(colIndex); // int[] y={colIndex}; // //zarrArray.write(value); // zarrArray.write(value,x,y); // } double value = Double.parseDouble(record.get(1)); for (StationRainVo record : stationRainVos) { double value = record.getRainfall(); zarrArray.write(value); rowIndex++; } // å ³é Zarr ç» //zarrGroup.close(); } catch (IOException e) { } catch (Exception e) { e.printStackTrace(); } } public static void saveZarrTime(String path, List<StationRainVo> stationRainVos){ try { // è·å CSV åæ° int numColumns = 5; // è®¡ç® CSV è¡æ° int numRows = stationRainVos.size(); // å建 Zarr ç» Path zarrPath = Paths.get(path); ZarrGroup zarrGroup = ZarrGroup.create(zarrPath); // å®ä¹ Zarr æ°ç»ç维度 int[] shape = {numRows, numColumns}; // å®ä¹ååå¤§å° int[] chunks = {1440}; // å建 Zarr æ°ç» ArrayParams params = new ArrayParams(); params.shape(chunks); params.chunks(chunks); params.dataType(DataType.i4); ZarrArray zarrArray = zarrGroup.createArray("time", params); int rowIndex = 0; SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); for (StationRainVo record : stationRainVos) { long value = sdf.parse(record.getDatetime()).getTime(); zarrArray.write(value); rowIndex++; } // å ³é Zarr ç» //zarrGroup.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ System.out.println("2023/7/31 6:30"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); Date date = sdf.parse("2023/7/31 6:30"); System.out.println(date.getTime()); } } src/main/resources/win32-x86-64/blosc.dllBinary files differ