0_init.sql 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. -- 7.24
  2. -- Auto-generated SQL script #202407240932
  3. UPDATE base.t_jsc_sql
  4. SET jsc_sql='select #{id} as id,round((coalesce(sum(xz_st),0)*0.01)::NUMERIC,2)st_mj, round((coalesce(sum(xz_sjd),0)*0.01)::NUMERIC,2)sjd_mj,round((coalesce(sum(xz_hd),0)*0.01)::NUMERIC,2)hd_mj from ( SELECT xz_st, xz_sjd, xz_hd FROM vector."AFTER_JCSH" x where xzqdm like #{id}||''%'' )t'
  5. WHERE id='40daac2a-8a4a-4e38-9e66-973615b6b5d5';
  6. UPDATE base.t_jsc_sql
  7. SET jsc_sql='select #{id} as id,dj,round((coalesce(sum(tbdlmj),0)/ 1000000)::numeric,2)tbmj from( select case when gjlyd>=1 and gjlyd <= 4 then 1 when gjlyd>=5 and gjlyd <= 8 then 2 when gjlyd>=9 and gjlyd <= 12 then 3 else 4 end dj, tbdlmj from vector."TB_GDZL" x where xzqhdm like #{id} || ''%'' )t group by dj order by dj'
  8. WHERE id='3cfe4498-b451-4833-bb9e-7ff55b10472c';
  9. -- 新增表
  10. vector."TB_GDZL"
  11. vector."TB_HDGLX"
  12. vector."TB_GYL"
  13. -- 修改表结构和数据,需要同步到现场
  14. vector."AFTER_JCSH"
  15. -- 添加影像数据
  16. -- D:/onemapfile/15影像.tif
  17. --修改表数据,需要同步到现场
  18. vector."AFTER_BJXM_SZ"
  19. -- 只同步数据
  20. base."t_fzss_fzxz_factor"
  21. -- 需要修改的nacos
  22. -- onemap-spatial-dev.yml
  23. -- onemap-analyse-dev.yml
  24. -- 添加多地块合并方法
  25. drop function if exists area_in_range;
  26. CREATE OR REPLACE FUNCTION area_in_range(jsonarg json, systemarg json)
  27. RETURNS VARCHAR AS $$
  28. DECLARE
  29. sql TEXT;
  30. records VARCHAR;
  31. begin
  32. execute format('
  33. insert into %s
  34. with t as(
  35. select array[id] idarray, st_area (st_transform(geom, 3857) ) /2000*3 area, ''%s'' feature , 0.0 weight,geom
  36. from %s order by area
  37. )
  38. select t.* from t where area between %s and %s
  39. limit 3; ', systemarg->>'选址结果',systemarg->>'选址方式',systemarg->>'初步结果',jsonarg->>'面积下限', jsonarg->>'面积上限');
  40. return 'OK';
  41. END;
  42. $$ LANGUAGE plpgsql;
  43. drop function if exists block_merge;
  44. CREATE OR REPLACE FUNCTION block_merge(jsonarg json , systemarg json)
  45. RETURNS VARCHAR AS $$
  46. DECLARE
  47. sql TEXT;
  48. records VARCHAR;
  49. BEGIN
  50. with a as(select jsonb(jsonarg) arg),
  51. an as (select regexp_split_to_table( substring('abcdefghijklmnopqrstuvwxyz',1, cast(a.arg->>'小地块最多合并块数' as integer) ), '') alias from a),
  52. t1 as ( select string_agg( an.alias || '.id', ',') idarr,
  53. string_agg( an.alias || '.area' , ' + ') areaarr,
  54. string_agg ('t2 as ' || an.alias , ',') tblarr,
  55. string_agg( an.alias || '.geom', ',' ) geomarr
  56. from an),
  57. t2 as (select alias, lead(alias) over() n from an ),
  58. t3 as ( select string_agg( alias || '.id < ' || n ||'.id', ' and ') cond from t2 where n notnull),
  59. in_t1 as (select format('select id, st_area (st_transform(geom, 3857) ) /2000*3 area, geom from %s order by area ', systemarg->>'初步结果' ) t ) ,
  60. in_t2 as (select format('select id,area,geom from t1 where area < %s', a.arg->>'面积下限') t from a) ,
  61. in_t3 as (select format(
  62. 'select ARRAY[%s] idarray, %s area ,st_collect(ARRAY[%s]) geom
  63. from %s
  64. where %s', idarr, areaarr,geomarr , tblarr, cond ) t from t1,t3)
  65. select
  66. format('insert into %s
  67. with t1 as (%s),
  68. t2 as (%s),
  69. t3 as(%s)
  70. select idarray,area, ''%s'' feature, 0.0 weight, geom from t3
  71. where area between %s and %s
  72. order by area
  73. limit 3',systemarg->>'选址结果',
  74. in_t1.t, in_t2.t, in_t3.t,systemarg->>'选址方式',a.arg->>'面积下限',a.arg->>'面积上限' ) into sql from in_t1, in_t2, in_t3,a;
  75. EXECUTE sql;
  76. return 'OK';
  77. END;
  78. $$ LANGUAGE plpgsql;
  79. drop function if exists big_area_block;
  80. CREATE OR REPLACE FUNCTION big_area_block(jsonarg json, systemarg json)
  81. RETURNS VARCHAR AS $$
  82. DECLARE
  83. sql TEXT;
  84. records VARCHAR;
  85. begin
  86. execute format('
  87. insert into %s
  88. with t as(
  89. select array[id] idarray, st_area (st_transform(geom, 3857) ) /2000*3 area, ''%s'' feature ,0 weight, geom
  90. from %s order by area
  91. )select * from t
  92. where area > %s order by area limit 3;
  93. with recursive cte(arealimit,tolerance, movedirection, area, grade, movescale, interarea, idarray,width,height,geom,env) as(
  94. select cast(arg->>''面积上限'' as float8) arealimit, (cast(arg->>''面积上限'' as float8) - cast(arg->>''面积下限'' as float8) ) / 100.0 tolerance,
  95. array[sign(cast(arg->>''截取地块X方位'' as integer)), sign(cast(arg->>''截取地块Y方位'' as integer))] movedirection, area,
  96. 1 grade, 0.5::float4 movescale,
  97. 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,
  98. (st_ymax(st_transform(geom,3857)) - st_ymin(st_transform(geom,3857)))*abs(sign(cast(arg->>''截取地块Y方位'' as integer)))*0.5) ) ) *3/2000 interarea ,
  99. idarray, (st_xmax(st_transform(geom,3857)) - st_xmin(st_transform(geom,3857))) width,
  100. (st_ymax(st_transform(geom,3857)) - st_ymin(st_transform(geom,3857))) height,
  101. st_transform(geom,3857) geom,
  102. st_envelope(st_transform(geom,3857)) env
  103. from vector.选址结果, jsonb(''%s'') arg
  104. where feature like ''%s''
  105. union all
  106. select arealimit, tolerance, movedirection, area, grade + 1 grade,
  107. movescale + (1.0/power(2, (grade + 1) )*(case when arealimit < interarea then 1 else -1 end) )::float4 movescale,
  108. st_area(st_intersection(geom, st_translate(env,
  109. width*(movescale + (1.0/power(2, (grade + 1) )*(case when arealimit < interarea then 1 else -1 end) )::float4)*movedirection[1],
  110. height*(movescale + (1.0/power(2, (grade + 1) )*(case when arealimit < interarea then 1 else -1 end) )::float4)*movedirection[2])
  111. )
  112. ) *3/2000 interarea ,
  113. idarray,width,height,geom,env from cte
  114. where grade < 16 and abs(interarea - arealimit) > tolerance
  115. ),
  116. t as(
  117. select idarray, st_transform( st_collectionextract( st_intersection(geom, st_translate(env,
  118. width*(movescale::float4)*movedirection[1],
  119. height*(movescale::float4)*movedirection[2])
  120. ) ,3), 4326) geom
  121. from cte order by grade DESC limit 1)
  122. update %s f set geom = t.geom from t
  123. where feature like ''%s'' and f.idarray = t.idarray and t.geom is not null
  124. ', systemarg->>'选址结果',systemarg->>'选址方式', systemarg->>'初步结果', jsonarg->>'面积上限',jsonarg, systemarg->>'选址方式', systemarg->>'选址结果', systemarg->>'选址方式' );
  125. return 'OK';
  126. END;
  127. $$ LANGUAGE plpgsql;