diff --git a/IV/Makefile b/IV/Makefile index 9a91ac0..7af8901 100644 --- 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 index 9357c7d..02bad4a 100644 --- 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 index 07f0d55..5517d38 100644 --- 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='') 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 index cd2b7f4..6f80bff 100644 --- 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 index c411619..b19e8c1 100644 --- 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(