|
@@ -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
|