add curvature

This commit is contained in:
Motiejus Jakštys 2021-05-19 22:57:47 +03:00 committed by Motiejus Jakštys
parent f973da1eb5
commit 56d80516a4
2 changed files with 11 additions and 5 deletions

View File

@ -84,3 +84,7 @@ slides-2021-03-29.pdf: slides-2021-03-29.txt
slides-2021-03-29.html: slides-2021-03-29.txt slides-2021-03-29.html: slides-2021-03-29.txt
pandoc --verbose -t slidy --self-contained $< -o $@ $(SLIDY_ARGS) pandoc --verbose -t slidy --self-contained $< -o $@ $(SLIDY_ARGS)
dump-debug_wm.sql.xz:
docker exec -ti wm-mj \
pg_dump -Uosm osm -t debug_wm | xz > $@

12
wm.sql
View File

@ -106,7 +106,7 @@ declare
pi constant real default radians(180); pi constant real default radians(180);
-- the threshold when the angle is still "small", so gentle inflections can -- the threshold when the angle is still "small", so gentle inflections can
-- be joined -- be joined
small_angle constant real default radians(30); small_angle constant real default radians(45);
ptail geometry; -- tail point of tail bend ptail geometry; -- tail point of tail bend
phead geometry[]; -- 3 tail points of head bend phead geometry[]; -- 3 tail points of head bend
i int4; -- bends[i] is the current head i int4; -- bends[i] is the current head
@ -268,7 +268,8 @@ create type t_bend_attrs as (
area real, area real,
cmp real, cmp real,
adjsize real, adjsize real,
baselinelength real baselinelength real,
avg_curvature real
); );
create function bend_attrs(bends geometry[], dbgname text default null) returns setof t_bend_attrs as $$ create function bend_attrs(bends geometry[], dbgname text default null) returns setof t_bend_attrs as $$
declare declare
@ -285,10 +286,10 @@ begin
res.area = 0; res.area = 0;
res.cmp = 0; res.cmp = 0;
res.adjsize = 0; res.adjsize = 0;
res.baselinelength = 0; res.baselinelength = st_distance(st_startpoint(bend), st_endpoint(bend));
res.avg_curvature = inflection_angle(bend) / st_length(bend);
if st_numpoints(bend) >= 3 then if st_numpoints(bend) >= 3 then
polygon = st_makepolygon(st_addpoint(bend, st_startpoint(bend))); polygon = st_makepolygon(st_addpoint(bend, st_startpoint(bend)));
res.baselinelength = st_distance(st_startpoint(bend), st_endpoint(bend));
-- Compactness Index (cmp) is defined as "the ratio of the area of the -- Compactness Index (cmp) is defined as "the ratio of the area of the
-- polygon over the circle whose circumference length is the same as the -- polygon over the circle whose circumference length is the same as the
-- length of the circumference of the polygon". I assume they meant the -- length of the circumference of the polygon". I assume they meant the
@ -314,7 +315,8 @@ begin
'area', res.area, 'area', res.area,
'cmp', res.cmp, 'cmp', res.cmp,
'adjsize', res.adjsize, 'adjsize', res.adjsize,
'baselinelength', res.baselinelength 'baselinelength', res.baselinelength,
'avg_curvature', res.avg_curvature
) )
); );
end if; end if;