张洋洋
2025-01-09 6cb2134a53422f471f4f9b77c34d67e1fb4d31db
[add]h5读取改造
已添加2个文件
已修改4个文件
234 ■■■■■ 文件已修改
src/main/java/com/se/simu/controller/FilesUploadController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/controller/SimuController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/CsvToSQLiteUtils.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/FileUtil.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/ZipUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/cityjson.json 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/controller/FilesUploadController.java
@@ -1,6 +1,8 @@
package com.se.simu.controller;
import com.se.simu.domain.vo.R;
import com.se.simu.utils.FileUtil;
import com.se.simu.utils.ZipUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@@ -17,6 +19,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@@ -69,6 +72,31 @@
        }
    }
    @ApiOperation("1-上传单个shp文件")
    @PostMapping("/uploadShp")
    public R<Object> uploadShp(@RequestParam("file") MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return success("文件不能为空");
        }
        // èŽ·å–å½“å‰å¹´æœˆæ—¥
        String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
        String targetDir = Paths.get(uploadedFolder, date).toString();
        log.info("目标目录: {}", targetDir);
        createDirectoriesIfNotExists(targetDir);
        try {
            // æ–‡ä»¶åœ°å€å…¨ç§°
            Path filePath = Paths.get(targetDir, file.getOriginalFilename());
            // æ–‡ä»¶å
            file.transferTo(filePath);
            ZipUtils.unzip(targetDir + "\\" + file.getOriginalFilename(),targetDir);
            File zipfile=new File(targetDir + "\\" + file.getOriginalFilename());
            zipfile.delete();
            return success(FileUtil.getShpPath(targetDir), "文件上传成功");
        } catch (IOException e) {
            log.error("文件上传失败", e);
            return fail("文件上传失败");
        }
    }
    @ApiOperation("1-上传单个文件")
    @PostMapping("/uploads")
src/main/java/com/se/simu/controller/SimuController.java
@@ -253,7 +253,7 @@
                return fail("解析范围文件失败!选择范围不能为空,请重新选择文件!", false);
            }
        }
        JSONArray jsonArray = new JSONArray();
        String stationFile = vo.getStationFile();
        log.info("站点文件shp地址:{}", stationFile);
        try {
@@ -262,7 +262,7 @@
                return fail("站点文件shp地址不能为空", false);
            }
            // 1 è¯»å–shp文件,获取站点坐标值
            JSONArray jsonArray = ShpToolUtils.readShpGetLocal(stationFile);
            jsonArray = ShpToolUtils.readShpGetLocal(stationFile);
            System.out.println("jsonArray = " + jsonArray);
        } catch (Exception e) {
            log.error("解析站点文件shp失败");
@@ -270,6 +270,7 @@
        String stationRainFile = vo.getStationRainFile();
        log.info("站点雨量CSV文件地址:{}", floodFile);
        JSONArray array = new JSONArray();
        try {
            // åˆ¤æ–­åœ°å€ä¸ä¸ºç©º
            if (StringUtils.isEmpty(stationRainFile)) {
@@ -278,7 +279,7 @@
            // åˆ›å»ºè¡¨å æ—¶é—´æˆ³
            String tableName = "station_rain_" + System.currentTimeMillis();
            // 1 è¯»å–CSV æ–‡ä»¶
            CsvToSQLiteUtils.readCsvSaveLocal(stationRainFile, tableName);
            array = CsvToSQLiteUtils.readCsvSaveLocal(stationRainFile, tableName);
            // èŽ·å–ä»¿çœŸæ—¶é—´ duration
            Integer duration = CsvToSQLiteUtils.getDuration(tableName);
            log.info("仿真时间 duration = {}", duration);
@@ -328,6 +329,10 @@
                    return fail("防汛范围不能为空", false);
                }
            }
            //todo ç»„装cityjson
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("shp", jsonArray);
            jsonObject.put("csv", array);
            // å¼€å§‹æ¨¡æ‹Ÿè®¡ç®—
            boolean flag = simuFilesService.createByfiles(vo);
            return success(flag, flag ? "成功" : "失败");
src/main/java/com/se/simu/utils/CsvToSQLiteUtils.java
@@ -1,5 +1,8 @@
package com.se.simu.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
@@ -156,8 +159,9 @@
     * @param stationRainFile Station Rain æ–‡ä»¶
     * @param tableName       è¡¨åç§°
     */
    public static void readCsvSaveLocal(String stationRainFile, String tableName) {
    public static JSONArray readCsvSaveLocal(String stationRainFile, String tableName) {
        // 1. åˆ›å»ºSQLite数据库连接
        JSONArray array=null;
        try (Connection conn = DriverManager.getConnection("jdbc:sqlite:rainfall.db")) {
            if (conn != null) {
                // 2. åˆ›å»ºè¡¨ï¼ˆå¦‚果不存在)
@@ -170,7 +174,7 @@
                // 4. å¼€å§‹äº‹åŠ¡
                conn.setAutoCommit(false);
                // 5. è¯»å–CSV文件并插入数据
                readCsvAndInsertDatas(stationRainFile, conn, tableName);
                array = readCsvAndInsertDatas(stationRainFile, conn, tableName);
                // 6. æäº¤äº‹åŠ¡
                conn.commit();
                System.out.println("数据成功插入到SQLite数据库!");
@@ -178,11 +182,13 @@
        } catch (SQLException e) {
            System.err.println("SQLite连接失败: " + e.getMessage());
        }
        return array;
    }
    private static void readCsvAndInsertDatas(String csvFilePath, Connection conn, String tableName) {
    private static JSONArray readCsvAndInsertDatas(String csvFilePath, Connection conn, String tableName) {
        // ä½¿ç”¨ Apache Commons CSV è¯»å–CSV文件
        JSONArray array = new JSONArray();
        try (Reader reader = new InputStreamReader(Files.newInputStream(Paths.get(csvFilePath)), "GBK")) {
            Iterable<CSVRecord> records = CSVFormat.DEFAULT
                    .withHeader("雨量站", "降雨量", "经度", "纬度", "datatime")
@@ -190,7 +196,6 @@
                    .parse(reader);
            String insertDataSql = "INSERT INTO " + tableName + " (station_name, rainfall, longitude, latitude, datetime) VALUES (?, ?, ?, ?, ?);";
            try (PreparedStatement pstmt = conn.prepareStatement(insertDataSql)) {
                // æ‰¹é‡å¤§å°
                int batchSize = 1000;
@@ -210,7 +215,13 @@
                    pstmt.setDouble(3, longitude);
                    pstmt.setDouble(4, latitude);
                    pstmt.setString(5, datetime);
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("stationName", stationName);
                    jsonObject.put("rainfall", rainfall);
                    jsonObject.put("longitude", longitude);
                    jsonObject.put("latitude", latitude);
                    jsonObject.put("datetime", datetime);
                    array.add(jsonObject);
                    // æ·»åŠ åˆ°æ‰¹å¤„ç†
                    pstmt.addBatch();
                    count++;
@@ -228,6 +239,7 @@
        } catch (IOException e) {
            System.err.println("读取CSV或插入数据时出错: " + e.getMessage());
        }
        return array;
    }
    /**
src/main/java/com/se/simu/utils/FileUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.se.simu.utils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
 *
 */
public class FileUtil {
    public static String getShpPath(String dirPath) {
        File root = new File(dirPath);
        List<String> filePath=new ArrayList<>();
        traverse(root,filePath);
        for (String path:filePath
             ) {
            if (path.endsWith(".shp")){
                return path;
            }
        }
        return null;
    }
    public static void traverse(File dir,List<String> filePath) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    traverse(file, filePath);
                } else {
                    filePath.add(file.getAbsolutePath());
                }
            }
        }
    }
}
src/main/java/com/se/simu/utils/ZipUtils.java
@@ -10,7 +10,6 @@
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
/**
 * zip
@@ -55,8 +54,9 @@
                    // è¿™é‡Œä¹Ÿå¯ä»¥é€‰æ‹©æ‰“印目录路径
                }
            }
        } catch (IOException e) {
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("GBK编码");
            try {
                File file = ZipUtil.unzip(zipFilePath, destDir, CharsetUtil.CHARSET_GBK);
                File[] file1 = file.listFiles();
src/main/resources/cityjson.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
{
  "type": "CityJSON_Extension",
  "name": "PipeLine",
  "uri": "http://www.smartearth.cn/extension.schema. PipeLine.json",
  "version": "1.0.0",
  "description": "Extension for PipeLine model",
  "extraCityObjects": {
    "+PipeLine": {
      "allOf": [
        {
          "$ref": "../cityobjects.schema.json#/_AbstractCityObject"
        },
        {
          "properties": {
            "type": {
              "enum": [
                "+PipeLine"
              ]
            },
            "topLevel": {
              "type": "boolean"
            },
            "attributes": {
              "type": "object",
              "properties": {
                "function": {
                  "type": "string"
                },
                "bs": {
                  "type": "object",
                  "description": "标识",
                  "properties": {
                    "qqwybs": {
                      "type": "string",
                      "description": "全球唯一编码"
                    },
                    "hydm": {
                      "type": "string",
                      "description": "行业代码"
                    },
                    "fldm": {
                      "type": "string",
                      "description": "分类代码"
                    },
                    "mc": {
                      "type": "string",
                      "description": "名称"
                    }
                  }
                },
                "zt": {
                  "type": "object",
                  "description": "状态",
                  "properties": {
                    "ztgb": {
                      "type": "string",
                      "description": "状态改变"
                    }
                  }
                },
                "sk": {
                  "type": "object",
                  "description": "时空",
                  "properties": {
                    "cssj": {
                      "type": "string",
                      "description": "产生时间"
                    },
                    "gxsj": {
                      "type": "string",
                      "description": "更新时间"
                    },
                    "xwsj": {
                      "type": "string",
                      "description": "消亡时间"
                    }
                  }
                },
                "ssxzq": {
                  "type": "string",
                  "description": "所属行政区域"
                }
              }
            },
            "children": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "geometry": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "$ref": "geomprimitives.schema.json#/MultiPoint"
                  },
                  {
                    "$ref": "geomprimitives.schema.json#/MultiLineString"
                  },
                  {
                    "$ref": "geomprimitives.schema.json#/MultiSurface"
                  },
                  {
                    "$ref": "geomprimitives.schema.json#/CompositeSurface"
                  },
                  {
                    "$ref": "geomprimitives.schema.json#/Solid"
                  },
                  {
                    "$ref": "geomprimitives.schema.json#/CompositeSolid"
                  },
                  {
                    "$ref": "geomprimitives.schema.json#/MultiSolid"
                  },
                  {
                    "$ref": "geomtemplates.schema.json#/GeometryInstance"
                  }
                ]
              }
            }
          },
          "required": [
            "type",
            "topLevel",
            "geometry"
          ]
        }
      ]
    }
  }
}