commit dad53daa80081d0c034af2264ef49c8dad962e01 (tree)
parent 6e7b0969963f7162dbc4044d43d9b85f384e148e
Author: Motiejus Jakštys <motiejus@uber.com>
Date: Wed, 28 Apr 2021 17:23:26 +0300
zoom quadrants
Diffstat:
5 files changed, 84 insertions(+), 11 deletions(-)
diff --git a/IV/Makefile b/IV/Makefile
@@ -32,7 +32,9 @@ RIVERS = \
salvis-douglas-64-50k \
salvis-visvalingam-64-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
@@ -76,6 +78,7 @@ define FIG_template
$(1).pdf: layer2img.py Makefile $(2)
python ./layer2img.py --outfile=$(1).pdf \
$$(if $$($(1)_WIDTHDIV),--widthdiv=$$($(1)_WIDTHDIV)) \
+ $$(if $$($(1)_QUADRANT),--quadrant=$$($(1)_QUADRANT)) \
$$(foreach i,1 2 3, \
$$(if $$($(1)_$$(i)SELECT),--group$$(i)-select="$$($(1)_$$(i)SELECT)") \
$$(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_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_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_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_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
bash db -v scaledwidth=$(SCALEDWIDTH) -f $<
diff --git a/IV/bib.bib b/IV/bib.bib
@@ -174,7 +174,7 @@
title={Handbuch der Lehre von der Verteilung der Primzahlen},
journal={Monatshefte f{\"u}r Mathematik und Physik},
year={1911},
- month={Dec},
+ month={12},
day={01},
volume={22},
number={1},
diff --git a/IV/layer2img.py b/IV/layer2img.py
@@ -48,17 +48,22 @@ def parse_args():
parser.add_argument('--widthdiv',
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>')
return parser.parse_args()
-def read_layer(select, width):
+def read_layer(select, width, maybe_quadrant):
if not select:
return
way = "way"
+ if maybe_quadrant:
+ way = "wm_quadrant(way, {})".format(maybe_quadrant)
+
conn = psycopg2.connect(PSQL_CREDS)
sql = "SELECT {way} as way1 FROM {select}".format(way=way, select=select)
+ print(sql)
return geopandas.read_postgis(sql, con=conn, geom_col='way1')
@@ -80,9 +85,9 @@ def plot_args(geom, color, maybe_linestyle):
def main():
args = parse_args()
width = TEXTWIDTH_CM / args.widthdiv
- group1 = read_layer(args.group1_select, width)
- group2 = read_layer(args.group2_select, width)
- group3 = read_layer(args.group3_select, width)
+ group1 = read_layer(args.group1_select, width, args.quadrant)
+ group2 = read_layer(args.group2_select, width, args.quadrant)
+ group3 = read_layer(args.group3_select, width, args.quadrant)
c1 = plot_args(group1, BLACK, args.group1_linestyle)
c2 = plot_args(group2, ORANGE, args.group2_linestyle)
c3 = plot_args(group3, GREEN, args.group3_linestyle)
diff --git a/IV/mj-msc.tex b/IV/mj-msc.tex
@@ -231,7 +231,6 @@ smaller scale is worthy.
\label{fig:salvis-generalized-50k}
\end{figure}
-
Figure~\onpage{fig:salvis-generalized-50k} illustrates the same river bend, but
generalized using {\DP} and {\VW} algorithms. The resulting lines are jagged,
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}
\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
figure~\onpage{fig:salvis-generalized-chaikin-50k}:
diff --git a/IV/tests-rivers.sql b/IV/tests-rivers.sql
@@ -1,6 +1,6 @@
\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).
drop function if exists wm_bbox;
create function wm_bbox(
@@ -22,6 +22,50 @@ begin
end
$$ 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%';
insert into wm_visuals(name, way) values('salvis', (
select st_intersection(