Browse Source

距离类型

gushoubang 9 months ago
parent
commit
bbcec38e13

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

@@ -69,11 +69,11 @@ public class AnalyseUtilsDBController extends BaseController {
     @PostMapping("/distance/table_wkt")
     @Slave
     public RequestResult distanceTableWkt(@RequestBody DistanceTableWktVo distanceTableWktVo) {
-        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(distanceTableWktVo.getTableName(), distanceTableWktVo.getTableIds(), distanceTableWktVo.getEwkt(), distanceTableWktVo.getDistance()));
+        return RequestResult.success(analyseUtilsDBService.distanceTableWkt(distanceTableWktVo.getTableName(), distanceTableWktVo.getTableIds(), distanceTableWktVo.getEwkt(), distanceTableWktVo.getDistance(),distanceTableWktVo.getDistanceType()));
     }
 
     /**
-     * 计算距离TableA小于指定距离中TableB中的数据,返回tableB id
+     * 计算距离TableA指定距离中TableB中的数据,返回tableB id
      *
      * @param distanceTablesVo
      * @return

+ 2 - 0
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/domain/vo/DistanceTableWktVo.java

@@ -10,4 +10,6 @@ public class DistanceTableWktVo {
     List<String> tableIds;
     String ewkt;
     Integer distance;
+    // 1:>,2>=,3<,4<=
+    Integer distanceType;
 }

+ 2 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/AnalyseUtilsDBMapper.java

@@ -59,7 +59,8 @@ public interface AnalyseUtilsDBMapper {
             @Param("tableName") String tableName,
             @Param("tableIds") List<String> tableIds,
             @Param("ewkt") String ewkt,
-            @Param("distance") Integer distance);
+            @Param("distance") Integer distance,
+            @Param("distanceType") Integer distanceType);
 
     /**
      * 计算TableA距离范围内TableB中的数据,返回tableB id

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

@@ -58,7 +58,8 @@ public interface AnalyseUtilsDBService {
     List<String> distanceTableWkt(String inputTable,
                                    List<String> inputIds,
                                    String ewkt,
-                                   Integer distance);
+                                   Integer distance,
+                                  Integer distanceType);
 
     /**
      * 计算TableA距离范围内TableB中的数据,返回tableB id

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

@@ -29,8 +29,8 @@ public class AnalyseUtilsDBServiceImpl implements AnalyseUtilsDBService {
     }
 
     @Override
-    public List<String> distanceTableWkt(String tableName, List<String> tableIds, String ewkt, Integer distance) {
-        return analyseUtilsDBMapper.distanceTableWkt(tableName, tableIds, ewkt, distance);
+    public List<String> distanceTableWkt(String tableName, List<String> tableIds, String ewkt, Integer distance, Integer distanceType) {
+        return analyseUtilsDBMapper.distanceTableWkt(tableName, tableIds, ewkt, distance,distanceType);
     }
 
     @Override

+ 22 - 3
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/AnalyseUtilsDBMapper.xml

@@ -49,9 +49,28 @@
     <select id="distanceTableWkt" resultType="String">
         SELECT id
         FROM "${tableName}" inTbale
-        where public.ST_DWithin(
-        inTbale.geom::public.geography,
-        public.st_geomfromewkt(#{ewkt})::public.geography,#{distance})
+        where
+        <choose>
+            <when test="distanceType == 1">
+                public.st_distance(inTbale.geom::public.geography,
+                public.st_geomfromewkt(#{ewkt})::public.geography) &gt; #{distance}
+            </when>
+            <when test="distanceType == 2">
+                public.st_distance(inTbale.geom::public.geography,
+                public.st_geomfromewkt(#{ewkt})::public.geography) &gt;= #{distance}
+            </when>
+            <when test="distanceType == 3">
+                public.st_distance(inTbale.geom::public.geography,
+                public.st_geomfromewkt(#{ewkt})::public.geography) &lt; #{distance}
+            </when>
+            <when test="distanceType == 4">
+                public.st_distance(inTbale.geom::public.geography,
+                public.st_geomfromewkt(#{ewkt})::public.geography) &lt;= #{distance}
+            </when>
+            <otherwise>
+                1=1
+            </otherwise>
+        </choose>
         <if test="tableIds != null and tableIds.size()>0 ">
             and (inTbale.id::VARCHAR) in
             <foreach collection="tableIds" item="tableId" open="(" close=")" separator=",">#{tableId}</foreach>