Ver Fonte

添加距离测算

gushoubang há 9 meses atrás
pai
commit
556341496d

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

@@ -34,7 +34,11 @@ public class AnalyseUtilsDBController extends BaseController {
      */
     @PostMapping("/intersects/table_wkt")
     @Slave
-    public RequestResult intersectsTableWkt(@RequestParam(value = "inputTable") String inputTable, @RequestParam(value = "inputSRID", required = false) Integer inputSRID, @RequestParam(value = "inputIds", required = false) List<String> inputIds, @RequestParam(value = "intersectsWkt") String intersectsWkt, @RequestParam(value = "intersectsWktSRID", required = false) Integer intersectsWktSRID) {
+    public RequestResult intersectsTableWkt(@RequestParam(value = "inputTable") String inputTable,
+                                            @RequestParam(value = "inputSRID", required = false) Integer inputSRID,
+                                            @RequestParam(value = "inputIds", required = false) List<String> inputIds,
+                                            @RequestParam(value = "intersectsWkt") String intersectsWkt,
+                                            @RequestParam(value = "intersectsWktSRID", required = false) Integer intersectsWktSRID) {
         return RequestResult.success(analyseUtilsDBService.intersectsTableWkt(inputTable, inputSRID, inputIds, intersectsWkt, intersectsWktSRID));
     }
 
@@ -52,7 +56,12 @@ public class AnalyseUtilsDBController extends BaseController {
      */
     @PostMapping("/intersection/table_wkt")
     @Slave
-    public RequestResult intersectionTableWkt(@RequestParam(value = "inputTable") String inputTable, @RequestParam(value = "inputSRID", required = false) Integer inputSRID, @RequestParam(value = "inputIds", required = false) List<String> inputIds, @RequestParam(value = "intersectionWkt") String intersectionWkt, @RequestParam(value = "intersectionWktSRID", required = false) Integer intersectionWktSRID, @RequestParam(value = "outputColumn", required = false) List<String> outputColumn) {
+    public RequestResult intersectionTableWkt(@RequestParam(value = "inputTable") String inputTable,
+                                              @RequestParam(value = "inputSRID", required = false) Integer inputSRID,
+                                              @RequestParam(value = "inputIds", required = false) List<String> inputIds,
+                                              @RequestParam(value = "intersectionWkt") String intersectionWkt,
+                                              @RequestParam(value = "intersectionWktSRID", required = false) Integer intersectionWktSRID,
+                                              @RequestParam(value = "outputColumn", required = false) List<String> outputColumn) {
         return RequestResult.success(analyseUtilsDBService.intersectionTableWkt(inputTable, inputSRID, inputIds, intersectionWkt, intersectionWktSRID, outputColumn));
     }
 
@@ -60,15 +69,50 @@ public class AnalyseUtilsDBController extends BaseController {
     /**
      * 计算wkt包含table中的数据,返回table id
      *
-     * @param inputTable  TABLE名称(vater空间中表)
-     * @param inputIds    查询数据集ID
-     * @param containsWkt wkt
+     * @param tableName TABLE名称(vater空间中表)
+     * @param tableIds  查询数据集ID
+     * @param ewkt      wkt
      * @return
      */
     @PostMapping("/contains/table_wkt")
+    public RequestResult containsTableWkt(@RequestParam(value = "tableName") String tableName,
+                                          @RequestParam(value = "tableIds", required = false) List<String> tableIds,
+                                          @RequestParam(value = "ewkt") String ewkt) {
+        return RequestResult.success(analyseUtilsDBService.containsTableWkt(tableName, tableIds, ewkt));
+    }
+
+    /**
+     * 计算TableA包含TableB中的数据,返回tableB id
+     *
+     * @param tableNameA
+     * @param tableNameB
+     * @param tableIdsB
+     * @return
+     */
+    @PostMapping("/contains/tables")
     @Slave
-    public RequestResult containsTableWkt(@RequestParam(value = "inputTable") String inputTable, @RequestParam(value = "inputIds", required = false) List<String> inputIds, @RequestParam(value = "containsWkt") String containsWkt) {
-        return RequestResult.success(analyseUtilsDBService.containsTableWkt(inputTable, inputIds, containsWkt));
+    public RequestResult containsTables(@RequestParam(value = "inputTableA") String tableNameA,
+                                        @RequestParam(value = "inputTableB") String tableNameB,
+                                        @RequestParam(value = "inputIdsB", required = false) List<String> tableIdsB) {
+        return RequestResult.success(analyseUtilsDBService.containsTables(tableNameA, tableNameB, tableIdsB));
+    }
+
+
+    /**
+     * 计算wkt距离范围内table中的数据,返回table id
+     *
+     * @param tableName TABLE名称(vater空间中表)
+     * @param tableIds  查询数据集ID
+     * @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 = "ewkt") String ewkt,
+                                          @RequestParam(value = "distance") Integer distance) {
+        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(tableName, tableIds, ewkt, distance));
     }
 
     /**
@@ -79,9 +123,12 @@ public class AnalyseUtilsDBController extends BaseController {
      * @param inputIdsB
      * @return
      */
-    @PostMapping("/contains/tables")
+    @PostMapping("/distance/tables")
     @Slave
-    public RequestResult containsTables(@RequestParam(value = "inputTableA") String inputTableA, @RequestParam(value = "inputTableB") String inputTableB, @RequestParam(value = "inputIdsB", required = false) List<String> inputIdsB) {
-        return RequestResult.success(analyseUtilsDBService.containsTables(inputTableA, inputTableB, inputIdsB));
+    public RequestResult distanceTables(@RequestParam(value = "inputTableA") String inputTableA,
+                                        @RequestParam(value = "inputTableB") String inputTableB,
+                                        @RequestParam(value = "inputIdsB", required = false) List<String> inputIdsB,
+                                        @RequestParam(value = "distance") Integer distance) {
+        return RequestResult.success(analyseUtilsDBService.distanceTables(inputTableA, inputTableB, inputIdsB, distance));
     }
 }

+ 27 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/AnalyseUtilsDBMapper.java

@@ -70,4 +70,31 @@ public interface AnalyseUtilsDBMapper {
             @Param("tableNameA") String tableNameA,
             @Param("tableNameB") String tableNameB,
             @Param("tableIdsB") List<String> tableIdsB);
+
+    /**
+     * 计算wkt距离范围内table中的数据,返回table id
+     *
+     * @param tableName TABLE名称(vater空间中表)
+     * @param tableIds  查询数据集ID
+     * @param ewkt      wkt
+     * @return
+     */
+    List<String> distanceTableWkt(
+            @Param("tableName") String tableName,
+            @Param("tableIds") List<String> tableIds,
+            @Param("ewkt") String ewkt,
+            @Param("distance") Integer distance);
+
+    /**
+     * 计算TableA距离范围内TableB中的数据,返回tableB id
+     *
+     * @param tableNameA
+     * @param tableNameB
+     * @return
+     */
+    List<String> distanceTables(
+            @Param("tableNameA") String tableNameA,
+            @Param("tableNameB") String tableNameB,
+            @Param("tableIdsB") List<String> tableIdsB,
+            @Param("distance") Integer distance);
 }

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

@@ -49,9 +49,9 @@ public interface AnalyseUtilsDBService {
     /**
      * 计算wkt包含table中的数据,返回table id
      *
-     * @param inputTable      TABLE名称(vater空间中表)
-     * @param inputIds        查询数据集ID
-     * @param containsWkt     wkt
+     * @param inputTable  TABLE名称(vater空间中表)
+     * @param inputIds    查询数据集ID
+     * @param containsWkt wkt
      * @return
      */
     List<String> containsTableWkt(
@@ -70,4 +70,28 @@ public interface AnalyseUtilsDBService {
             String inputTableA,
             String inputTableB,
             List<String> inputIdsB);
+    /**
+     * 计算wkt距离范围内table中的数据,返回table id
+     *
+     * @param inputTable  TABLE名称(vater空间中表)
+     * @param inputIds    查询数据集ID
+     * @param containsWkt wkt
+     * @return
+     */
+    List<String> distanceTableWkt(String inputTable,
+                                  List<String> inputIds,
+                                  String containsWkt,
+                                  Integer distance);
+    /**
+     * 计算TableA距离范围内TableB中的数据,返回tableB id
+     *
+     * @param inputTableA
+     * @param inputIdsB
+     * @return
+     */
+    List<String> distanceTables(
+            String inputTableA,
+            String inputTableB,
+            List<String> inputIdsB,
+            Integer distance);
 }

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

@@ -26,12 +26,22 @@ public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
     }
 
     @Override
-    public List<String> containsTableWkt(String inputTable, List<String> inputIds, String containsWkt) {
-        return analyseUtilsDBMapper.containsTableWkt(inputTable, inputIds, containsWkt);
+    public List<String> containsTableWkt(String tableName, List<String> tableIds, String ewkt) {
+        return analyseUtilsDBMapper.containsTableWkt(tableName, tableIds, ewkt);
     }
 
     @Override
-    public List<String> containsTables(String inputTableA, String inputTableB, List<String> inputIdsB) {
-        return analyseUtilsDBMapper.containsTables(inputTableA, inputTableB, inputIdsB);
+    public List<String> containsTables(String tableNameA, String tableNameB, List<String> tableIdsB) {
+        return analyseUtilsDBMapper.containsTables(tableNameA, tableNameB, tableIdsB);
+    }
+
+    @Override
+    public List<String> distanceTableWkt(String tableName, List<String> tableIds, String ewkt, Integer distance) {
+        return analyseUtilsDBMapper.distanceTableWkt(tableName, tableIds, ewkt, distance);
+    }
+
+    @Override
+    public List<String> distanceTables(String tableNameA, String tableNameB, List<String> tableIdsB, Integer distance) {
+        return analyseUtilsDBMapper.distanceTables(tableNameA, tableNameB, tableIdsB, distance);
     }
 }

+ 24 - 0
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/fzss/AnalyseUtilsDBMapper.xml

@@ -116,4 +116,28 @@
         WHERE PUBLIC.st_contains(tableA.geom, tableB.geom)
         )
     </select>
+
+    <select id="distanceTableWkt" resultType="String">
+        SELECT id
+        FROM "${tableName}" inTbale
+        where public.st_distance(
+        inTbale.geom::geography,
+        public.st_geomfromewkt(${ewkt})::geography) &lt; #{distance}
+        <if test="inputIds != null and inputIds.size()>0 ">
+            and (inTbale.id)::VARCHAR in
+            <foreach collection="inputIds" item="id" open="(" close=")" separator=",">#{id}</foreach>
+        </if>
+    </select>
+
+    <select id="distanceTables" resultType="String">
+        SELECT id
+        FROM "${tableName}" inTbale
+        where public.st_distance(
+        inTbale.geom::geography,
+        public.st_geomfromewkt(#{ewkt})::geography) &lt; #{distance}
+        <if test="inputIds != null and inputIds.size()>0 ">
+            and (inTbale.id)::VARCHAR in
+            <foreach collection="inputIds" item="id" open="(" close=")" separator=",">#{id}</foreach>
+        </if>
+    </select>
 </mapper>