summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex
blob: 7eb5b5f86e292028f1e35b87f406415b50758006 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
% !TeX root = mercatormap.tex
% !TeX encoding=UTF-8
% !TeX spellcheck=en_US
% include file of mercatormap.tex (manual of the LaTeX package mercatormap)
\clearpage
\section{Examples}\label{sec:examples}%

The following map examples may be used as tutorials and
starting point for own applications.
Also see |mercatormap-example.tex| for a compilable full example.
Note to do all preparations documented in \Fullref{sec:python}.


%-------------------------------------------------------------------------------
\subsection{Reference Position}

With \refKey{/mermap/supply/type}|=|\docValue{reference} a map with a
\emph{reference position} is constructed. Here, Munich is taken as
reference position and center of the map. Since the position is used
more than once, it is stored with \refCom{mrcNPdef} for further reference.
With \refKey{/mermap/supply/flex reference scale} the scale
is set to 1:6\,000\,000. For the background map tiles, a
\refKey{/mermap/supply/source} is selected for download.
This setup is done by \refCom{mrcmap} while \refCom{mrcdrawmap} draws
the downloaded map tiles.

\tikzsetnextfilename{examples_reference}%
\begin{dispExample*}{center lower, breakable}
\begin{tikzpicture}
  \sffamily
  \mrcNPdef{munich}{48.137222}{11.575556}
  \mrcNPdef{vienna}{48.208333}{16.373056}
  \mrcNPdef{cologne}{50.938056}{6.956944}
  \mrcNPdef{milano}{45.4625}{9.186389}
  \mrcmap[type=reference,
    named position=munich,
    flex reference scale=6 000 000,
    source=topplusopen web,
    tex width=14cm,
    tex height=14cm]{examples_reference}
  \path[draw=yellow!50!gray,fill=yellow!20]
    ([xshift=-2mm,yshift=-5mm]mrcmap.south west) rectangle
    ([xshift=2mm,yshift=15mm]mrcmap.north east);
  \mrcdrawmap
  \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
    {\mrcmapattribution};
  \path[draw=yellow!50!gray] (mrcmap.south west) rectangle (mrcmap.north east);

  \mrcNPdraworthodrome[red,very thick]{munich}{milano}
  \path[blue,very thick] (\mrcNPcs{munich}) --
    node[red,fill=white,sloped,below] {\mrcNPprettyloxodistance{munich}{milano}}
    (\mrcNPcs{milano});

  \mermapsetmarker{type=pin, draw=red, fill=red!10, font=\sffamily\small}
  \mrcmarker{named position=munich,  contents={M\"unchen}}
  \mrcmarker{named position=vienna,  contents={Wien}}
  \mrcmarker{named position=cologne, contents={K\"oln}}
  \mrcmarker{named position=milano,  contents={Milano}}

  \node[above left=5mm,font=\Large\bfseries] at (mrcmap.north east) {Munich};

  \node[above right] at ([yshift=10mm]mrcmap.north west)
    {Scale \mrcprettymapscale};

  \mrcdrawscalebar[width-in-km=300,partitions=6,north-west-outside=0mm;5mm,
    single, height=1mm, major style={yellow!50!gray!50!black}]
  \path[every node/.style={above,inner sep=0.5mm,font=\sffamily\tiny}]
    (mrcscalebar.north west) -- (mrcscalebar.north east)
    node[pos=0]{0} node[pos=0.3333]{100} node[pos=0.6667]{200}
    node[pos=1]{300\,km};

  \mrcdrawscalebar[width-in-mile=200,partitions=8,
    at={(mrcscalebar.south west)},placement=below right,
    single, height=1mm, major style={yellow!50!gray!50!black}]
  \path[every node/.style={below,inner sep=0.5mm,font=\sffamily\tiny}]
    (mrcscalebar.south west) -- (mrcscalebar.south east)
    node[pos=0]{0} node[pos=0.25]{50} node[pos=0.5]{100} node[pos=0.75]{150}
    node[pos=1]{200\,miles};
\end{tikzpicture}
\end{dispExample*}


\clearpage
%-------------------------------------------------------------------------------
\subsection{Fitting Area}

With \refKey{/mermap/supply/type}|=|\docValue{areafit} a map is constructed
where a given area is fitted in. The following example lists some
US-American cities and constructs an \refKey{/mermap/supply/area} which
contains all of them. With \refKey{/mermap/supply/flex area fit}|=15mm| a
border region is added.


\tikzsetnextfilename{examples_fitting_area}%
\begin{dispExample*}{center lower}
\begin{tikzpicture}
  \mrcNPdef{honolulu}{21.305225}{-157.867}
  \mrcNPdef{fairbanks}{64.8379435}{-147.7192214}
  \mrcNPdef{sandiego}{32.7146781}{-117.1640995}
  \mrcNPdef{miami}{25.7599333}{-80.1951257}
  \mrcNPdef{boston}{42.359744}{-71.061322}
  \mrcNPdef{denver}{39.7372435}{-104.997378}
  \mrcmap[type=areafit,
    area={honolulu,fairbanks,sandiego,miami,boston,denver},
    source=stamen terrain,
    tex width=15cm, tex height=11cm,
    flex area fit=15mm,
    ]{examples_fitting_area}
  \mrcdrawmap \mrcdrawnetwork
  \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
    {\mrcmapattribution};
  \node[below left,fill=white,opacity=0.8,text opacity=1] at (mrcmap.north east)
    {Scale \mrcprettymapscale};
  \path[draw] (mrcmap.south west) rectangle (mrcmap.north east);
  \foreach \city in {honolulu,fairbanks,sandiego,miami,boston,denver}
    {\mrcmarker{type=ringx, draw=red, fill=red!20, named position=\city}}
\end{tikzpicture}
\end{dispExample*}


\clearpage
%-------------------------------------------------------------------------------
\subsection{Fixed Boundaries}

With \refKey{/mermap/supply/type}|=|\docValue{boundaries} a map is constructed
with fixed boundaries. In contrast to the other map types, the document
map size cannot be given directly but derives from the map setup. This bears
the risk of too large maps. The following example is a map with exact
boundaries \mrcformlat{-45} to \mrcformlat{-10}
and \mrcformlon{110} to \mrcformlon{155}. A decent \refKey{/mermap/supply/zoom}
is 5 (every zoom step doubles the map size in each direction).

\tikzsetnextfilename{examples_boundaries}%
\begin{dispExample*}{center lower,breakable}
% \mrcsetapikey{thunderforest}{YOUR-API-KEY}  % registered key
\begin{tikzpicture}
  \mrcmap[type=boundaries,
    west=110,east=155,south=-45,north=-10,
    zoom=5,
    source=thunderforest outdoors,
    ]{examples_boundaries}
  \mrcdrawmap
  \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
    {\mrcmapattribution};
  \mrcdrawnetwork
  \mrcdrawscalebar[width-in-km=1000,partitions=4,south-west-inside=5mm,
    major style={blue!50!gray!50!black}]
  \path[every node/.style={below,inner sep=0.5mm,font=\sffamily\tiny}]
    (mrcscalebar.south west) -- (mrcscalebar.south east)
    node[pos=0]{0} node[pos=0.5]{500}
    node[pos=1]{1000} node[pos=1,right,yshift=1mm]{km};
  \mrcmarker{lat=-35.3,lon=149.116667,type=pictodropring,
    draw=red,fill=red!10}
\end{tikzpicture}
\end{dispExample*}


\clearpage
%-------------------------------------------------------------------------------
\subsection{Map Without Map Tiles}

There is no coercion to use downloaded map tiles, if they are not needed or
wanted. With \refKey{/mermap/supply/target}|=none| no map tiles are downloaded.
The following example draws a rough polygon shape of Germany using
\refEnv{mrcroute*}.

\tikzsetnextfilename{examples_routemap}%
\begin{dispExample*}{center lower,breakable}
\begin{tikzpicture}
  \mrcNPdef{munich}{48.137222}{11.575556}
  \mrcNPdef{cologne}{50.938056}{6.956944}
  \mrcNPdef{hamburg}{53.550556}{9.993333}
  \mrcNPdef{berlin}{52.518611}{13.408333}
  \mrcmap[type=areafit,
    west=5,east=15,south=47,north=55,
    target=none,
    tex width=14cm, tex height=14cm,
    flex area fit=5mm
    ]{examples_routemap}
  \mrcclipmap
  \path[draw,fill=yellow!5] (mrcmap.south west) rectangle (mrcmap.north east);
  \begin{mrcroute*}[
      preaction={fill=black,opacity=.5,
          transform canvas={xshift=1mm,yshift=-1mm}},
      draw         = green!50!black,
      top color    = green!50!gray!5,
      bottom color = green!50!gray!15]
    \mrcpoint{47.57268069220318}{8.07968771809688}
    \mrcpoint{47.55206513030159}{8.458302263852103}
    \mrcpoint{47.60652271644701}{8.58564576447632}
    \mrcpoint{47.65002478441761}{8.475977737743394}
    \mrcpoint{47.8129149100372}{8.621611270810012}
    \mrcpoint{47.70405949548734}{8.824753417980977}
    \mrcpoint{47.57118357939037}{9.373387060586875}
    \mrcpoint{47.57763968687206}{9.783024034250792}
    \mrcpoint{47.46598581489455}{10.09335967295321}
    \mrcpoint{47.28014625489598}{10.22678291669482}
    \mrcpoint{47.32098723021947}{10.40092026792467}
    \mrcpoint{47.52413897927237}{10.53589647271817}
    \mrcpoint{47.5130331145614}{10.94403341747166}
    \mrcpoint{47.39097338968944}{11.04734763681045}
    \mrcpoint{47.42252867275465}{11.44170163808758}
    \mrcpoint{47.57832219946236}{11.64025530020549}
    \mrcpoint{47.65203740659043}{12.2451260343467}
    \mrcpoint{47.64005851006706}{12.78135708694006}
    \mrcpoint{47.42189293170733}{13.06242166895717}
    \mrcpoint{47.68727761120528}{13.13421507093485}
    \mrcpoint{47.70570852317097}{12.97737528172392}
    \mrcpoint{47.86836520373472}{12.94442906710615}
    \mrcpoint{48.06063312315187}{12.76937524145701}
    \mrcpoint{48.33220372303314}{13.38497370385176}
    \mrcpoint{48.57060635511297}{13.55281830406328}
    \mrcpoint{48.51465473490364}{13.78916086481733}
    \mrcpoint{48.74889509826911}{13.84448153318651}
    \mrcpoint{48.95974762545411}{13.50952525317658}
    \mrcpoint{49.37838143356481}{12.77000417129028}
    \mrcpoint{49.78495654813383}{12.44617209199484}
    \mrcpoint{49.93155217044134}{12.49159565814237}
    \mrcpoint{50.13144236663469}{12.24546848540114}
    \mrcpoint{50.28771270517358}{12.30810150664619}
    \mrcpoint{50.40989390494432}{12.94903619964524}
    \mrcpoint{50.65841629251407}{13.3075062965852}
    \mrcpoint{50.76329878585482}{13.97452403458363}
    \mrcpoint{51.02604511746936}{14.41278607347103}
    \mrcpoint{50.79185062876172}{14.80477069337384}
    \mrcpoint{51.15202957355457}{14.99270251686064}
    \mrcpoint{51.34128169635556}{15.02098384386006}
    \mrcpoint{51.53750266315752}{14.74120138252564}
    \mrcpoint{51.81924062442433}{14.62724686001225}
    \mrcpoint{52.11180711219343}{14.70514397703483}
    \mrcpoint{52.39266284958671}{14.60756306378661}
    \mrcpoint{52.60597277515545}{14.58725108586684}
    \mrcpoint{52.88134471470577}{14.16977248675916}
    \mrcpoint{53.14560306739344}{14.4215985570986}
    \mrcpoint{53.43447627332744}{14.39440456086107}
    \mrcpoint{53.76080228279986}{14.26477636730856}
    \mrcpoint{54.07894830697219}{13.84113247149844}
    \mrcpoint{54.34144910466647}{13.71477685386829}
    \mrcpoint{54.57879841452108}{13.41784866398943}
    \mrcpoint{54.38430816973541}{12.55218424463898}
    \mrcpoint{54.16285895583508}{12.11170524536321}
    \mrcpoint{54.11909611435144}{11.78253136604545}
    \mrcpoint{53.9629318241985}{11.23001765303107}
    \mrcpoint{54.02548042559235}{10.82100535035693}
    \mrcpoint{54.20942342601608}{11.17572026938692}
    \mrcpoint{54.42622022041155}{11.04601054827628}
    \mrcpoint{54.31534430886417}{10.73027571352005}
    \mrcpoint{54.4430955768925}{10.19233706975044}
    \mrcpoint{54.8317448735389}{10.00757468096804}
    \mrcpoint{54.87986478845961}{9.659528688958062}
    \mrcpoint{54.8308224503691}{9.271730840012292}
    \mrcpoint{54.92302453288877}{8.571394535898566}
    \mrcpoint{54.49119535498197}{8.900730234661252}
    \mrcpoint{54.34335254823343}{8.645116397508792}
    \mrcpoint{54.22420563732749}{8.880431477246834}
    \mrcpoint{53.87404422621243}{8.679945700393079}
    \mrcpoint{53.54658560722722}{8.286556227539295}
    \mrcpoint{53.7066272365128}{8.034813408953866}
    \mrcpoint{53.78031118673399}{7.387421106389351}
    \mrcpoint{53.51218238635882}{6.930006752473437}
    \mrcpoint{53.25894778199789}{7.171145313101468}
    \mrcpoint{52.64374200661974}{6.997019504055286}
    \mrcpoint{52.55662475372522}{6.719778263650637}
    \mrcpoint{52.38988292317155}{6.970320972580792}
    \mrcpoint{51.92299983362206}{6.742905287863996}
    \mrcpoint{51.88316670940459}{6.156741607019097}
    \mrcpoint{51.79567780329431}{5.98801954642294}
    \mrcpoint{51.43928428452571}{6.159613225461791}
    \mrcpoint{51.0215877919207}{5.887936542477828}
    \mrcpoint{50.79077378475993}{5.983374968822379}
    \mrcpoint{50.59470107381249}{6.228393825507839}
    \mrcpoint{50.33147032961352}{6.304617231833176}
    \mrcpoint{50.15747573005454}{6.092865298740861}
    \mrcpoint{49.97845765993797}{6.16527138749146}
    \mrcpoint{49.78369815200002}{6.535162836379246}
    \mrcpoint{49.45067080157749}{6.378063336429978}
    \mrcpoint{49.11701097547841}{6.794068795882435}
    \mrcpoint{49.14800972775451}{7.494253217695865}
    \mrcpoint{49.03198382192998}{7.640486837553122}
    \mrcpoint{48.92859396692077}{8.238456398546767}
    \mrcpoint{48.61606185482966}{7.832853167339047}
    \mrcpoint{48.05389084062409}{7.510556381211842}
    \mrcpoint{47.56795313962416}{7.588782160556193}
    \mrcpoint{47.57268069220318}{8.07968771809688}
  \end{mrcroute*}
  \foreach \city / \name in {munich/M\"unchen, cologne/K\"oln,
    hamburg/Hamburg, berlin/Berlin}
    {
      \mrcmarker{named position=\city,type=knob,fill=red!20,draw=red,
        radius=2mm}
      \mrcmarker{named position=\city,type=pin,fill=blue!10,draw=blue,
        contents=\name}
    }
\end{tikzpicture}
\end{dispExample*}


\clearpage
%-------------------------------------------------------------------------------
\subsection{Alignment of the Reference Position}

With \refKey{/mermap/supply/align} the reference position can be aligned
at different map positions.

\tikzsetnextfilename{examples_alignment}%
\begin{dispExample*}{center lower}
\mrcNPdef{munich}{48.137222}{11.575556}
\foreach \a in {east,center,west,north} {
\begin{tikzpicture}
  \mrcmap[type=reference,
    named position=munich,
    flex reference scale=1 000 000,
    source=opentopomap,
    tex width=\linewidth,tex height=3cm,
    align=\a]{examples_alignment_\a}
  \mrcdrawmap
  \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
    {\mrcmapattribution};   \mrcclipmap
  \tikzset{every node/.style={fill=white,fill opacity=0.8,text opacity=1}}
  \path[draw] (mrcmap.south west) rectangle (mrcmap.north east);
  \ifmrcNPinvicinity{munich}{
    \fill[red] (mrcpos) circle (4pt) node[below] {M\"unchen};}{}
  \node[text=red,above left] at (mrcmap.south east) {align=\a};
\end{tikzpicture}
\par}
\end{dispExample*}



\clearpage
%-------------------------------------------------------------------------------
\subsection{Flexible Zoom}

Map tiles are only provided at fixed zoom levels with natural numbers,
but the package allows a \refKey{/mermap/flex zoom} with rational numbers.
The flexible zoom is realized by combining a suitable fixed zoom with
an adapted document tile scaling, see \Fullref{sec:flexible_tile_size}.
The following example shows a more or less smooth zoom increase.
The same technique is used by all options starting with |flex|, e.g.
\refKey{/mermap/supply/flex reference scale}
or \refKey{/mermap/supply/flex area fit}
as seen in the examples before.

\tikzexternaldisable
\tikzsetnextfilename{examples_flex_zoom}%
\begin{dispExample*}{center lower,breakable}
% \mrcsetapikey{thunderforest}{YOUR-API-KEY}  % registered key
\mrcNPdef{munich}{48.137222}{11.575556}
\foreach \zz in {7.0,7.2,...,9.0} {
\edef\z{\fpeval{round(\zz,1)}}
\begin{tikzpicture}
  \mermapset{flex zoom=\z}
  \mrcmap[type=reference,
      named position=munich,
      source=thunderforest outdoors,
      tex width=\linewidth,
      tex height=3cm
    ]{examples_flex_zoom_\z}
  \mrcdrawmap
  \mrcclipmap
  \tikzset{every node/.style={fill=white,fill opacity=0.5,text opacity=1}}
  \node[above,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south)
      {\mrcmapattribution};
  \path[draw] (mrcmap.south west) rectangle (mrcmap.north east);
  \node[below left=2mm,align=right] at (mrcmap.north east)
    {flex zoom=\fpeval{round(\z,1)}\\ scale \mrcprettymapscale};
  \ifmrcNPinvicinity{munich}{
    \fill (mrcpos) circle (2pt) node[below] {M\"unchen};}{}
\end{tikzpicture}\par}
\end{dispExample*}