浏览代码

空间计算添加

gushoubang 9 月之前
父节点
当前提交
cdef00d69e

+ 6 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/AnalyseUtilsDBController.java

@@ -115,15 +115,15 @@ public class AnalyseUtilsDBController extends BaseController {
      *
      * @param tableName TABLE名称(vater空间中表)
      * @param tableIds  查询数据集ID
-     * @param wkt       wkt
+     * @param ewkt       wkt
      * @return
      */
     @PostMapping("/contains/table_wkt")
     @Slave
     public RequestResult containsTableWkt(@RequestParam(value = "tableName") String tableName,
                                           @RequestParam(value = "tableIds", required = false) List<String> tableIds,
-                                          @RequestParam(value = "wkt") String wkt) {
-        return RequestResult.success(analyseUtilsDBService.containsTableWkt(tableName, tableIds, wkt));
+                                          @RequestParam(value = "ewkt") String ewkt) {
+        return RequestResult.success(analyseUtilsDBService.containsTableWkt(tableName, tableIds, ewkt));
     }
 
     /**
@@ -148,16 +148,16 @@ public class AnalyseUtilsDBController extends BaseController {
      *
      * @param tableName TABLE名称(vater空间中表)
      * @param tableIds  查询数据集ID
-     * @param wkt       wkt
+     * @param ewkt       wkt
      * @return
      */
     @PostMapping("/distance/table_wkt")
     @Slave
     public RequestResult distanceTableWkt(@RequestParam(value = "tableName") String tableName,
                                           @RequestParam(value = "tableIds", required = false) List<String> tableIds,
-                                          @RequestParam(value = "wkt") String wkt,
+                                          @RequestParam(value = "wkt") String ewkt,
                                           @RequestParam(value = "distance") Integer distance) {
-        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(tableName, tableIds, wkt, distance));
+        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(tableName, tableIds, ewkt, distance));
     }
 
     /**

+ 5 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/controller/analyse/CreateUtilsDBController.java

@@ -45,17 +45,16 @@ public class CreateUtilsDBController extends BaseController {
      * 生成表tableNameB空间数据的差集,B-ST_Intersection(A,B)
      *
      * @param tableNameA
+     * @param inputIdsA
      * @param tableNameB
-     * @param tableIdsB
      * @return
      */
     @PostMapping("/difference/tables")
     @Slave
-    public RequestResult differenceTables(@RequestParam(value = "inputTableA") String tableNameA,
-                                          @RequestParam(value = "inputTableB") String tableNameB,
-                                          @RequestParam(value = "inputIdsB", required = false) List<String> tableIdsB) {
-
-        String newTable =createUtilsDBService.differenceTables(tableNameA, tableNameB, tableIdsB);
+    public RequestResult differenceTables(@RequestParam(value = "tableNameA") String tableNameA,
+                                          @RequestParam(value = "inputIdsA", required = false) List<String> inputIdsA,
+                                          @RequestParam(value = "tableNameB") String tableNameB) {
+        String newTable = createUtilsDBService.differenceTables(tableNameA, inputIdsA, tableNameB);
         Map<String, String> result = new HashMap<>();
         result.put("tableName", newTable);
         return RequestResult.success(newTable);

+ 5 - 3
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/CreateUtilsDBMapper.java

@@ -20,12 +20,14 @@ public interface CreateUtilsDBMapper {
      * 生成表tableNameB空间数据的差集,B-ST_Intersection(A,B)
      *
      * @param tableNameA
+     * @param tableIdsA
      * @param tableNameB
-     * @param tableIdsB
+     * @param temporaryTable
      * @return
      */
     void differenceTables(@Param("tableNameA") String tableNameA,
+                          @Param("tableIdsA") List<String> tableIdsA,
                           @Param("tableNameB") String tableNameB,
-                          @Param("tableIdsB") List<String> tableIdsB,
-                          @Param("newTableName") String newTableName);
+                          @Param("newTableName") String newTableName,
+                          @Param("temporaryTable")String temporaryTable);
 }

+ 4 - 4
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/AnalyseUtilsDBService.java

@@ -51,13 +51,13 @@ public interface AnalyseUtilsDBService {
      *
      * @param inputTable  TABLE名称(vater空间中表)
      * @param inputIds    查询数据集ID
-     * @param wkt wkt
+     * @param ewkt wkt
      * @return
      */
     List<Integer> containsTableWkt(
             String inputTable,
             List<String> inputIds,
-            String wkt);
+            String ewkt);
 
     /**
      * 计算TableA包含TableB中的数据,返回tableB id
@@ -75,12 +75,12 @@ public interface AnalyseUtilsDBService {
      *
      * @param inputTable  TABLE名称(vater空间中表)
      * @param inputIds    查询数据集ID
-     * @param wkt wkt
+     * @param ewkt wkt
      * @return
      */
     List<Integer> distanceTableWkt(String inputTable,
                                   List<String> inputIds,
-                                  String wkt,
+                                  String ewkt,
                                   Integer distance);
     /**
      * 计算TableA距离范围内TableB中的数据,返回tableB id

+ 2 - 4
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/CreateUtilsDBService.java

@@ -19,11 +19,9 @@ public interface CreateUtilsDBService {
      * 生成表tableNameB空间数据的差集,B-ST_Intersection(A,B)
      *
      * @param tableNameA
+     * @param tableIdsA
      * @param tableNameB
-     * @param tableIdsB
      * @return
      */
-    String differenceTables(String tableNameA,
-                            String tableNameB,
-                            List<String> tableIdsB);
+    String differenceTables(String tableNameA, List<String> tableIdsA, String tableNameB);
 }

+ 4 - 6
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/AnalyseUtilsDBServiceImpl.java

@@ -11,7 +11,7 @@ import java.util.Map;
 
 @Service
 public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
-    String Srid4326 = "SRID=4326;";
+    // String Srid4326 = "SRID=4326;";
     @Autowired
     private AnalyseUtilsDBMapper analyseUtilsDBMapper;
 
@@ -26,8 +26,7 @@ public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
     }
 
     @Override
-    public List<Integer> containsTableWkt(String tableName, List<String> tableIds, String wkt) {
-        String ewkt = Srid4326 + wkt;
+    public List<Integer> containsTableWkt(String tableName, List<String> tableIds, String ewkt) {
         return analyseUtilsDBMapper.containsTableWkt(tableName, tableIds, ewkt);
     }
 
@@ -37,9 +36,8 @@ public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
     }
 
     @Override
-    public List<Integer> distanceTableWkt(String tableName, List<String> tableIds, String wkt, Integer distance) {
-        String ewkt=Srid4326+wkt;
-        return analyseUtilsDBMapper.distanceTableWkt(tableName, tableIds, ewkt, distance);
+    public List<Integer> distanceTableWkt(String tableName, List<String> tableIds, String ewkt, Integer distance) {
+         return analyseUtilsDBMapper.distanceTableWkt(tableName, tableIds, ewkt, distance);
     }
 
     @Override

+ 7 - 4
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/impl/CreateUtilsDBServiceImpl.java

@@ -14,15 +14,18 @@ public class CreateUtilsDBServiceImpl implements CreateUtilsDBService {
 
     @Override
     public String bufferTable(String tableName, float radius) {
-        String newTableName = tableName + "_buffer" + radius;
+        long timestamp = System.currentTimeMillis();
+        String newTableName = tableName + "_buffer_"  + timestamp;
         createUtilsDBMapper.bufferTable(tableName, radius, newTableName);
         return newTableName;
     }
 
     @Override
-    public String differenceTables(String tableNameA, String tableNameB, List<String> tableIdsB) {
-        String newDiffName = tableNameB + "_diff_" + tableNameA;
-        createUtilsDBMapper.differenceTables(tableNameA, tableNameB, tableIdsB, newDiffName);
+    public String differenceTables(String tableNameA, List<String> tableIdsA, String tableNameB) {
+        long timestamp = System.currentTimeMillis();
+        String newDiffName = tableNameA + "_diff_" + tableNameB+"_" + timestamp;
+        String temporaryTable = "temporaryTable_" + timestamp;
+        createUtilsDBMapper.differenceTables(tableNameA, tableIdsA, tableNameB, newDiffName, temporaryTable);
         return newDiffName;
     }
 }

+ 27 - 12
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/raster/CreateUtilsDBMapper.xml

@@ -5,25 +5,40 @@
 <mapper namespace="com.onemap.analyse.mapper.CreateUtilsDBMapper">
     <insert id="bufferTable">
         CREATE TABLE "${newTableName}" AS
-        SELECT public.ST_Buffer(geom, #{radius}) AS buffered_geom
+        SELECT id,public.ST_Buffer(geom, #{radius}) AS geom
         FROM "${tableName}"
         WHERE geom IS NOT NULL
     </insert>
     <insert id="differenceTables">
-        CREATE TABLE "${newTableName}" AS
-        SELECT CASE
-        WHEN b.geom IS NOT NULL THEN public.ST_Difference(a.geom, b.geom)
-        ELSE a.geom END AS geom_result
-        FROM "${tableNameB}" a
-        LEFT JOIN "${tableNameA}" b ON public.ST_Intersects(a.geom, b.geom)
+        DROP TABLE IF EXISTS "${temporaryTable}";
+
+        CREATE TABLE "${temporaryTable}" AS SELECT
+        public.ST_Union ( b.geom ) AS geomRes
+        FROM
+        "${tableNameA}" a,
+        "${tableNameB}" b
         WHERE
-        b.geom IS NOT NULL
-        <if test="tableIdsB != null and tableIdsB.size() > 0">
+        public.st_intersects ( a.geom, b.geom )
+        <if test="tableIdsA != null and tableIdsA.size() > 0">
             AND a.id::VARCHAR IN
-            <foreach collection="tableIdsB" item="tableId" open="(" close=")" separator=",">
+            <foreach collection="tableIdsA" item="tableId" open="(" close=")" separator=",">
                 #{tableId}
             </foreach>
-        </if>
-    </insert>
+        </if>;
 
+        CREATE TABLE "${newTableName}" AS
+        SELECT id,public.ST_Difference ( a.geom, b.geomRes ) AS geom
+        FROM
+        "${tableNameA}" a,
+        "${temporaryTable}" b
+        WHERE 1=1
+        <if test="tableIdsA != null and tableIdsA.size() > 0">
+            AND a.id::VARCHAR IN
+            <foreach collection="tableIdsA" item="tableId" open="(" close=")" separator=",">
+                #{tableId}
+            </foreach>
+        </if>;
+
+        DROP TABLE IF EXISTS "${temporaryTable}";
+    </insert>
 </mapper>