wuweihao 5 роки тому
батько
коміт
aed9993278

+ 4 - 1
README.md

@@ -6,7 +6,8 @@
     四维内网:
     192.168.0.248
     
-    /root/java/apache-tomcat-8.5.47_8082_cesium
+    service tomcat:
+    /data/tomcat_cesium_8082
     
     俊波前端:
     /var/www/html/3dmap
@@ -23,6 +24,8 @@ http:loacalhost:8082/data/aa.jpg
 数据管理平台:
 http://39.108.123.31:8082/back/#/grid  
 
+service tomcat: 
+
 
 前端地址:
 http://map.4dage.com/3dmap/

+ 19 - 0
src/main/java/com/fd/constant/Command.java

@@ -70,6 +70,25 @@ public class Command {
      */
     public static String VECTOR_JUDGE_COORD = DOCKER_GDAL + "ogrinfo -ro -al -so @inputFile";
 
+
+    /**
+     * 矢量数据要素查询
+     * 精准查询
+     */
+    public static String VECTOR_WFS_ACCURATE = DOCKER_GDAL + "ogr2ogr -overwrite -fieldTypeToString Date -f geojson -where \"@fileName = '@value'\" @outputFile @inputFile";
+
+    /**
+     * 矢量数据要素查询
+     * 模糊查询
+     */
+    public static String VECTOR_WFS_LIKE = DOCKER_GDAL + "ogr2ogr -overwrite -fieldTypeToString Date -f geojson -where \"@fileName like '%@value%'\" @outputFile @inputFile";
+
+    /**
+     * 矢量数据要素查询
+     * 范围查询
+     */
+    public static String VECTOR_WFS_SCOPE = DOCKER_GDAL + "ogr2ogr -overwrite -fieldTypeToString Date -f geojson -spat @xMin @yMin @xMax @yMax @outputFile @inputFile";
+
     /**
      * 栅格数据切片命令
      */

+ 2 - 0
src/main/java/com/fd/controller/ConvertController.java

@@ -11,6 +11,7 @@ import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -30,6 +31,7 @@ public class ConvertController {
     @Autowired
     private ConvertServer convertServer;
 
+    @ApiIgnore
     @GetMapping("test")
     public void test(HttpServletResponse response) throws Exception {
 

+ 2 - 0
src/main/java/com/fd/controller/DemController.java

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -93,6 +94,7 @@ public class DemController {
         return demServer.moveFileToServer(fileId, param);
     }
 
+    @ApiIgnore
     @RequiresRoles("admin")
     @ApiOperation("测试")
     @PostMapping("test")

+ 2 - 0
src/main/java/com/fd/controller/ModelController.java

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
@@ -227,6 +228,7 @@ public class ModelController {
     }
 
 
+    @ApiIgnore
     @RequiresRoles("admin")
     @ApiOperation("测试")
     @PostMapping("test")

+ 23 - 0
src/main/java/com/fd/controller/VectorController.java

@@ -92,6 +92,29 @@ public class VectorController {
 
     private static AtomicInteger sliceCount = new AtomicInteger();
 
+    @ApiOperation("精准查询, fileName:字段名,value:字段值")
+    @GetMapping("wfs/accurate/{fileId}/{fileName}/{value}/")
+    public R wfsAccurate(@PathVariable("fileName") String fileName, @PathVariable("value") String value, @PathVariable("fileId") Long fileId){
+        return vectorServer.wfsAccurate(fileId, fileName, value);
+    }
+
+    @ApiOperation("模糊查询, fileName:字段名,value:字段值")
+    @GetMapping("wfs/like/{fileId}/{fileName}/{value}/")
+    public R wfsLike(@PathVariable("fileName") String fileName, @PathVariable("value") String value, @PathVariable("fileId") Long fileId){
+        return vectorServer.wfsLike(fileId, fileName, value);
+    }
+
+    // @xMin @yMin @xMax @yMax
+    @ApiOperation("范围查询, xMin,yMin:最小值,xMax,yMax:最大值")
+    @GetMapping("wfs/scope/{fileId}/{xMin}/{yMin}/{xMax}/{yMax}/")
+    public R wfsScope(@PathVariable("fileId") Long fileId,
+                      @PathVariable("xMin") String xMin,
+                      @PathVariable("yMin") String yMin,
+                      @PathVariable("xMax") String xMax,
+                      @PathVariable("yMax") String yMax){
+        return vectorServer.wfsScope(fileId, xMin, yMin, xMax, yMax);
+    }
+
 
 
     @ApiOperation("上传矢量数据, coord:坐标(可以为空), 坐标格式:0,0,0,0,0,0,0")

+ 6 - 0
src/main/java/com/fd/entity/OutputFileEntity.java

@@ -144,4 +144,10 @@ public class OutputFileEntity extends BaseEntity implements Serializable {
     @Column
     private String fileType;
 
+    /**
+     * 要素数据路径
+     */
+    @Column
+    private String wfsPath;
+
 }

+ 2 - 0
src/main/java/com/fd/repository/OutputFileRepository.java

@@ -45,4 +45,6 @@ public interface OutputFileRepository extends JpaRepository<OutputFileEntity, Lo
     Page<OutputFileEntity> findByTypeAndUserId(String type, Long userId, Pageable pageable);
 
 
+
+
 }

+ 6 - 1
src/main/java/com/fd/server/VectorServer.java

@@ -7,7 +7,6 @@ import com.fd.entity.FileEntity;
 import com.fd.entity.OutputFileEntity;
 import com.fd.entity.StyleEntity;
 import com.fd.util.R;
-import org.springframework.data.domain.Page;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -77,6 +76,12 @@ public interface VectorServer extends BaseServer {
 
     Integer exeCmd(String cmd);
 
+    R wfsAccurate(Long id, String fileName, String value);
+
+    R wfsLike(Long fileId, String fileName, String value);
+
+    R wfsScope(Long fileId, String xMin, String yMin, String xMax, String yMax);
+
 //    /**
 //     * 根据用户权限查询
 //     * @param param

+ 143 - 1
src/main/java/com/fd/server/impl/VectorServerImpl.java

@@ -1,11 +1,13 @@
 package com.fd.server.impl;
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.fd.constant.Command;
 import com.fd.constant.MsgCode;
 import com.fd.constant.TypeCode;
-import com.fd.constant.UserCode;
 import com.fd.dto.ConfigJsonDto;
 import com.fd.dto.PageDto;
 import com.fd.dto.StyleDto;
@@ -19,6 +21,7 @@ import com.fd.repository.StyleRepository;
 import com.fd.repository.UserRepository;
 import com.fd.server.VectorServer;
 import com.fd.shiro.JWTUtil;
+import com.fd.util.CmdUtil;
 import com.fd.util.FileUtils;
 import com.fd.util.R;
 import com.fd.util.RegexUtils;
@@ -166,6 +169,11 @@ public class VectorServerImpl extends BaseServerImpl implements VectorServer {
             deleteFolder(path, entity);
         }
 
+        if (entity.getWfsPath() != null) {
+            String path = entity.getWfsPath();
+            deleteFolder(path, entity);
+        }
+
         // 文件类型
         if (entity.getGeojsonPath() != null) {
             log.info("test file geojson");
@@ -568,6 +576,132 @@ public class VectorServerImpl extends BaseServerImpl implements VectorServer {
         return isCmd;
     }
 
+    /**
+     * 精准查询
+     *
+     * @param fileId
+     * @param fileName 字段名
+     * @param value 字段值
+     * @return
+     */
+    @Override
+    public R wfsAccurate(Long fileId, String fileName, String value) {
+        log.warn("run wfsAccurate");
+
+        OutputFileEntity entity = getOutputFileEntity(fileId);
+        if (entity == null){
+            new R(50002, MsgCode.E50002);
+        }
+
+        String cmd = Command.VECTOR_WFS_ACCURATE;
+        String outFile = OUTPUT_FILE_PATH + "wfs" + File.separator + entity.getDirectory();
+        FileUtils.createDir(outFile);
+        String timeName = DateUtil.format(new DateTime(), "yyyyMMdd_HHmmss");
+        timeName = outFile + File.separator + timeName + ".json";
+
+        // 需要坐标转换后的shp文件
+        cmd = cmd.replace("@inputFile", entity.getCoordStrictPath());
+        cmd = cmd.replace("@outputFile", timeName);
+        cmd = cmd.replace("@fileName", fileName);
+        cmd = cmd.replace("@value", value);
+
+        Integer integer = CmdUtil.exeCmdSingle(cmd);
+        JSONObject original = null;
+        if (integer == 0) {
+            String s = FileUtils.readJsonLinux(timeName);
+            original = JSON.parseObject(s);
+
+            if (entity.getWfsPath() == null) {
+                //保存信息
+                entity.setWfsPath(outFile);
+                entity.setUpdateTime(new DateTime());
+                outputFileRepository.save(entity);
+            }
+
+        }
+        log.warn("end wfsAccurate");
+        return new R(200, original);
+    }
+
+    @Override
+    public R wfsLike(Long fileId, String fileName, String value) {
+        log.warn("run wfsLike");
+
+        OutputFileEntity entity = getOutputFileEntity(fileId);
+        if (entity == null){
+            new R(50002, MsgCode.E50002);
+        }
+
+        String cmd = Command.VECTOR_WFS_LIKE;
+        String outFile = OUTPUT_FILE_PATH + "wfs" + File.separator + entity.getDirectory();
+        FileUtils.createDir(outFile);
+        String timeName = DateUtil.format(new DateTime(), "yyyyMMdd_HHmmss");
+        timeName = outFile + File.separator + timeName + ".json";
+
+        // 需要坐标转换后的shp文件
+        cmd = cmd.replace("@inputFile", entity.getCoordStrictPath());
+        cmd = cmd.replace("@outputFile", timeName);
+        cmd = cmd.replace("@fileName", fileName);
+        cmd = cmd.replace("@value", value);
+
+        Integer integer = CmdUtil.exeCmdSingle(cmd);
+        JSONObject original = null;
+        if (integer == 0) {
+            String s = FileUtils.readJsonLinux(timeName);
+            original = JSON.parseObject(s);
+
+            if (entity.getWfsPath() == null) {
+                //保存信息
+                entity.setWfsPath(outFile);
+                entity.setUpdateTime(new DateTime());
+                outputFileRepository.save(entity);
+            }
+
+        }
+        log.warn("end wfsLike");
+        return new R(200, original);
+    }
+
+    @Override
+    public R wfsScope(Long fileId, String xMin, String yMin, String xMax, String yMax) {
+        log.warn("run wfsScope");
+
+        OutputFileEntity entity = getOutputFileEntity(fileId);
+        if (entity == null){
+            new R(50002, MsgCode.E50002);
+        }
+
+        String cmd = Command.VECTOR_WFS_SCOPE;
+        String outFile = OUTPUT_FILE_PATH + "wfs" + File.separator + entity.getDirectory();
+        FileUtils.createDir(outFile);
+        String timeName = DateUtil.format(new DateTime(), "yyyyMMdd_HHmmss");
+        timeName = outFile + File.separator + timeName + ".json";
+
+        // 需要坐标转换后的shp文件
+        cmd = cmd.replace("@inputFile", entity.getCoordStrictPath());
+        cmd = cmd.replace("@outputFile", timeName);
+        cmd = cmd.replace("@xMin", xMin);
+        cmd = cmd.replace("@yMin", yMin);
+        cmd = cmd.replace("@xMax", xMax);
+        cmd = cmd.replace("@yMax", yMax);
+
+        Integer integer = CmdUtil.exeCmdSingle(cmd);
+        JSONObject original = null;
+        if (integer == 0) {
+            String s = FileUtils.readJsonLinux(timeName);
+            original = JSON.parseObject(s);
+
+            if (entity.getWfsPath() == null) {
+                //保存信息
+                entity.setWfsPath(outFile);
+                entity.setUpdateTime(new DateTime());
+                outputFileRepository.save(entity);
+            }
+        }
+        log.warn("end wfsScope");
+        return new R(200, original);
+    }
+
 
     private Integer exeCmdSingle(String commandStr) {
 
@@ -785,6 +919,14 @@ public class VectorServerImpl extends BaseServerImpl implements VectorServer {
 
     }
 
+    private OutputFileEntity getOutputFileEntity(Long id) {
+        Optional<OutputFileEntity> o = outputFileRepository.findById(id);
+        if (o.isPresent()) {
+            return o.get();
+        }
+        return null;
+    }
+
 
     public static void main(String[] args) throws IOException {
 

+ 1 - 0
src/main/java/com/fd/util/CmdUtil.java

@@ -14,6 +14,7 @@ import java.io.InputStreamReader;
 public class CmdUtil {
 
     public static Integer exeCmdSingle(String commandStr) {
+        log.info("cmd: {}", commandStr );
 
         // 命令运行结果 1:失败, 0:成功
         Integer isCmd = null;