我为这个问题奋斗了一段时间,却未能找到一个直接的答案。
我有几张地图需要在tikz
环境中使用getmap
包来显示。地图位置(街道、城镇、国家)的数据都存储在.dat
文件中,因此我用来pgfplotstablegetelem
读取位置并将其存储为新定义。然后,存储的参数用于输入drawMapE
应该生成地图的命令。
问题是我找不到getmap
正确的方法。生成的 URL 中没有城镇、街道和国家的名称,只有变量的名称。
该文件包含几列,其中包括国家、城镇、街道、缩写。
我感谢您对此的帮助。
请看一下这个MWE:
\documentclass[margin=0pt]{standalone}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[overwrite=true,mode=gm]{getmap}
\usepackage{tikz}
\usepackage{pgfplotstable}
\usetikzlibrary{backgrounds,decorations.pathmorphing,calc,external,fadings}
\pgfplotsset{compat=1.15}
\newcommand{\drawMapE}[6]{
\getmap[file=img/#1,
overwrite=true,
color=blue,
xsize=600,
ysize=600,
zoom=16,
scale=2,
markers={&markers=size:mid|color:green|#2},
visible={#3},
]{}
\node at (#4,#5) {\includegraphics[width=#6cm]{img/#1}};
}
\begin{document}
\pgfplotstableread[col sep=comma,header=has colnames]{table/places.dat}{\datawhead}
\begin{tikzpicture}
\pgfmathsetmacro\W{40}
\pgfmathsetmacro\H{40}
\pgfmathsetmacro\R{10}
\clip (0,0) rectangle (\W,\H);
\foreach \a/\i in {0/1,30/2}{
\pgfmathsetmacro\x{\W/2+\R*cos(\a)}
\pgfmathsetmacro\y{\H/2+\R*sin(\a)}
\pgfplotstablegetelem{\i}{street}\of{\datawhead}
\edef\street{\expandafter\pgfplotsretval}
\pgfplotstablegetelem{\i}{town}\of{\datawhead}
\edef\town{\pgfplotsretval}
\pgfplotstablegetelem{\i}{country}\of{\datawhead}
\edef\country{\pgfplotsretval}
\pgfplotstablegetelem{\i}{abbr}\of{\datawhead}
\def\fileName{\pgfplotsretval}
\drawMapE{\fileName}{\street,\town,\country}{}{\x}{\y}{5}
}
\end{tikzpicture}
\end{document}
本例中假设生成两个内容不同(地址不同)的地图,中间相距 R 处。此处由于 URL 错误,地址自动更改为默认地址。日志文件示例:
PGFPlots: reading {table/places.dat}
Package getmap Info: using latin1 encoding on input line 47.
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/se-iso-8859-1.def
File: se-iso-8859-1.def 2016/05/16 v1.11 stringenc: ISO-8859-1
)
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/se-utf8.def
File: se-utf8.def 2016/05/16 v1.11 stringenc: UTF-8
)
runsystem(getmapdl -l "" -m gm -x 600 -y 600 -z 16 -s 2 -t roadmap -i png -c "
blue" -n 1 -L "en" -M "&markers=size:mid|color:green|\street ,\town ,\country "
-C "" -P "" -p "" -V "" -o img/kaart6c)...executed.
places.dat 包含以下内容:
abbr,street,town,country,month,year
arne5,Arne Ulstrups vei 4,H{\o}vik,Norway,October,2008
答案1
我拜访了德语论坛@naphaneal 的建议,并找到了一些有用的信息,谢谢!首先,似乎需要使用数据工具包使用 \expandonce 为 \getmap 命令提供正确的位置地址。这与前列腺素命令解决了我遇到的问题。
需要说明的是:我有大约 12 张地图要放入我的图像中,但编译 tex 文件后,并非所有地图都已提取,其中三张是空文件。在这种情况下,删除空的 .png 文件,然后重新编译,并将 \getmap 命令的选项 overwrite 设置为 false。
overwrite=false
通常一次尝试就足以获取丢失的文件。完整的工作代码:
\documentclass[margin=0pt,crop,tikz]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{datatool}
\usepackage[mode=gm]{getmap}
\begin{document}
\DTLsetseparator{,}
\DTLloaddb{places}{table/places.dat}
\begin{tikzpicture}
\pgfmathsetmacro\W{40}
\pgfmathsetmacro\H{40}
\pgfmathsetmacro\R{15}
\clip (0,0) rectangle (\W,\H);
\draw (0,0) rectangle (\W,\H);
\DTLforeach*{places}{\street=street,\town=town, \country=country,\abbr=abbr}{%
\begingroup
\edef\x{\endgroup
\noexpand\getmap[
file=img/\abbr,%
overwrite=false,
color=blue,
xsize=600,
ysize=600,
zoom=16,
scale=2
]{%
\expandonce\street, \expandonce\town, \expandonce\country%
}%
}\x
\pgfmathsetmacro\xi{0.5*\W+\R*cos(\DTLcurrentindex*30)}
\pgfmathsetmacro\yi{0.5*\H+\R*sin(\DTLcurrentindex*30)}
\node[anchor=center,inner sep=0,outer sep=0] at (\xi,\yi) {\includegraphics[width=8cm]{img/\abbr}};
}
\end{tikzpicture}
\end{document}
places.dat 文件的示例:
abbr,street,town,country,month,year
arne5,Arne Ulstrups vei 4,H{\o}vik,Norway,October,2008