Przeglądaj źródła

矢量文件上传入库

chenendian 3 miesięcy temu
rodzic
commit
56919296d9

+ 43 - 0
siwei-modules/siwei-spatial/src/main/java/com/siwei/spatial/controller/file/SpatialFilesDbController.java

@@ -16,6 +16,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 空间与shp文件入库相关操作处理
@@ -115,6 +116,28 @@ public class SpatialFilesDbController extends BaseController {
     }
 
 
+    /**
+     * 根据上传类型和空间信息进行入库操作
+     * @param fromType
+     * @param geom
+     * @param filePath
+     * @param fromRoute
+     * @return
+     * @throws IOException
+     */
+    @PostMapping("/geom/saveToDb")
+    public R<TGeomDb> saveToDb(Integer fromType,String geom,String filePath, String fromRoute ) throws IOException {
+        TGeomDb geomDb = null;
+        if (fromType == 1) { //直接上传几何信息
+            geomDb = iSpatialFilesDbService.uploadAddShpDrawV1(geom, fromRoute, fromType);
+        } else if (fromType == 2)  {//文件进行解压并入库
+            geomDb = iSpatialFilesDbService.uploadAddShpFileV1(filePath, fromRoute, fromType);
+        }
+        return R.ok(geomDb);
+    }
+
+
+
     @PostMapping("/geom/save")
     // @InnerAuth
     public R<TGeomDb> saveGeom(@RequestBody Map<String,Object> geoms ) throws IOException {
@@ -122,6 +145,26 @@ public class SpatialFilesDbController extends BaseController {
         return R.ok(iSpatialFilesDbService.thirdUploadGeom(geomsList));
     }
 
+    @GetMapping("/test/parse")
+    public R<List<Map<String,Object>>> parse(@RequestParam("filePath") String filePath ) {
+        if(StringUtils.isBlank(filePath)){
+            filePath = "C:\\Users\\Administrator\\Desktop\\07\\shp_deom\\给一码管地\\地籍区.shp";
+        }
+        List<Map<String,Object>> res = iSpatialFilesDbService.testReadShape(filePath);
+        Map<String,Object> obj = res.get(0);
+        List<String> lll = obj.keySet().stream().sorted().collect(Collectors.toList());
+        System.out.println(lll);
+        System.exit(0);
+        //iSpatialFilesDbService.testInsertShp(res);
+        return R.ok(res);
+    }
+
+    @GetMapping("/test/getShpData")
+    public R<List<Map<String,Object>>> getShpData(@RequestParam("tabeName") String tabeName ) {
+        List<Map<String,Object>> res = iSpatialFilesDbService.testGetShpData(tabeName);
+        return R.ok(res);
+    }
+
 
 
 }

+ 23 - 0
siwei-modules/siwei-spatial/src/main/java/com/siwei/spatial/mapper/file/TGeomDbDetailsMapper.java

@@ -2,8 +2,10 @@ package com.siwei.spatial.mapper.file;
 
 import com.siwei.spatial.api.domain.file.TGeomDb;
 import com.siwei.spatial.api.domain.file.TGeomDbDetails;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -72,4 +74,25 @@ public interface TGeomDbDetailsMapper
     public int deleteTGeomDbDetailsByIds(String[] ids);
 
     public TGeomDb sumGeomDetailsByUploadId(String id);
+
+    /**
+     * 批量插入地籍子区数据
+     * @param list 数据列表
+     * @param shpDbSRID 坐标系SRID
+     * @return 结果
+     */
+    public int batchInsertDjzq(@Param("list") List<Map<String, Object>> list, @Param("shpDbSRID") Integer shpDbSRID);
+
+    /**
+     * 批量插入地籍区数据
+     * @param list 数据列表
+     * @param shpDbSRID 坐标系SRID
+     * @return 结果
+     */
+    public int batchInsertDjq(@Param("list") List<Map<String, Object>> list, @Param("shpDbSRID") Integer shpDbSRID);
+
+
+    List<Map<String,Object>> selectTableDataAndGeom(@Param("tableName") String tableName);
+
+
 }

+ 15 - 0
siwei-modules/siwei-spatial/src/main/java/com/siwei/spatial/service/file/ISpatialFilesDbService.java

@@ -1,9 +1,11 @@
 package com.siwei.spatial.service.file;
 
 import com.siwei.spatial.api.domain.file.TGeomDb;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 public interface ISpatialFilesDbService {
 
@@ -12,4 +14,17 @@ public interface ISpatialFilesDbService {
     TGeomDb readGeom(String shpFileName, String geom, String fromRoute);
 
     TGeomDb thirdUploadGeom(List<String> geomsList);
+
+    List<Map<String,Object>> testReadShape(String shpFile);
+
+    String testInsertShp(List<Map<String,Object>> shpDataMapList);
+
+
+    List<Map<String,Object>> testGetShpData(String tabeName) ;
+
+    TGeomDb uploadAddShpDrawV1(String geom, String fromRoute, Integer fromtype);
+
+    TGeomDb uploadAddShpFileV1(String filePath, String fromRoute, Integer fromtype);
+
+
 }

+ 88 - 0
siwei-modules/siwei-spatial/src/main/java/com/siwei/spatial/service/file/impl/SpatialFilesDbServiceImpl.java

@@ -5,6 +5,7 @@ import com.siwei.common.core.utils.StringUtils;
 import com.siwei.common.core.utils.uuid.IdUtils;
 import com.siwei.spatial.api.domain.file.TGeomDb;
 import com.siwei.spatial.api.domain.file.TGeomDbDetails;
+import com.siwei.spatial.mapper.file.TGeomDbDetailsMapper;
 import com.siwei.spatial.service.file.ISpatialFilesDbService;
 import com.siwei.spatial.service.file.ITGeomDbDetailsService;
 import com.siwei.spatial.service.file.ITGeomDbService;
@@ -15,6 +16,8 @@ import org.geotools.data.simple.SimpleFeatureCollection;
 import org.geotools.data.simple.SimpleFeatureIterator;
 import org.geotools.referencing.CRS;
 import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.type.AttributeDescriptor;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -28,8 +31,10 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.nio.charset.Charset;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class SpatialFilesDbServiceImpl implements ISpatialFilesDbService {
@@ -66,6 +71,12 @@ public class SpatialFilesDbServiceImpl implements ISpatialFilesDbService {
     private ITGeomDbService itGeomDbService;
 
 
+    @Autowired
+    private TGeomDbDetailsMapper tGeomDbDetailsMapper;
+
+
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public TGeomDb readShpFile(String shpFileName, String shpFilePath, String fromRoute) throws IOException {
@@ -366,6 +377,83 @@ public class SpatialFilesDbServiceImpl implements ISpatialFilesDbService {
     }
 
 
+    //todo 这里文件上传获取矢量处理
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public TGeomDb  uploadAddShpFileV1(String filePath, String fromRoute, Integer fromtype) {
+        TGeomDb dto = new TGeomDb();
+        dto.setId(IdUtils.fastSimpleUUID());
+        return dto;
+    }
+
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public TGeomDb  uploadAddShpDrawV1(String geom, String fromRoute, Integer fromtype) {
+        String ewkt = "SRID=" + shpDbSRID + ";" + geom;
+        if (geom.toLowerCase().indexOf("srid") >= 0) {
+            ewkt = geom;
+        }
+        TGeomDb dto = new TGeomDb();
+        dto.setId(IdUtils.fastSimpleUUID());
+
+        dto.setName("");
+        dto.setShppath("");
+        dto.setFiletype("1");
+        dto.setFromroute(fromRoute);
+        dto.setGeom(ewkt);
+        dto.setGeomNumber(1L);
+        // 计算面积
+        String geomArea = "0";
+        WKTReader reader = new WKTReader();
+        Geometry geometry = null;
+        try {
+            geometry = reader.read(geom);
+            geomArea = String.valueOf(geometry.getArea());
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+        }
+        dto.setGeomArea(new BigDecimal(geomArea));
+        dto.setShpDbSRID(shpDbSRID);
+        dto.setShpAreaSRID(shpAreaSRID);
+        dto.setShpOutSRID(shpOutSRID);
+        dto.setShpAreaGeography(shpAreaGeography);
+        itGeomDbService.insertTGeomDb(dto);
+        return dto;
+    }
+
+
+
+    @Override
+    public List<Map<String,Object>> testReadShape(String shpFile) {
+        List<Map<String, Object>> shpFeaturesList = readShapeFile(new File(shpFile));
+        return shpFeaturesList;
+    }
+
+
+    @Override
+    public String testInsertShp(List<Map<String,Object>> shpDataMapList) {
+        //List<Map<String, Object>> shpFeaturesList = readShapeFile(new File(shpFile));
+        //shpDataMapList = shpDataMapList.stream().filter(map -> map.get("djqdm").equals("360122015")).collect(Collectors.toList());
+        //tGeomDbDetailsMapper.batchInsertDjq(shpDataMapList,4326);
+        tGeomDbDetailsMapper.batchInsertDjzq(shpDataMapList,4326);
+        return "";
+    }
+
+
+    @Override
+    public List<Map<String,Object>> testGetShpData(String tabeName) {
+        List<Map<String,Object>>  geoms = tGeomDbDetailsMapper.selectTableDataAndGeom(tabeName);
+        return geoms;
+    }
+
+
+
+
+
+
+
 
 
 

+ 55 - 0
siwei-modules/siwei-spatial/src/main/resources/mapper/postgresql/spatial/file/TGeomDbDetailsMapper.xml

@@ -104,4 +104,59 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select public.st_asewkt(public.st_union(geom)) AS  geom, count(*) geom_number, sum(geom_area) geom_area
         from t_geom_db_details where  upload_id = #{id}
     </select>
+
+    <insert id="batchInsertDjzq">
+        INSERT INTO vector.djzq (bsm, ysdm, djzqdm, djzqmc, bz, geom, valid_flag)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+        (
+            #{item.bsm},
+            #{item.ysdm},
+            #{item.djzqdm},
+            #{item.djzqmc},
+            #{item.projectid},
+            <choose>
+                <when test="item.the_geom != null and item.the_geom != ''">
+                    public.st_transform(public.st_geomfromewkt(#{item.the_geom}), #{shpDbSRID})
+                </when>
+                <otherwise>
+                    null
+                </otherwise>
+            </choose>,
+            1
+        )
+        </foreach>
+    </insert>
+
+    <insert id="batchInsertDjq">
+        INSERT INTO vector.djq (bsm, ysdm, djqdm, djqmc, bz, geom, valid_flag)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.bsm},
+            #{item.ysdm},
+            #{item.djqdm},
+            #{item.djqmc},
+            #{item.projectid},
+            <choose>
+                <when test="item.the_geom != null and item.the_geom != ''">
+                    public.st_transform(public.st_geomfromewkt(#{item.the_geom}), #{shpDbSRID})
+                </when>
+                <otherwise>
+                    null
+                </otherwise>
+            </choose>,
+            1
+            )
+        </foreach>
+    </insert>
+
+    <select id="selectTableDataAndGeom"   resultType="Map">
+        SELECT * ,public.st_asewkt(geom) AS geom2
+        FROM vector.${tableName}
+        WHERE 1=1
+    </select>
+
+
+
 </mapper>