zoom quadrants
This commit is contained in:
parent
6e7b096996
commit
dad53daa80
18
IV/Makefile
18
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 $<
|
||||
|
@ -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},
|
||||
|
@ -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)
|
||||
|
@ -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}:
|
||||
|
||||
|
@ -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(
|
||||
|
Loading…
Reference in New Issue
Block a user