zoom quadrants

This commit is contained in:
Motiejus Jakštys 2021-04-28 17:23:26 +03:00
parent 6e7b096996
commit dad53daa80
5 changed files with 84 additions and 11 deletions

View File

@ -32,7 +32,9 @@ RIVERS = \
salvis-douglas-64-50k \ salvis-douglas-64-50k \
salvis-visvalingam-64-50k \ salvis-visvalingam-64-50k \
salvis-douglas-64-chaikin-50k \ salvis-douglas-64-chaikin-50k \
salvis-visvalingam-64-chaikin-50k salvis-visvalingam-64-chaikin-50k \
salvis-overlaid-douglas-64-chaikin-50k \
salvis-overlaid-visvalingam-64-chaikin-50k
################################# #################################
# The thesis, publishable version # The thesis, publishable version
@ -76,6 +78,7 @@ define FIG_template
$(1).pdf: layer2img.py Makefile $(2) $(1).pdf: layer2img.py Makefile $(2)
python ./layer2img.py --outfile=$(1).pdf \ python ./layer2img.py --outfile=$(1).pdf \
$$(if $$($(1)_WIDTHDIV),--widthdiv=$$($(1)_WIDTHDIV)) \ $$(if $$($(1)_WIDTHDIV),--widthdiv=$$($(1)_WIDTHDIV)) \
$$(if $$($(1)_QUADRANT),--quadrant=$$($(1)_QUADRANT)) \
$$(foreach i,1 2 3, \ $$(foreach i,1 2 3, \
$$(if $$($(1)_$$(i)SELECT),--group$$(i)-select="$$($(1)_$$(i)SELECT)") \ $$(if $$($(1)_$$(i)SELECT),--group$$(i)-select="$$($(1)_$$(i)SELECT)") \
$$(if $$($(1)_$$(i)LINESTYLE),--group$$(i)-linestyle="$$($(1)_$$(i)LINESTYLE)") \ $$(if $$($(1)_$$(i)LINESTYLE),--group$$(i)-linestyle="$$($(1)_$$(i)LINESTYLE)") \
@ -134,18 +137,25 @@ salvis-250k_WIDTHDIV = 10
salvis-douglas-64-50k_2SELECT = wm_visuals where name='salvis-douglas-64' salvis-douglas-64-50k_2SELECT = wm_visuals where name='salvis-douglas-64'
salvis-douglas-64-50k_WIDTHDIV = 2 salvis-douglas-64-50k_WIDTHDIV = 2
#salvis-visvalingam-64-50k_1SELECT = wm_visuals where name='salvis'
salvis-visvalingam-64-50k_2SELECT = wm_visuals where name='salvis-visvalingam-64' salvis-visvalingam-64-50k_2SELECT = wm_visuals where name='salvis-visvalingam-64'
salvis-visvalingam-64-50k_WIDTHDIV = 2 salvis-visvalingam-64-50k_WIDTHDIV = 2
#salvis-douglas-64-chaikin-50k_1SELECT = wm_visuals where name='salvis'
salvis-douglas-64-chaikin-50k_2SELECT = wm_visuals where name='salvis-douglas-64-chaikin' salvis-douglas-64-chaikin-50k_2SELECT = wm_visuals where name='salvis-douglas-64-chaikin'
salvis-douglas-64-chaikin-50k_WIDTHDIV = 2 salvis-douglas-64-chaikin-50k_WIDTHDIV = 2
#salvis-visvalingam-64-chaikin-50k_1SELECT = wm_visuals where name='salvis'
salvis-visvalingam-64-chaikin-50k_2SELECT = wm_visuals where name='salvis-visvalingam-64-chaikin' salvis-visvalingam-64-chaikin-50k_2SELECT = wm_visuals where name='salvis-visvalingam-64-chaikin'
salvis-visvalingam-64-chaikin-50k_WIDTHDIV = 2 salvis-visvalingam-64-chaikin-50k_WIDTHDIV = 2
salvis-overlaid-douglas-64-chaikin-50k_1SELECT = wm_visuals where name='salvis'
salvis-overlaid-douglas-64-chaikin-50k_2SELECT = wm_visuals where name='salvis-douglas-64-chaikin'
salvis-overlaid-douglas-64-chaikin-50k_WIDTHDIV = 2
salvis-overlaid-douglas-64-chaikin-50k_QUADRANT = 4
salvis-overlaid-visvalingam-64-chaikin-50k_1SELECT = wm_visuals where name='salvis'
salvis-overlaid-visvalingam-64-chaikin-50k_2SELECT = wm_visuals where name='salvis-visvalingam-64-chaikin'
salvis-overlaid-visvalingam-64-chaikin-50k_WIDTHDIV = 2
salvis-overlaid-visvalingam-64-chaikin-50k_QUADRANT = 4
.faux_test-rivers: tests-rivers.sql wm.sql Makefile .faux_db .faux_test-rivers: tests-rivers.sql wm.sql Makefile .faux_db
bash db -v scaledwidth=$(SCALEDWIDTH) -f $< bash db -v scaledwidth=$(SCALEDWIDTH) -f $<

View File

@ -174,7 +174,7 @@
title={Handbuch der Lehre von der Verteilung der Primzahlen}, title={Handbuch der Lehre von der Verteilung der Primzahlen},
journal={Monatshefte f{\"u}r Mathematik und Physik}, journal={Monatshefte f{\"u}r Mathematik und Physik},
year={1911}, year={1911},
month={Dec}, month={12},
day={01}, day={01},
volume={22}, volume={22},
number={1}, number={1},

View File

@ -48,17 +48,22 @@ def parse_args():
parser.add_argument('--widthdiv', parser.add_argument('--widthdiv',
default=1, type=float, help='Width divisor') default=1, type=float, help='Width divisor')
parser.add_argument('--quadrant', type=int, choices=(1,2,3,4))
parser.add_argument('-o', '--outfile', metavar='<file>') parser.add_argument('-o', '--outfile', metavar='<file>')
return parser.parse_args() return parser.parse_args()
def read_layer(select, width): def read_layer(select, width, maybe_quadrant):
if not select: if not select:
return return
way = "way" way = "way"
if maybe_quadrant:
way = "wm_quadrant(way, {})".format(maybe_quadrant)
conn = psycopg2.connect(PSQL_CREDS) conn = psycopg2.connect(PSQL_CREDS)
sql = "SELECT {way} as way1 FROM {select}".format(way=way, select=select) sql = "SELECT {way} as way1 FROM {select}".format(way=way, select=select)
print(sql)
return geopandas.read_postgis(sql, con=conn, geom_col='way1') return geopandas.read_postgis(sql, con=conn, geom_col='way1')
@ -80,9 +85,9 @@ def plot_args(geom, color, maybe_linestyle):
def main(): def main():
args = parse_args() args = parse_args()
width = TEXTWIDTH_CM / args.widthdiv width = TEXTWIDTH_CM / args.widthdiv
group1 = read_layer(args.group1_select, width) group1 = read_layer(args.group1_select, width, args.quadrant)
group2 = read_layer(args.group2_select, width) group2 = read_layer(args.group2_select, width, args.quadrant)
group3 = read_layer(args.group3_select, width) group3 = read_layer(args.group3_select, width, args.quadrant)
c1 = plot_args(group1, BLACK, args.group1_linestyle) c1 = plot_args(group1, BLACK, args.group1_linestyle)
c2 = plot_args(group2, ORANGE, args.group2_linestyle) c2 = plot_args(group2, ORANGE, args.group2_linestyle)
c3 = plot_args(group3, GREEN, args.group3_linestyle) c3 = plot_args(group3, GREEN, args.group3_linestyle)

View File

@ -231,7 +231,6 @@ smaller scale is worthy.
\label{fig:salvis-generalized-50k} \label{fig:salvis-generalized-50k}
\end{figure} \end{figure}
Figure~\onpage{fig:salvis-generalized-50k} illustrates the same river bend, but Figure~\onpage{fig:salvis-generalized-50k} illustrates the same river bend, but
generalized using {\DP} and {\VW} algorithms. The resulting lines are jagged, generalized using {\DP} and {\VW} algorithms. The resulting lines are jagged,
thus the resulting line looks unlike a real river. To smoothen the jaggedness, thus the resulting line looks unlike a real river. To smoothen the jaggedness,
@ -254,6 +253,21 @@ figure~\onpage{fig:salvis-generalized-chaikin-50k}.
\label{fig:salvis-generalized-chaikin-50k} \label{fig:salvis-generalized-chaikin-50k}
\end{figure} \end{figure}
\begin{figure}[h]
\centering
\begin{subfigure}[b]{.49\textwidth}
\includegraphics[width=\textwidth]{salvis-overlaid-douglas-64-chaikin-50k}
\caption{Original and {\DP} + Chaikin's}
\end{subfigure}
\hfill
\begin{subfigure}[b]{.49\textwidth}
\includegraphics[width=\textwidth]{salvis-overlaid-visvalingam-64-chaikin-50k}
\caption{Original and {\VW} + Chaikin's}
\end{subfigure}
\caption{Generalized and smoothened river (1:50000) and the original one overlaid.}
\label{fig:salvis-overlaid-generalized-chaikin-50k}
\end{figure}
There are a few problems with {\VW} and {\DP} immediately visible in There are a few problems with {\VW} and {\DP} immediately visible in
figure~\onpage{fig:salvis-generalized-chaikin-50k}: figure~\onpage{fig:salvis-generalized-chaikin-50k}:

View File

@ -1,6 +1,6 @@
\i wm.sql \i wm.sql
-- wm_envelope clips a geometry by a bounding box around a given object, -- wm_bbox clips a geometry by a bounding box around a given object,
-- matching dimensions of A-class paper (1 by sqrt(2). -- matching dimensions of A-class paper (1 by sqrt(2).
drop function if exists wm_bbox; drop function if exists wm_bbox;
create function wm_bbox( create function wm_bbox(
@ -22,6 +22,50 @@ begin
end end
$$ language plpgsql; $$ language plpgsql;
-- wm_quadrant divides the given geometry to 4 rectangles
-- and returns the requested quadrant following cartesian
-- convention:
-- +----------+
-- | II | I |
--- +----------+
-- | III | IV |
-- +-----+----+
-- matching dimensions of A-class paper (1 by sqrt(2).
drop function if exists wm_quadrant;
create function wm_quadrant(
geom geometry,
quadrant integer
) returns geometry as $$
declare
xmin float;
xmax float;
ymin float;
ymax float;
begin
xmin = st_xmin(geom);
xmax = st_xmax(geom);
ymin = st_ymin(geom);
ymax = st_ymax(geom);
if quadrant = 1 or quadrant = 2 then
ymin = (ymin + ymax)/2;
else
ymax = (ymin + ymax)/2;
end if;
if quadrant = 2 or quadrant = 3 then
xmax = (xmin + xmax)/2;
else
xmin = (xmin + xmax)/2;
end if;
return st_intersection(
geom,
st_makeenvelope(xmin, ymin, xmax, ymax, st_srid(geom))
);
end $$ language plpgsql;
delete from wm_visuals where name like 'salvis%'; delete from wm_visuals where name like 'salvis%';
insert into wm_visuals(name, way) values('salvis', ( insert into wm_visuals(name, way) values('salvis', (
select st_intersection( select st_intersection(