Forráskód Böngészése

删除无用地块

gushoubang 8 hónapja
szülő
commit
be25b1972a

+ 3 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/mapper/vector/TableDataMapper.java

@@ -24,7 +24,9 @@ public interface TableDataMapper {
 
     void delByLandType(@Param("temporaryTable") String temporaryTable, @Param("rawTable") String rawTable, @Param("landTypeCode") String landTypeCode);
 
-    void delByArea(@Param("tableName") String tableName, @Param("minArea") float minArea, @Param("maxArea") float maxArea);
+    void delByAreaOr(@Param("tableName") String tableName, @Param("minArea") float minArea, @Param("maxArea") float maxArea);
+
+    void delByAreaAnd(@Param("tableName") String tableName, @Param("minArea") float minArea, @Param("maxArea") float maxArea);
 
     void delInIds(@Param("tableName") String tableName, @Param("ids") List<String> ids);
 

+ 3 - 1
onemap-modules/onemap-analyse/src/main/java/com/onemap/analyse/service/ITableDateService.java

@@ -24,7 +24,9 @@ public interface ITableDateService {
 
     void delByLandType(String temporaryTable, String rawTable, String landTypeCode);
 
-    void delByArea(String temporaryTable, float minArea, float maxArea);
+    void delByAreaOr(String temporaryTable, float minArea, float maxArea);
+
+    void delByAreaAnd(String temporaryTable, float minArea, float maxArea);
 
     void delInIds(String tableName, List<String> ids);
 

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

@@ -211,6 +211,16 @@ public class FzssServiceImpl implements IFzssService {
         if (rawTable.equals("")) return RequestResult.error("区域筛选条件筛选未找到符合条件数据!", null);
 
         // 5.切割地块,面积筛选
+        // TODO 删除异常面积,临时方案
+        tableDateService.delByAreaAnd(rawTable, 0,1500);
+        integer = tableDateService.getTableCount(rawTable);
+        if (integer == 0) {
+            iLogService.saveLog(taskId, "辅助选址", "计算完成,未找到符合用地性质条件数据", "info");
+            updateFzxzStatus(taskId, Rwzt.getNoRes());
+            return RequestResult.error("区域筛选条件筛选未找到符合条件数据!", null);
+        }
+
+
         List<Map<String, Object>> multLandList = new ArrayList<>();
         if (fzxzDTO.getUseMultiple()) {
             // 允许多地块
@@ -246,12 +256,12 @@ public class FzssServiceImpl implements IFzssService {
             }
             System.out.println("多地块合并完成");
             // 不允许多地块,删除面积不符合要求的地块
-            tableDateService.delByArea(rawTable, fzxzDTO.getYdmjbegin(), fzxzDTO.getYdmjend());
+            tableDateService.delByAreaOr(rawTable, fzxzDTO.getYdmjbegin(), fzxzDTO.getYdmjend());
             // TODO 计算多地块数量
             integer = tableDateService.getTableCount(rawTable);
         } else {
             // 不允许多地块,删除面积不符合要求的地块
-            tableDateService.delByArea(rawTable, fzxzDTO.getYdmjbegin(), fzxzDTO.getYdmjend());
+            tableDateService.delByAreaOr(rawTable, fzxzDTO.getYdmjbegin(), fzxzDTO.getYdmjend());
 
             integer = tableDateService.getTableCount(rawTable);
             if (integer == 0) {

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

@@ -49,8 +49,13 @@ public class TableDateServiceImpl implements ITableDateService {
 
 
     @Override
-    public void delByArea(String tableName, float minArea, float maxArea) {
-        tableDataMapper.delByArea(tableName, minArea, maxArea);
+    public void delByAreaOr(String tableName, float minArea, float maxArea) {
+        tableDataMapper.delByAreaOr(tableName, minArea, maxArea);
+    }
+
+    @Override
+    public void delByAreaAnd(String temporaryTable, float minArea, float maxArea) {
+        tableDataMapper.delByAreaAnd(temporaryTable, minArea, maxArea);
     }
 
     @Override

+ 11 - 1
onemap-modules/onemap-analyse/src/main/resources/mapper/oracle/vector/TableDateMapper.xml

@@ -138,7 +138,7 @@
                             AND (raw.kzxxgyddm like '${landTypeCode}%' or raw.kzxxgyddm like '%/${landTypeCode}%'))
     </delete>
 
-    <delete id="delByArea">
+    <delete id="delByAreaOr">
         DELETE
         FROM "${tableName}" tableIn
         WHERE public.st_area(tableIn.geom::public.geography)
@@ -148,6 +148,16 @@
             &lt;
               #{minArea}
     </delete>
+    <delete id="delByAreaAnd">
+        DELETE
+        FROM "${tableName}" tableIn
+        WHERE public.st_area(tableIn.geom::public.geography)
+            &gt;
+              #{minArea}
+          and public.st_area(tableIn.geom::public.geography)
+            &lt;
+              #{maxArea}
+    </delete>
 
     <delete id="delInIds">
         DELETE

+ 12 - 12
sql/pgsql/0_init.sql

@@ -36,7 +36,7 @@ begin
 execute format('
 	insert into %s
 	with t as(
-	select  array[id] idarray, st_area (st_transform(geom, 3857) ) /2000*3  area, ''%s'' feature , 0.0 weight,geom
+	select  array[id] idarray, public.st_area (public.st_transform(geom, 3857) ) /2000*3  area, ''%s'' feature , 0.0 weight,geom
 	from %s order by area
 	)
 	select t.* from t where  area between %s and %s
@@ -62,10 +62,10 @@ with a as(select jsonb(jsonarg) arg),
              from an),
      t2 as (select alias, lead(alias) over() n from an ),
      t3 as ( select string_agg( alias || '.id < ' || n ||'.id', ' and ') cond from t2 where n notnull),
-    in_t1 as (select format('select id, st_area (st_transform(geom, 3857) ) /2000*3  area, geom from %s order by area ', systemarg->>'初步结果' ) t ) ,
+    in_t1 as (select format('select id, public.st_area (public.st_transform(geom, 3857) ) /2000*3  area, geom from %s order by area ', systemarg->>'初步结果' ) t ) ,
     in_t2 as (select format('select id,area,geom from t1 where area < %s', a.arg->>'面积下限') t from a) ,
     in_t3 as (select format(
-    'select ARRAY[%s] idarray, %s area ,st_collect(ARRAY[%s]) geom
+    'select ARRAY[%s] idarray, %s area ,public.st_collect(ARRAY[%s]) geom
         from %s
         where %s', idarr, areaarr,geomarr , tblarr, cond ) t from t1,t3)
 select
@@ -94,7 +94,7 @@ begin
 execute format('
 insert into %s
 with t as(
-select array[id] idarray, st_area (st_transform(geom, 3857) ) /2000*3  area, ''%s'' feature ,0 weight, geom
+select array[id] idarray, public.st_area (public.st_transform(geom, 3857) ) /2000*3  area, ''%s'' feature ,0 weight, geom
 from %s order by area
 )select * from t
 where area > %s order by area limit 3;
@@ -103,18 +103,18 @@ with recursive cte(arealimit,tolerance, movedirection, area, grade, movescale, i
 select cast(arg->>''面积上限'' as float8) arealimit, (cast(arg->>''面积上限'' as float8)  - cast(arg->>''面积下限'' as float8) ) / 100.0 tolerance,
         array[sign(cast(arg->>''截取地块X方位'' as integer)), sign(cast(arg->>''截取地块Y方位'' as integer))] movedirection,   area,
         1 grade, 0.5::float4 movescale,
-        st_area(st_intersection(st_transform(geom,3857), st_translate(st_envelope(st_transform(geom,3857)), (st_xmax(st_transform(geom,3857)) - st_xmin(st_transform(geom,3857)))*abs(sign(cast(arg->>''截取地块X方位'' as integer)))*0.5,
-                                                        (st_ymax(st_transform(geom,3857)) - st_ymin(st_transform(geom,3857)))*abs(sign(cast(arg->>''截取地块Y方位'' as integer)))*0.5) ) ) *3/2000 interarea ,
-        idarray, (st_xmax(st_transform(geom,3857)) - st_xmin(st_transform(geom,3857))) width,
-	                     (st_ymax(st_transform(geom,3857)) - st_ymin(st_transform(geom,3857))) height,
-	                     st_transform(geom,3857) geom,
-	                     st_envelope(st_transform(geom,3857)) env
+        public.st_area(public.st_intersection(public.st_transform(geom,3857), public.st_translate(public.st_envelope(public.st_transform(geom,3857)), (public.st_xmax(public.st_transform(geom,3857)) - public.st_xmin(public.st_transform(geom,3857)))*abs(sign(cast(arg->>''截取地块X方位'' as integer)))*0.5,
+                                                        (public.st_ymax(public.st_transform(geom,3857)) - public.st_ymin(public.st_transform(geom,3857)))*abs(sign(cast(arg->>''截取地块Y方位'' as integer)))*0.5) ) ) *3/2000 interarea ,
+        idarray, (public.st_xmax(public.st_transform(geom,3857)) - public.st_xmin(public.st_transform(geom,3857))) width,
+	                     (public.st_ymax(public.st_transform(geom,3857)) - public.st_ymin(public.st_transform(geom,3857))) height,
+	                     public.st_transform(geom,3857) geom,
+	                     public.st_envelope(public.st_transform(geom,3857)) env
 	from vector.选址结果, jsonb(''%s'') arg
     where feature like ''%s''
 union all
 select arealimit, tolerance, movedirection, area,  grade + 1 grade,
           movescale + (1.0/power(2, (grade + 1) )*(case when arealimit < interarea then 1 else -1 end)  )::float4  movescale,
-       st_area(st_intersection(geom, st_translate(env,
+       public.st_area(public.st_intersection(geom, public.st_translate(env,
             width*(movescale + (1.0/power(2, (grade + 1) )*(case when arealimit < interarea then 1 else -1 end)  )::float4)*movedirection[1],
             height*(movescale + (1.0/power(2, (grade + 1) )*(case when arealimit < interarea then 1 else -1 end)  )::float4)*movedirection[2])
            )
@@ -123,7 +123,7 @@ idarray,width,height,geom,env from cte
 where grade < 16 and abs(interarea - arealimit) > tolerance
 ),
 t as(
-select idarray, st_transform( st_collectionextract(  st_intersection(geom, st_translate(env,
+select idarray, public.st_transform( public.st_collectionextract(  public.st_intersection(geom, public.st_translate(env,
             width*(movescale::float4)*movedirection[1],
             height*(movescale::float4)*movedirection[2])
            ) ,3), 4326) geom