| | |
| | | package com.se.nsl.controller; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.se.nsl.config.PropertiesConfig; |
| | | import com.se.nsl.domain.po.DataPo; |
| | | import com.se.nsl.domain.po.Region; |
| | | import com.se.nsl.domain.po.Simu; |
| | | import com.se.nsl.domain.po.SimuData; |
| | | import com.se.nsl.domain.vo.R; |
| | | import com.se.nsl.helper.GdalHelper; |
| | | import com.se.nsl.helper.ShpHelper; |
| | | import com.se.nsl.helper.StringHelper; |
| | | import com.se.nsl.mapper.RegionMapper; |
| | | import com.se.nsl.service.*; |
| | | import io.netty.util.internal.StringUtil; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.axis.utils.StringUtils; |
| | | import org.gdal.ogr.*; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.nio.file.StandardCopyOption; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Api(tags = "Test") |
| | | @Api(tags = "01-Test") |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/test") |
| | |
| | | GedbService gedbService; |
| | | |
| | | @Resource |
| | | SimuService simuService; |
| | | SimuPoService simuPoService; |
| | | |
| | | @Resource |
| | | Hdf5Service hdf5Service; |
| | | //@Resource |
| | | //Hdf5Service hdf5Service; |
| | | |
| | | @Resource |
| | | ResultService resultService; |
| | | |
| | | @ApiOperation(value = "当前时间 *") |
| | | @GetMapping("/getTime") |
| | | public Object getTime() { |
| | | return System.currentTimeMillis(); |
| | | @Resource |
| | | RegionMapper regionMapper; |
| | | |
| | | @Resource |
| | | PropertiesConfig config; |
| | | |
| | | @Resource |
| | | SimuService simuService; |
| | | |
| | | @Resource |
| | | ResolveService resolveService; |
| | | |
| | | @ApiOperation(value = "01.insertRegion <") |
| | | @GetMapping("/insertRegion") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "fileName", value = "文件名", dataType = "String", paramType = "query", example = "5.beijing.geoJson"), |
| | | @ApiImplicitParam(name = "type", value = "类型", dataType = "Integer", paramType = "query", example = "1") |
| | | }) |
| | | public R<Object> insertRegion(String fileName, Integer type) { |
| | | // 孙胡沟geometry.json,7.nsl_area.geojson,4.10000.geoJson,5.beijing.geoJson |
| | | String path = "D:\\terrait\\NslServer\\data\\" + fileName; |
| | | if (!new File(path).exists()) return fail(path + ",文件不存在", null); |
| | | |
| | | org.gdal.ogr.Driver driver = ogr.GetDriverByName("GeoJSON"); |
| | | if (null == driver) return fail("null"); |
| | | DataSource ds = driver.Open(path); |
| | | if (null == ds) return fail("null"); |
| | | |
| | | List<Region> list = new ArrayList<>(); |
| | | for (int i = 0, c = ds.GetLayerCount(); i < c; i++) { |
| | | Layer layer = ds.GetLayer(i); |
| | | for (long j = 0, d = layer.GetFeatureCount(); j <= d; j++) { |
| | | Feature f = layer.GetFeature(j); |
| | | if (null == f || null == f.GetGeometryRef()) continue; |
| | | |
| | | String wkt = f.GetGeometryRef().ExportToWkt().toUpperCase(); |
| | | if (!wkt.contains("POLYGON")) |
| | | continue; // g.GetGeometryType() == ogr.wkbPolygon || g.GetGeometryType() == ogr.wkbMultiPolygon |
| | | |
| | | if (!wkt.contains("MULTIPOLYGON")) wkt = wkt.replace("POLYGON (", "MULTIPOLYGON ((") + ")"; |
| | | list.add(new Region(f.GetFieldAsString("name"), type, wkt)); // type.shortValue() |
| | | if (path.contains("孙胡沟")) list.add(new Region(f.GetFieldAsString("name"), 3, wkt)); |
| | | } |
| | | } |
| | | ds.delete(); |
| | | driver.delete(); |
| | | |
| | | return success(list.size() > 0 ? regionMapper.inserts(list) : 0); |
| | | } |
| | | |
| | | @ApiOperation(value = "testCallExe *") |
| | | @ApiOperation(value = "02.testDepthFiles <") |
| | | @GetMapping("/testDepthFiles") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "oldPath", value = "输入路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago"), |
| | | @ApiImplicitParam(name = "newPath", value = "开始时间", dataType = "Integer", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth"), |
| | | @ApiImplicitParam(name = "year", value = "年", dataType = "Integer", paramType = "query", example = "2025"), |
| | | @ApiImplicitParam(name = "month", value = "月", dataType = "Integer", paramType = "query", example = "4"), |
| | | @ApiImplicitParam(name = "day", value = "日", dataType = "Integer", paramType = "query", example = "21") |
| | | }) |
| | | public R<Object> testDepthFiles(String oldPath, String newPath, Integer year, Integer month, Integer day) { |
| | | try { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(new Date(year - 1900, month - 1, day, 0, 0, 0)); |
| | | SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); |
| | | |
| | | for (File file : new File(oldPath).listFiles()) { |
| | | if (!file.exists() || !file.isDirectory()) continue; |
| | | |
| | | File tif = new File(oldPath + "\\" + file.getName() + "\\depth.tif"); |
| | | if (!tif.exists() || tif.isDirectory()) continue; |
| | | |
| | | /*int second = Integer.parseInt(fileName); |
| | | calendar.set(Calendar.SECOND, 0); |
| | | calendar.set(Calendar.MINUTE, 0); |
| | | calendar.set(Calendar.HOUR, 0); |
| | | calendar.add(Calendar.SECOND, second);*/ |
| | | calendar.add(Calendar.SECOND, 1); |
| | | String newName = df.format(calendar.getTime()); |
| | | String newFile = newPath + File.separator + newName + ".tif"; |
| | | |
| | | System.out.println(newFile); |
| | | tif.renameTo(new File(newFile)); |
| | | file.delete(); |
| | | } |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "03.testTifFiles <") |
| | | @GetMapping("/testTifFiles") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "oldPath", value = "输入路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth"), |
| | | @ApiImplicitParam(name = "newPath", value = "开始时间", dataType = "Integer", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth2"), |
| | | @ApiImplicitParam(name = "step", value = "步长", dataType = "Integer", paramType = "query", example = "20") |
| | | }) |
| | | public R<Object> testTifFiles(String oldPath, String newPath, Integer step) { |
| | | try { |
| | | File[] files = new File(oldPath).listFiles(); |
| | | for (int i = 0, c = files.length; i < c; i += step) { |
| | | File file = files[i]; |
| | | if (!file.exists() || !file.isFile() || !file.getName().endsWith(".tif")) continue; |
| | | |
| | | String newFile = newPath + File.separator + file.getName(); |
| | | |
| | | System.out.println(newFile); |
| | | file.renameTo(new File(newFile)); |
| | | //Files.copy(file.toPath(), Paths.get(newFile), StandardCopyOption.REPLACE_EXISTING); |
| | | file.delete(); |
| | | } |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "04.testPngList <") |
| | | @GetMapping("/testPngList") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "fs24cubic"), |
| | | @ApiImplicitParam(name = "size", value = "尺寸", dataType = "Integer", paramType = "query", example = "1024") |
| | | }) |
| | | public R<Object> testPngList(String path, Integer size) { |
| | | try { |
| | | if (null == size) size = (Integer) 1024; |
| | | |
| | | String newPath = config.getOutPath() + File.separator + path + File.separator + "waters"; |
| | | String pngPath = config.getOutPath() + File.separator + path + File.separator + "png"; |
| | | if (!new File(pngPath).exists()) new File(pngPath).mkdirs(); |
| | | |
| | | int i = 1; |
| | | List<String> list = new ArrayList<>(); |
| | | for (File file : new File(newPath).listFiles()) { |
| | | if (!file.exists() || file.isFile()) continue; |
| | | |
| | | File pngFile = new File(file.getPath() + File.separator + size + "_" + size + ".png"); |
| | | if (!pngFile.exists() || pngFile.isDirectory()) continue; |
| | | |
| | | String pngName = i + ".png"; // String.format("f%06d", i) |
| | | Files.copy(pngFile.toPath(), Paths.get(pngPath + File.separator + pngName), StandardCopyOption.REPLACE_EXISTING); |
| | | |
| | | list.add("file '" + pngName + "'"); |
| | | System.out.println(list.get(list.size() - 1)); |
| | | i++; |
| | | } |
| | | |
| | | Path outPath = Paths.get(pngPath + File.separator + "list.txt"); |
| | | try { |
| | | Files.write(outPath, list, StandardCharsets.UTF_8); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "5.testNsl <") |
| | | @GetMapping("/testNsl") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "inPath", value = "输入路径", dataType = "String", paramType = "query", example = "20250412"), |
| | | @ApiImplicitParam(name = "startTime", value = "开始时间", dataType = "Integer", paramType = "query", example = "2025-04-12 00:00:00"), |
| | | @ApiImplicitParam(name = "epsg", value = "坐标系ID", dataType = "Integer", paramType = "query", example = "4548") |
| | | }) |
| | | public R<Object> testNsl(String inPath, String startTime, Integer epsg) { |
| | | try { |
| | | SimuData data = new SimuData(); |
| | | data.setInPath(inPath); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse(startTime)); |
| | | data.setEpsg(epsg); |
| | | |
| | | testService.test(data); |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "09.testCreateNsl <") |
| | | @GetMapping("/testCreateNsl") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "tifPath", value = "Tif路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago"), |
| | | @ApiImplicitParam(name = "inPath", value = "输入路径", dataType = "String", paramType = "query", example = "20250425"), |
| | | @ApiImplicitParam(name = "startTime", value = "开始时间", dataType = "Integer", paramType = "query", example = "2025-04-29 00:00:00"), |
| | | @ApiImplicitParam(name = "epsg", value = "坐标系ID", dataType = "Integer", paramType = "query", example = "4548") |
| | | }) |
| | | public R<Object> testCreateNsl(String tifPath, String inPath, String startTime, Integer epsg) { |
| | | try { |
| | | SimuData data = new SimuData(); |
| | | data.setInPath(inPath); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse(startTime)); |
| | | data.setEpsg(epsg); |
| | | |
| | | procTifs(tifPath, inPath, data.getStartTime()); |
| | | testService.test(data); |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | private void procTifs(String tifPath, String inPath, Date startTime) { |
| | | if (StringUtils.isEmpty(tifPath)) return; |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | //calendar.setTime(new Date(startTime.getYear() - 1900, startTime.getMonth() - 1, startTime.getDay(), 0, 0, 0)); |
| | | calendar.setTime(startTime); |
| | | SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); |
| | | String newPath = config.getInPath() + File.separator + inPath + File.separator + "depth"; |
| | | if (!new File(newPath).exists()) new File(newPath).mkdirs(); |
| | | |
| | | for (File file : new File(tifPath).listFiles()) { |
| | | if (!file.exists() || !file.isDirectory()) continue; |
| | | |
| | | File tif = new File(tifPath + "\\" + file.getName() + File.separator + "depth.tif"); |
| | | if (!tif.exists() || tif.isDirectory()) continue; |
| | | |
| | | calendar.add(Calendar.SECOND, 1); |
| | | String newName = df.format(calendar.getTime()); |
| | | String newFile = newPath + File.separator + newName + ".tif"; |
| | | |
| | | System.out.println(newFile); |
| | | tif.renameTo(new File(newFile)); |
| | | file.delete(); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "11.renametifs <") |
| | | @GetMapping("/renametifs") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth"), |
| | | @ApiImplicitParam(name = "prefix", value = "前缀", dataType = "Integer", paramType = "query", example = "01250302"), |
| | | @ApiImplicitParam(name = "newPrefix", value = "新前缀", dataType = "Integer", paramType = "query", example = "20250429") |
| | | }) |
| | | public R<Object> renametifs(String path, String prefix, String newPrefix) { |
| | | try { |
| | | File[] files = new File(path).listFiles(); |
| | | for (File file : files) { |
| | | String newName = file.getPath().replace(prefix, newPrefix); |
| | | file.renameTo(new File(newName)); |
| | | } |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "10.当前时间 *") |
| | | @GetMapping("/getTime") |
| | | public Object getTime() throws Exception { |
| | | /*String rs = resolveService.createRainfallCsv("D:\\360\\zt.csv", "正态分布", 100, 10, 1); |
| | | rs = resolveService.createRainfallCsv("D:\\360\\pj.csv", "平均分布", 100, 10, 1); |
| | | rs = resolveService.createRainfallCsv("D:\\360\\bdpj.csv", "波动平均分布", 100, 10, 1); |
| | | rs = resolveService.createRainfallCsv("D:\\360\\cxss.csv", "持续上升", 100, 10, 1);*/ |
| | | |
| | | /*SimuData data = new SimuData(); |
| | | data.setStartTime(new Date()); |
| | | data.setInPath("20250504203823"); |
| | | String rs = resolveService.callZarr2tif(data);*/ |
| | | |
| | | /*Simu simu = simuService.selectById(17); |
| | | SimuData data = JSON.parseObject(simu.getData(), SimuData.class); |
| | | resolveService.initArgs(data); |
| | | resolveService.createRainfallFile(simu, data); |
| | | resolveService.callUwSolver(data);*/ |
| | | |
| | | /*SimuData data = new SimuData(); |
| | | data.setStartTime(new Date(1748747454000L)); |
| | | data.setInPath("20250515143948"); |
| | | data.setOutPath(data.getInPath()); |
| | | data.setEpsg(4548); |
| | | testService.test(data);*/ |
| | | |
| | | Simu simu = simuService.selectById(17); |
| | | SimuData data = JSON.parseObject(simu.getData(), SimuData.class); |
| | | resolveService.initArgs(simu, data); |
| | | |
| | | return (Object) System.currentTimeMillis(); |
| | | } |
| | | |
| | | /*@ApiOperation(value = "12.testCallExe *") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "20241010095328") |
| | | }) |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testResuslt *") |
| | | @ApiOperation(value = "13.testResuslt *") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "20241107092342"), |
| | | @ApiImplicitParam(name = "time", value = "时间", dataType = "String", paramType = "query", example = "2024-11-07 09:23:42") |
| | |
| | | public R<Object> testResuslt(String path, String time) { |
| | | try { |
| | | DataPo data = new DataPo(); |
| | | data.setEpsg(4548); |
| | | data.setEpsg(Integer.valueOf(4548)); |
| | | data.setInPath(path); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse(time)); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testSww2Tif *") |
| | | @ApiOperation(value = "14.testSww2Tif *") |
| | | @GetMapping("/testSww2Tif") |
| | | public R<Object> testSww2Tif() { |
| | | try { |
| | | DataPo data = new DataPo(); |
| | | data.setEpsg(4548); |
| | | data.setEpsg(Integer.valueOf(4548)); |
| | | data.setInPath("20241010095328"); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-09-30 00:00:00")); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testRainfall *") |
| | | @ApiOperation(value = "15.testRainfall *") |
| | | @GetMapping("/testRainfall") |
| | | public R<Object> testRainfall() { |
| | | try { |
| | | DataPo data = new DataPo(); |
| | | data.setEpsg(4548); |
| | | data.setTotal(60.0); |
| | | data.setDuration(60); |
| | | data.setEpsg(Integer.valueOf(4548)); |
| | | data.setTotal(Double.valueOf(60.0)); |
| | | data.setDuration(Integer.valueOf(60)); |
| | | data.setInPath("20241010095328"); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-07-01 00:00:00")); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testToken *") |
| | | @ApiOperation(value = "16.testToken *") |
| | | @GetMapping("/testToken") |
| | | public R<Object> testToken() { |
| | | try { |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testPolygonize *") |
| | | @ApiOperation(value = "17.testPolygonize *") |
| | | @GetMapping("/testPolygonize") |
| | | public R<Object> testPolygonize() { |
| | | try { |
| | |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testH5 *") |
| | | @ApiOperation(value = "18.testH5 *") |
| | | @GetMapping("/testH5") |
| | | public R<Object> testH5() { |
| | | try { |
| | | DataPo data = new DataPo(); |
| | | data.setEpsg(4548); |
| | | data.setEpsg(Integer.valueOf(4548)); |
| | | data.setInPath("20241010095328"); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-09-30 00:00:00")); |
| | | |
| | |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | |
| | | @ApiOperation(value = "testNsl *") |
| | | @GetMapping("/testNsl") |
| | | public R<Object> testNsl() { |
| | | try { |
| | | DataPo data = new DataPo(); |
| | | data.setEpsg(4548); |
| | | data.setInPath("20250412"); |
| | | data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2025-04-12 00:00:00")); |
| | | |
| | | testService.test(data); |
| | | |
| | | return success("ok"); |
| | | } catch (Exception ex) { |
| | | return fail(ex, null); |
| | | } |
| | | } |
| | | }*/ |
| | | } |