package com.fd.controller; import com.fd.constant.Command; import com.fd.constant.MsgCode; import com.fd.constant.TypeCode; import com.fd.dto.PageDto; import com.fd.entity.FileEntity; import com.fd.server.CmdServer; import com.fd.server.FileServer; import com.fd.util.R; import io.swagger.annotations.ApiOperation; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.util.ArrayList; import java.util.Date; /** * Created by Owen on 2019/11/12 0012 9:40 * * 栅格数据 */ @Log4j2 @RequestMapping("api/raster") @RestController public class RasterController { @Value("${input.file.path}") private String INPUT_FILE_PATH; @Autowired private FileServer fileServer; @Autowired private CmdServer cmdServer; @ApiOperation("上传栅格数据,只能上传tif文件") @PostMapping(value = "upload", consumes = { "multipart/form-data" }) private R upload(@RequestParam("file") MultipartFile file){ log.info("run upload"); // 文件名全名 String fileName = file.getOriginalFilename(); String s = StringUtils.substringAfterLast(fileName, "."); if (!"tif".equals(s)) { return new R(50008,MsgCode.E50008); } return fileServer.uploadBigFile(file, TypeCode.FILE_TYPE_RASTER_TIF); } @ApiOperation("获取栅格数据列表") @PostMapping(value = "list") private R list(@RequestBody PageDto param){ log.info("run list"); return fileServer.findByType(TypeCode.FILE_TYPE_RASTER_TIF, param); } /** * 删除文件 */ @ApiOperation("删除文件") @GetMapping("delete/{fileId}/") private R deleteFile(@PathVariable("fileId") Long fileId) { log.info("run deleteFile: {}", fileId); return fileServer.deleteById(fileId); } @ApiOperation("栅格数据判断坐标") @GetMapping("command/judge/coord/{fileId}/") private R cmdJudgeCoord(@PathVariable("fileId") Long fileId) { log.info("run cmdJudgeCoord: {}", fileId); FileEntity entity = fileServer.findById(fileId); String cmd = Command.RASTER_JUDGE_COORD; cmd = cmd.replace("@inputFile", entity.getFileUrl()); log.info("cmd: {}", cmd); Integer isJudge = cmdServer.exeCmdRasterJudgeCoord(cmd); if (1000 == isJudge){ log.info("need to transform"); // 严格坐标转换 entity = cmdTansformGdalwarpStrict(fileId); } else if (0 == isJudge){ log.info("not to transform"); } else { log.info("error exeCmd"); return new R(50005, MsgCode.E50005); } return new R(200, entity); } // @ApiOperation("栅格数据普通坐标转换") // @GetMapping("command/transform/gdalwarp/{fileId}/") // private R cmdTansformGdalwarp(@PathVariable("fileId") Long fileId) { // log.info("run cmdTansformGdalwarp: {}", fileId); // FileEntity entity = fileServer.findById(fileId); // // String fileName = StringUtils.substringBefore(entity.getFileName(), "."); // // String cmd = Command.RASTER_TRANSFORM_GDALWARP; // cmd = cmd.replace("@fileName",fileName); // log.info("cmd: {}", cmd); // // Integer integer = cmdServer.exeCmdInt(cmd); // if (integer != 0) { // log.info("error command transform"); // return new R(50005, MsgCode.E50005); // } // // FileEntity fileEntity = new FileEntity(); // fileEntity.setFileName(entity.getFileName()); // // /root/gis/cesium/input/transform/@fileName.tif // fileEntity.setFileUrl(INPUT_FILE_PATH + "transform" + File.separator + entity.getFileName()); // fileEntity.setCreateTime(new Date()); // fileEntity.setUpdateTime(new Date()); // fileEntity.setType(TypeCode.FILE_TYPE_RASTER_TIF); // fileEntity = fileServer.save(fileEntity); // // return new R(200, fileEntity) ; // } // @ApiOperation("栅格数据严格坐标转换") // @GetMapping("command/transform/strict/gdalwarp/{fileId}/") // private R cmdTansformGdalwarpStrict(@PathVariable("fileId") Long fileId) { // log.info("run cmdTansformGdalwarpStrict: {}", fileId); // FileEntity entity = fileServer.findById(fileId); // // String fileName = StringUtils.substringBefore(entity.getFileName(), "."); // // String step_1 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_1; // String step_2 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_2; // step_1 = step_1.replace("@fileName",fileName); // step_2 = step_2.replace("@fileName",fileName); // log.info("cmd1: {}", step_1); // log.info("cmd2: {}", step_2); // // Integer integer = cmdServer.exeCmd(step_1, step_2); // // if (integer != 0) { // log.info("error command transform"); // return new R(50005, MsgCode.E50005); // } // // FileEntity fileEntity = new FileEntity(); // fileEntity.setFileName(entity.getFileName()); // // /root/gis/cesium/input/transform_strict/@fileName.tif // fileEntity.setFileUrl(INPUT_FILE_PATH + "transform_strict" + File.separator + entity.getFileName()); // fileEntity.setCreateTime(new Date()); // fileEntity.setUpdateTime(new Date()); // fileEntity.setType(TypeCode.FILE_TYPE_RASTER_TIF); // fileEntity = fileServer.save(fileEntity); // // return new R(200, fileEntity) ; // } @ApiOperation("栅格数据切片命令") @GetMapping("command/osgeo/{fileId}/") private R cmdOsgeo(@PathVariable("fileId") Long fileId) { log.info("run cmdOsgeo: {}", fileId); FileEntity entity = fileServer.findById(fileId); String fileName = StringUtils.substringBefore(entity.getFileName(), "."); // fileName_tiles fileName = fileName + "_tiles"; String cmd = Command.RASTER_SLICE_OSGEO; cmd = cmd.replace("@filePath", entity.getFileUrl()); cmd = cmd.replace("@fileName",fileName); log.info("cmd: {}", cmd); // Integer integer = cmdServer.exeCmdRasterSlice(cmd); // if (integer != 0) { // log.info("error command exeCmdRasterSlice"); // return new R(50005, MsgCode.E50005); // } FileEntity fileEntity = new FileEntity(); fileEntity.setFileName(fileName); fileEntity.setFileUrl(INPUT_FILE_PATH + fileName); fileEntity.setCreateTime(new Date()); fileEntity.setUpdateTime(new Date()); fileEntity.setType(TypeCode.FILE_TYPE_RASTER_TIF); fileEntity = fileServer.save(fileEntity); // 多线程运行切片 new Thread(new RasterSliceThread(cmd, fileEntity)).start(); return new R(200, fileEntity) ; } public class RasterSliceThread implements Runnable{ private String cmd; private FileEntity entity; private RasterSliceThread(String cmd, FileEntity entity){ this.cmd = cmd; this.entity = entity; } @Override public void run() { log.warn("run RasterSliceThread"); Integer integer = cmdServer.exeCmdRasterSlice(cmd, entity); if (integer != 0) { log.info("error command exeCmdRasterSlice"); // return new R(50005, MsgCode.E50005); // 如果命令运行失败,删除刚才创建的实体类 fileServer.deleteById(entity.getId()); return; } // // 需要告诉前端,当状态为1是,才是可以的 // entity.setStatus(1); // fileServer.save(entity); log.warn("end RasterSliceThread"); } } // 严格坐标转换 private FileEntity cmdTansformGdalwarpStrict(Long fileId){ log.info("run cmdTansformGdalwarpStrict: {}", fileId); FileEntity entity = fileServer.findById(fileId); String fileName = StringUtils.substringBefore(entity.getFileName(), "."); String step_1 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_1; String step_2 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_2; step_1 = step_1.replace("@fileName",fileName); step_2 = step_2.replace("@fileName",fileName); log.info("cmd1: {}", step_1); log.info("cmd2: {}", step_2); Integer integer = cmdServer.exeCmd(step_1, step_2); if (integer != 0) { log.info("error command transform"); return null; // return new R(50005, MsgCode.E50005); } FileEntity fileEntity = new FileEntity(); fileEntity.setFileName(entity.getFileName()); // /root/gis/cesium/input/transform_strict/@fileName.tif fileEntity.setFileUrl(INPUT_FILE_PATH + "transform_strict" + File.separator + entity.getFileName()); fileEntity.setCreateTime(new Date()); fileEntity.setUpdateTime(new Date()); fileEntity.setType(TypeCode.FILE_TYPE_RASTER_TIF); fileEntity = fileServer.save(fileEntity); return fileEntity; } // String a = "112222.zip"; // String b = "11/2222/aa"; // String c = "11/2222/aa.zip"; // String e = "/root/gis/cesium/input/test/clip.shp"; // System.out.println(StringUtils.stripStart(a, ".")); // System.out.println("After: " + StringUtils.substringAfter(a, ".")); // System.out.println("before: " + StringUtils.substringBefore(a, ".")); // System.out.println("c: " + StringUtils.substringBefore(c, "/")); // System.out.println("c: " + StringUtils.substringBeforeLast(c, "/")); // System.out.println(StringUtils.substringBefore(b, "/")); // System.out.println(StringUtils.substringBeforeLast(b, "/")); // System.out.println(StringUtils.substring(b, b.lastIndexOf("/") + 1, b.length())); // System.out.println("e: " + StringUtils.substringBeforeLast(e, "/")); // System.out.println("e1: " + StringUtils.substring(e, e.indexOf("input/") + 6, e.lastIndexOf("/"))); // System.out.println("==========================================="); // System.out.println(); // // System.out.println("a: " + StringUtils.substringAfterLast(a, ".")); public static void main(String[] args) { String a = "0...10...20...30...40...50...60...70...80...90...100.....10..11"; String b = "...10"; String c = "...10...20"; String d = "...10...100"; String re = "\\.\\.\\."; String r1 = "..."; // String s = a.replaceAll(re, "@"); String rr = "\\.\\.\\.[0-9]{2,3}"; System.out.println("b: " + b.matches(rr)); System.out.println("c: " + c.matches(rr)); System.out.println("c: " + StringUtils.substring(c, -2)); System.out.println("d: " + StringUtils.substring(d, -2)); System.out.println("a: " + StringUtils.contains(a, "...")); System.out.println("d: " + StringUtils.substring(d, -6)); System.out.println("c: " + StringUtils.substring(c, -6)); System.out.println("a: " + a.matches(r1)); } }