wm/tests-rivers.sql

69 lines
2.0 KiB
MySQL
Raw Normal View History

2021-05-19 22:57:46 +03:00
\i wm.sql
2021-05-19 22:57:48 +03:00
-- wm_envelope clips a geometry by a bounding box around a given object,
-- matching dimensions of A-class paper (1 by sqrt(2).
drop function if exists wm_bbox;
create function wm_bbox(
2021-05-19 22:57:48 +03:00
center geometry,
scaledwidth float
2021-05-19 22:57:48 +03:00
) returns geometry as $$
declare
halfX float;
halfY float;
begin
2021-05-19 22:57:48 +03:00
halfX = scaledwidth / 2;
2021-05-19 22:57:48 +03:00
halfY = halfX * sqrt(2);
return st_envelope(
st_union(
2021-05-19 22:57:48 +03:00
st_translate(center, halfX, halfY),
st_translate(center, -halfX, -halfY)
)
2021-05-19 22:57:48 +03:00
);
end
$$ language plpgsql;
delete from wm_visuals where name like 'salvis%';
2021-05-19 22:57:48 +03:00
insert into wm_visuals(name, way) values('salvis', (
select st_intersection(
(select st_union(way) from wm_rivers where name in ('Šalčia', 'Visinčia')),
wm_bbox(
st_closestpoint(
(select way from wm_rivers where name='Šalčia'),
(select way from wm_rivers where name='Visinčia')
),
:scaledwidth
)
)
));
do $$
declare
i integer;
geom1 geometry;
geom2 geometry;
begin
foreach i in array array[16, 64, 256] loop
geom1 = st_simplify((select way from wm_visuals where name='salvis'), i);
geom2 = st_simplifyvw((select way from wm_visuals where name='salvis'), i*i);
insert into wm_visuals(name, way) values
('salvis-douglas-' || i, geom1),
('salvis-douglas-' || i || '-chaikin', st_chaikinsmoothing(geom1, 5)),
('salvis-visvalingam-' || i, geom2),
('salvis-visvalingam-' || i || '-chaikin', st_chaikinsmoothing(geom2, 5));
end loop;
end $$ language plpgsql;
2021-05-19 22:57:48 +03:00
do $$
declare
npoints bigint;
secs bigint;
begin
2021-05-19 22:57:48 +03:00
select * from ST_SimplifyWM_Estimate((select st_union(way) from wm_rivers)) into npoints, secs;
2021-05-19 22:57:48 +03:00
raise notice 'Total points: %', npoints;
2021-05-19 22:57:48 +03:00
raise notice 'Expected duration: %s (+-%s)', ceil(secs), floor(secs*.5);
2021-05-19 22:57:48 +03:00
end $$ language plpgsql;
2021-05-19 22:57:48 +03:00
delete from wm_debug where name in (select distinct name from wm_rivers);
2021-05-19 22:57:48 +03:00
delete from wm_demo where name in (select distinct name from wm_rivers);
2021-05-19 22:57:48 +03:00
--insert into wm_demo (name, way) select name, ST_SimplifyWM(way, name) from wm_rivers;