Browse Source

解析shp

gushoubang 1 year ago
parent
commit
fe5e870102

+ 13 - 11
onemap-modules/onemap-file/src/main/java/com/onemap/file/controller/SysFileController.java

@@ -2,8 +2,7 @@ package com.onemap.file.controller;
 
 import com.onemap.common.core.domain.UploadZipDTO;
 import com.onemap.common.core.web.domain.RequestResult;
-import com.onemap.file.domain.ShpFileDTO;
-import com.onemap.system.api.domain.GhtgCl;
+import com.onemap.file.service.SaveFileService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +15,6 @@ import com.onemap.system.api.domain.SysFile;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 文件请求处理
@@ -29,6 +27,8 @@ public class SysFileController {
 
     @Autowired
     private ISysFileService sysFileService;
+    @Autowired
+    private SaveFileService saveFileService;
 
     /**
      * 文件上传
@@ -62,11 +62,7 @@ public class SysFileController {
      * @return
      */
     @PostMapping("/splitFileUpload")
-    public R<SysFile> splitFileUpload(@RequestParam("file") MultipartFile file,
-                                      @RequestParam("chunk") int chunk,
-                                      @RequestParam("chunks") int chunks,
-                                      @RequestParam("name") String name,
-                                      @RequestParam("md5") String md5) {
+    public R<SysFile> splitFileUpload(@RequestParam("file") MultipartFile file, @RequestParam("chunk") int chunk, @RequestParam("chunks") int chunks, @RequestParam("name") String name, @RequestParam("md5") String md5) {
         try {
             // 上传并返回访问地址
             String url = sysFileService.splitFileUpload(file, chunk, chunks, name, md5);
@@ -111,10 +107,16 @@ public class SysFileController {
      *
      * @param file 文件
      */
-    @PostMapping("/uploadShpZip")
-    public RequestResult uploadShpZip(MultipartFile file) {
+    @PostMapping("/saveGeom")
+    public RequestResult saveGeom(MultipartFile file, Integer fromType, String geom, String fromRoute) {
         try {
-            RequestResult res = sysFileService.uploadShpZip(file);
+            RequestResult res = null;
+            if (fromType == 1) {
+                String id = saveFileService.saveDraw(geom, fromRoute);
+                res = RequestResult.success("上传成功", saveFileService.getById(id));
+            } else {
+                res = sysFileService.uploadShpZip(file, fromRoute);
+            }
             return res;
         } catch (Exception e) {
             e.printStackTrace();

+ 23 - 0
onemap-modules/onemap-file/src/main/java/com/onemap/file/domain/GeomResourceDTO.java

@@ -0,0 +1,23 @@
+package com.onemap.file.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+@TableName("t_fzss_zhxz_file")
+@Data
+public class GeomResourceDTO {
+    private String id;
+    private String filepath;
+    private String zippath;
+    private String geom;
+    @TableField(value = "from_type")
+    private Integer fromType;// 1:手绘,2:shp导入
+    @TableField(value = "create_time")
+    private Date createTime;
+    @TableField(value = "from_route")
+    private String fromRoute;
+    private Float area;
+}

+ 0 - 13
onemap-modules/onemap-file/src/main/java/com/onemap/file/domain/ShpFileDTO.java

@@ -1,13 +0,0 @@
-package com.onemap.file.domain;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-@TableName("t_fzss_zhxz_file")
-@Data
-public class ShpFileDTO {
-    private String id;
-    private String filepath;
-    private String zippath;
-    private String geom;
-}

+ 17 - 0
onemap-modules/onemap-file/src/main/java/com/onemap/file/domain/res/GeomRes.java

@@ -0,0 +1,17 @@
+package com.onemap.file.domain.res;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class GeomRes {
+    private String id;
+    private String geom;
+    @TableField(value = "from_type")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+    private Float area;
+}

+ 6 - 4
onemap-modules/onemap-file/src/main/java/com/onemap/file/mapper/ShpFileMapper.java

@@ -1,14 +1,16 @@
 package com.onemap.file.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.onemap.file.domain.ShpFileDTO;
-import org.apache.ibatis.annotations.Mapper;
+import com.onemap.file.domain.GeomResourceDTO;
+import com.onemap.file.domain.res.GeomRes;
 
 /**
  * 数据层
  *
  * @author onemap
  */
-public interface ShpFileMapper extends BaseMapper<ShpFileDTO> {
-    void saveGeom(ShpFileDTO shpFileDTO);
+public interface ShpFileMapper extends BaseMapper<GeomResourceDTO> {
+    void saveGeom(GeomResourceDTO geomResourceDTO);
+
+    GeomRes getOne(String id);
 }

+ 1 - 1
onemap-modules/onemap-file/src/main/java/com/onemap/file/service/ISysFileService.java

@@ -30,7 +30,7 @@ public interface ISysFileService {
      */
     String uploadAppendix(MultipartFile file) throws Exception;
 
-    RequestResult uploadShpZip(MultipartFile file) throws Exception;
+    RequestResult  uploadShpZip(MultipartFile file,String fromRoute) throws Exception;
 
     // GhtgCl uploadTgcl(MultipartFile file, Integer type) throws Exception;
 

+ 8 - 1
onemap-modules/onemap-file/src/main/java/com/onemap/file/service/SaveFileService.java

@@ -1,5 +1,12 @@
 package com.onemap.file.service;
 
+import com.onemap.file.domain.GeomResourceDTO;
+import com.onemap.file.domain.res.GeomRes;
+
 public interface SaveFileService {
-    String saveShpFile(String shpPath, String zippath) throws Exception;
+    String saveShpFile(String shpPath, String zippath, String fromRoute) throws Exception;
+
+    String saveDraw(String geom, String fromRoute);
+
+    GeomRes getById(String id);
 }

+ 3 - 9
onemap-modules/onemap-file/src/main/java/com/onemap/file/service/impl/LocalSysFileServiceImpl.java

@@ -190,7 +190,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     }
 
     @Override
-    public RequestResult uploadShpZip(MultipartFile file) throws Exception {
+    public RequestResult uploadShpZip(MultipartFile file,String fromRoute) throws Exception {
         // 获得文件名称
         String fileName = file.getOriginalFilename();
         // 获得文件后缀名
@@ -229,14 +229,8 @@ public class LocalSysFileServiceImpl implements ISysFileService {
             }
         }
         if (!"".equals(shpPath)) {
-            String id = saveFileService.saveShpFile(shpPath, dest.getPath());
-            // ShpFileDTO res = new ShpFileDTO();
-            // res.setFilepath(shpPath);
-            // res.setGeojson(getShpGeoJson(shpPath));
-            // res.setZippath(dest.getAbsolutePath());
-            Map<String, String> res = new HashMap<>();
-            res.put("id", id);
-            return RequestResult.success("上传成功", res);
+            String id = saveFileService.saveShpFile(shpPath, dest.getPath(),fromRoute);
+            return RequestResult.success("上传成功", saveFileService.getById(id));
         } else {
             return RequestResult.error("未检索到shp文件");
         }

+ 34 - 9
onemap-modules/onemap-file/src/main/java/com/onemap/file/service/impl/SaveFileImpl.java

@@ -2,8 +2,8 @@ package com.onemap.file.service.impl;
 
 import com.onemap.common.core.utils.StringUtils;
 import com.onemap.common.datasource.annotation.Master;
-import com.onemap.common.datasource.annotation.Slave;
-import com.onemap.file.domain.ShpFileDTO;
+import com.onemap.file.domain.GeomResourceDTO;
+import com.onemap.file.domain.res.GeomRes;
 import com.onemap.file.mapper.ShpFileMapper;
 import com.onemap.file.service.SaveFileService;
 import com.onemap.file.utils.WktUtils;
@@ -21,18 +21,43 @@ public class SaveFileImpl implements SaveFileService {
 
     @Override
     @Master
-    public String saveShpFile(String shpPath, String zippath) throws Exception {
+    public String saveShpFile(String shpPath, String zippath, String fromRoute) throws Exception {
         String ewkt = WktUtils.getShpWkt(shpPath);
 
-        ShpFileDTO shpFileDTO = new ShpFileDTO();
+        GeomResourceDTO geomResourceDTO = new GeomResourceDTO();
 
         String uuid = StringUtils.getUUID();
-        shpFileDTO.setId(uuid);
-        shpFileDTO.setZippath(zippath);
-        shpFileDTO.setFilepath(shpPath);
-        shpFileDTO.setGeom(ewkt);
+        geomResourceDTO.setId(uuid);
+        geomResourceDTO.setZippath(zippath);
+        geomResourceDTO.setFilepath(shpPath);
+        geomResourceDTO.setGeom(ewkt);
+        geomResourceDTO.setFromType(2);
+        geomResourceDTO.setFromRoute(fromRoute);
 
-        zhxzFileMapper.saveGeom(shpFileDTO);
+        zhxzFileMapper.saveGeom(geomResourceDTO);
         return uuid;
     }
+
+    @Override
+    @Master
+    public String saveDraw(String geom, String fromRoute) {
+        String ewkt = "SRID=4326;" + geom;
+
+        GeomResourceDTO geomResourceDTO = new GeomResourceDTO();
+
+        String uuid = StringUtils.getUUID();
+        geomResourceDTO.setId(uuid);
+
+        geomResourceDTO.setGeom(ewkt);
+        geomResourceDTO.setFromType(1);
+        geomResourceDTO.setFromRoute(fromRoute);
+
+        zhxzFileMapper.saveGeom(geomResourceDTO);
+        return uuid;
+    }
+    @Override
+    @Master
+    public GeomRes getById(String id) {
+        return zhxzFileMapper.getOne(id);
+    }
 }

+ 18 - 3
onemap-modules/onemap-file/src/main/resources/mapper/postgresql/ShpFileMapper.xml

@@ -4,15 +4,30 @@
 <mapper namespace="com.onemap.file.mapper.ShpFileMapper">
 
     <!-- 可根据自己的需求,是否要使用 -->
-    <resultMap type="com.onemap.file.domain.ShpFileDTO" id="shpFileMap">
+    <resultMap type="com.onemap.file.domain.GeomResourceDTO" id="shpFileMap">
+
+    </resultMap>
+
+    <resultMap type="com.onemap.file.domain.res.GeomRes" id="geomResMap">
 
     </resultMap>
 
     <insert id="saveGeom">
-        INSERT INTO t_fzss_zhxz_file (id, filepath, zippath, geom)
+        INSERT INTO t_fzss_zhxz_file (id, filepath, zippath, geom, from_type, create_time, area, from_route)
         VALUES (#{id},
                 #{filepath},
                 #{zippath},
-                public.st_transform(public.st_geomfromewkt(#{geom,jdbcType=OTHER}), 4326))
+                public.st_transform(public.st_geomfromewkt(#{geom,jdbcType=OTHER}), 4326),
+                #{fromType}, now(),
+                public.st_area(public.st_geomfromewkt(#{geom,jdbcType=OTHER})::public.geography),
+                #{fromRoute})
     </insert>
+    <select id="getOne" resultMap="geomResMap">
+        SELECT id,
+               public.st_asewkt(geom) AS geom,
+               area,
+               create_time
+        FROM t_fzss_zhxz_file
+        WHERE id = #{id}
+    </select>
 </mapper>