estimate how long the algo will take
This commit is contained in:
parent
5d430d34d1
commit
d31e678268
@ -3,6 +3,16 @@
|
||||
drop table if exists wm_debug;
|
||||
create table wm_debug(stage text, name text, gen bigint, nbend bigint, way geometry, props jsonb);
|
||||
|
||||
do $$
|
||||
declare
|
||||
npoints bigint;
|
||||
secs bigint;
|
||||
begin
|
||||
select * from ST_SimplifyWM_Estimate((select st_union(way) from agg_rivers)) into npoints, secs;
|
||||
raise notice 'Total points: %', npoints;
|
||||
raise notice 'Expected duration: %s (+-%s), depending on bend complexity', ceil(secs), floor(secs*.5);
|
||||
end $$ language plpgsql;
|
||||
|
||||
drop table if exists wm_demo;
|
||||
create table wm_demo (name text, i bigint, way geometry);
|
||||
insert into wm_demo (name, way) select name, ST_SimplifyWM(way, name) from agg_rivers;
|
||||
|
@ -56,7 +56,6 @@ insert into wm_figures (name, way) values ('multi-island',ST_GeomFromText('MULTI
|
||||
insert into wm_figures (name, way) values ('selfcrossing-1',ST_GeomFromText('LINESTRING(-27 180,-20 166,-21 142,-18 136,55 136,55 136,71 145,44 165,37 146,22 145,14 164,11 164,3 146,-12 146,-13 176,-18 184)'));
|
||||
insert into wm_figures (name, way) values ('selfcrossing-1-rev',ST_Reverse(ST_Translate((select way from wm_figures where name='selfcrossing-1'), 0, 60)));
|
||||
|
||||
|
||||
-- Run ST_SimplifyWM in debug mode, so `wm_debug` is populated. That table
|
||||
-- is used for geometric assertions later in the file.
|
||||
drop table if exists wm_demo;
|
||||
|
27
wm.sql
27
wm.sql
@ -441,6 +441,33 @@ begin
|
||||
end
|
||||
$$ language plpgsql;
|
||||
|
||||
drop function if exists ST_SimplifyWM_Estimate;
|
||||
create function ST_SimplifyWM_Estimate(
|
||||
geom geometry,
|
||||
OUT npoints bigint,
|
||||
OUT secs bigint
|
||||
) as $$
|
||||
declare
|
||||
lines geometry[];
|
||||
l_type text;
|
||||
begin
|
||||
l_type = st_geometrytype(geom);
|
||||
if l_type = 'ST_LineString' then
|
||||
lines = array[geom];
|
||||
elseif l_type = 'ST_MultiLineString' then
|
||||
lines = array((select a.geom from st_dump(geom) a order by path[1] asc));
|
||||
else
|
||||
raise 'Unknown geometry type %', l_type;
|
||||
end if;
|
||||
|
||||
npoints = 0;
|
||||
for i in 1..array_length(lines, 1) loop
|
||||
npoints = npoints + st_numpoints(lines[i]);
|
||||
end loop;
|
||||
secs = npoints / 800;
|
||||
end
|
||||
$$ language plpgsql;
|
||||
|
||||
-- ST_SimplifyWM simplifies a given geometry using Wang & Müller's
|
||||
-- "Line Generalization Based on Analysis of Shape Characteristics" algorithm,
|
||||
-- 1998.
|
||||
|
Loading…
Reference in New Issue
Block a user