Academia.eduAcademia.edu

Maps in LaTeX Documents - an Introduction of the getmap Package

2017, Zpravodaj CSTUG

Institute of Mathematics of the Czech Academy of Sciences provides access to digitized documents strictly for personal use. Each copy of any part of this document must contain these Terms of use.

Zpravodaj Československého sdružení uživatelů TeXu Aleš Kozubík Mapy v LaTeXových dokumentoch – predstavenie balíčka getmap Zpravodaj Československého sdružení uživatelů TeXu, Vol. 27 (2017), No. 1-2, 101–109 Persistent URL: http://dml.cz/dmlcz/150274 Terms of use: © Československé sdružení uživatelů TeXu, 2017 Institute of Mathematics of the Czech Academy of Sciences provides access to digitized documents strictly for personal use. Each copy of any part of this document must contain these Terms of use. This document has been digitized, optimized for electronic delivery and stamped with digital signature within the project DML-CZ: The Czech Digital Mathematics Library http://dml.cz Mapy v LATEXových dokumentoch – predstavenie balíčka getmap Aleš Kozubík Cieľom príspevku je predstavenie balíčka getmap. Tento balíček umožňuje do LATEXových dokumentov zaradiť mapové materiály získané z externých zdrojov, ako sú OpenStreetMap alebo Google Maps a to aj s podporou Google Street View. V najjednoduchšom prípade pritom postačí aj špecifikácia požadovanej adresy. Balíček pre sťahovanie máp používa externý Lua skript, ktorý si vyžaduje aktiváciu funkcie \write18. Tento skript môže byť použitý aj samostatne z príkazového riadku. Kľúčové slová: Mapy, LATEX, getmap, Lua Úvod Poznáme to všetci – občas treba do dokumentu zaradiť obrázky, ktorých obsahom je mapa určitej oblasti alebo lokality, prípadne aj s vyznačením trasy. Niekto sa s týmto problémom stretáva častejšie (ak sa napríklad venuje geografii alebo pripravuje materiály pre cestovateľov), iný zriedkavejšie, napríklad pri príprave pozvánok a pokynov pre konferencie. Ale určite sa s touto úlohou stretol každý. My si v tomto príspevku predstavíme užitočný balíček getmap, ktorý umožňuje priamo do LATEXového dokumentu zakomponovať obrázky z takých zdrojov, ako sú OpenStreetMap alebo Google Maps včítane vkladania obrázkov z Google Street View. Podstata činnosti balíčka getmap, ktorého autorom je Josef Kleber, je pomerne jednoduchá. Balíček vlastne obsahuje jeden jediný príkaz \getmap, ktorý prostredníctvom jednoduchého Lua skriptu zabezpečí stiahnutie požadovaného obrázku, teda mapy alebo fotografie z Google Street View, do špecifikovaného grafického súboru. Takto získaný súbor potom vložíme do LATEXového dokumentu pomocou \includegraphics. Zložitejšie ako samotný príkaz sú teda jeho voliteľné argumenty, ktoré špecifikujú požadovaný obrázok. V článku sa teda budeme venovať týmto voliteľným položkám. Na správnu činnosť príkazu \getmap je potrebné aktivovať funkciu \write18, čo pri použití TEXLive znamená kompilovanie s prepínačom --shell-escape resp. pri použití MiKTeXu --enable-write18. Nakoľko mapy vkladáme do textu ako obrázky, je taktiež potrebné načítať balíček graphicx. doi: 10.5300/2017-1-2/101 101 Obrázok 1: Ukážka výstupu získaného pomocou \getmap. Zobrazená je náhodne vybraná adresa v centre mesta Žilina Príkaz \getmap Ako sme už spomenuli, balíček getmap obsahuje de facto jediný príkaz, ktorého plná syntax má tvar: \getmap[voľby]{adresa} V najjednoduchšom prípade stačí poznať len adresu, POI alebo geografické GPS súradnice zvoleného miesta. Položka adresa musí byť plne rozvinutá a nesmie obsahovať žiadne makrá. Získaný obrázok sa implicitne ukladá do súboru s názvom getmap.png, ktorý sa je uložený v aktuálnom pracovnom adresári. V prípade, že do nášho dokumentu vkladáme len jednu mapu je tento mechanizmus plne postačujúci. Príslušný zdrojový kód by teda mohol vyzerať napríklad takto: \getmap{Národná 25, 01001 Žilina, Slovakia} \includegraphics[width=.5\linewidth]{getmap} s výsledkom zobrazeným na obrázku 1. Pri opätovnej kompilácii súboru je potrebné si uvedomiť, že nedochádza ku prepisovaniu získaného obrázku getmap.png. To síce urýchľuje kompiláciu, na druhú stranu, ak dôjde ku zmene v zobrazovanej adrese, to má za následok, že obrázok v dokumente sa vlastne nezmení. To je možné riešiť buď odstránením súboru getmap.png z pracovného adresára pred novou kompiláciou, alebo vhodnou voľbou pre prepisovanie súborov, o ktorej budeme hovoriť neskôr. Voľby príkazu \getmap Činnosť príkazu \getmap podstatným spôsobom ovplyvňujú voliteľné argumenty. Dokonca je možné povedať, že sú dôležitejšie než samotný príkaz. My si predsta102 Obrázok 2: Ukážka výstupu na obrázku 1 získaného z Google Maps pomocou voľby mode=gm. Zobrazená je rovnaká adresa v centre mesta Žilina víme iba tie najdôležitejšie, resp. najpoužívanejšie z nich, úplný zoznam je možné nájsť v manuáli [3]. Voľba mode Voliteľný argument mode môže nadobúdať jednu z troch hodnôt osm|gm|gsv a určuje, ktorý mapový zdroj bude použitý. Z hodnoty argumentu je intuitívne zrejmé, ktorý zodpovedá OpenStreetMap, Google Maps alebo Google Street View. Ako implicitný zdroj je preddefinovaný OpenStreetMap. Ak by sme teda chceli výsledok na obrázku 1 získať pomocou Google Maps, je potrebné príkaz upraviť takto: \getmap[mode=gm]{Národná 25, 01001 Žilina, Slovakia} Výsledok si môžeme pozrieť na obrázku 2 . Voľby file a imagetype Voľba file=subor umožňuje pomenovať výstupný súbor, ktorý bude vytvorený príkazom \getmap. Názov súboru sa uvádza bez prípony. Na stanovenie grafického formátu získaného výstupu sa potom používa voľba imagetype, ktorá môže nadobúdať niektorú z hodnôt png|jpeg|jpg|gif, pričom ako implicitný typ je súbor vo formáte png. Táto voľba už je ale viazaná na použitý mód, pričom uvedené hodnoty sú dostupné pre mode=osm. Pri použití módu gm sú dostupné ešte ďalšie grafické formáty, ako napríklad png8|png32. Ak si teda uvedomíme, že pri spracovaní obrázku 1 bol použitý implicitný názov súboru getmap, je zrejmé, že súbor vložený do obrázku 2 je potrebné aj premenovať. Úplný zdrojový kód pre výstup na obrázku 2 teda vyzerá takto: \getmap[mode=gm,file=myobr]{Národná 25, 01001 Žilina, Slovakia} 103 Obrázok 3: Ukážka výstupu rovnakej oblasti ako na obrázku 1, získaného z Google Maps pomocou voľby type=satellite. Zobrazená je rovnaká adresa v centre mesta Žilina Voľba type Voľba type môže v móde osm nadobúdať niektorú z troch hodnôt map|sat|hyb pre zobrazenie mapy, satelitnej snímky alebo hybridné zobrazenie mapy a satelitnej snímky. Pri nastavení módu na hodnotu gm sa možné hodnoty voliteľného argumentu type menia na roadmap|satellite|hybrid|terrain. Na obrázku 3 ilustrujeme satelitný záber rovnakého výrezu centra mesta ako na mapách na obrázkoch 1 a 2. Voľba overwrite Ide o dôležitý voliteľný argument, ktorý určuje, či sa pri jednotlivých kompiláciách budú získané obrázky prepisovať alebo nie. Nastavuje sa na logické hodnoty true|false. Tento argument je užitočný, ak meníme definovaný výrez z mapy, aby sme nemuseli manuálne odstraňovať obrázky z predchádzajúcich kompilácií. Naopak, jeho nastavenie na hodnotu false urýchľuje preklad, ak máme obrázkov veľa a sú už z predchádzajúcich behov LATEXu vytvorené. Voľba xsize a ysize Tieto voliteľné hodnoty určujú rozmery získaného obrázku v pixeloch, pričom hodnota xsize určuje jeho šírku a hodnota ysize určuje jeho výšku. Implicitné rozmery sú nastavené na hodnoty 600 × 400, pričom hodnotu je možné meniť. V režime osm sú pre oba rozmery horné hranice 3 840, kým slobodná verzia Google maps je obmedzená na rozmery 640 × 640. Vyznačovanie objektov na mapách Na vyznačenie významných objektov či orientačných bodov na mape slúžia tzv. markery. Tieto sa definujú pomocou voliteľného argumentu markers a ako hodnota 104 Obrázok 4: Ukážka mapy okolia FRI ŽU (marker F) s vyznačením stravovacích zariadení „Miláno“ (marker M) a „Kazačok“ (marker K) je mu priradený zoznam všetkých značiek, ktoré majú byť vyznačené na mape. Zoznam markerov sa uzatvára do zložených zátvoriek, pričom každý z nich je definovaný sekvenciou: &markers=size:mid|color:blue|label:S|loc1|loc2|...|locn Jednotlivé položky potom definujú vlastnosti markerov. Hodnota parametra size môže nadobúdať hodnoty tiny,mid,small, pričom ako implicitná hodnota sa berie mid. Parameter color definuje farbu markera, ktorá môže byť zadaná buď pomenovaním alebo hexadecimálnym kódom. Parameter label určuje značku vo vnútri markera (len pri veľkosti mid). Prípustné sú numerické znaky alebo kapitálky. Hodnoty loc potom definujú lokalizáciu markera na mape. Ukážku mapy s vyznačenými objektmi vidíme na obrázku 4, kde je zobrazené okolie Fakulty riadenia a informatiky a v jej blízkosti dve reštaurácie. Príslušný kód príkazu \getmap vyzerá takto: \getmap[file=fricka,overwrite=true,mode=gm, markers={&markers=size:mid|label:F|color:red| Fakulta riadenia a informatiky, 01008 Žilina, Slovakia% &markers=size:mid|label:M|color:blue| Obchodná 3269, 01008 Žilina, Slovakia,% &markers=size:mid|label:K|color:blue| Slovanská 3278, 01008 Žilina, Slovakia},% visible={{49.16, 18.65}|{49.21, 18.45}} ]{} V zdrojovom kóde si môžeme všimnúť tiež argument visible. Jeho úlohou je zabezpečenie zobrazenia takého výrezu mapy, aby všetky lokality uvedené v zozname a oddelené zvislou čiarou boli na obrázku viditeľné. Je ich možné zadať ako objekty alebo pomocou GPS súradníc. 105 Obrázok 5: Ukážka mapy okolia FRI ŽU (marker F) s vyznačením stravovacích zariadení „Miláno“ (marker M) a „Kazačok“ (marker K) a trasy ku nim Vyznačenie trasy Často je potrebné v mape vyznačiť aj cestu, ako je možné prejsť od jedného objektu ku druhému, prípadne viacero trás. Na tieto účely má príkaz \getmap voliteľný parameter path, ktorý podobne ako markers očakáva zoznam URL parametrov oddelených zvislou čiarou v tvare: &path=weight:5|color:orange|loc1|loc2|...|locn Hodnota weight udáva hrúbku čiary vyznačujúcej trasu, color farbu tejto čiary a ostatné hodnoty predstavujú lokalizačné údaje. Lokalizačné údaje je pri tom možné zadávať buď ako adresy alebo dvojicu GPS súradníc. Vyznačenie dvoch trás je ilustrované na obrázku 5. Príslušný zdrojový kód upravíme takto: \getmap[file=fricka3,overwrite=true,mode=gm, markers={&markers=size:mid|label:F|color:red| Fakulta riadenia a informatiky, 01008 Žilina, Slovakia% &markers=size:mid|label:M|color:blue| Obchodná 3269, 01008 Žilina, Slovakia,% &markers=size:mid|label:K|color:blue| Slovanská 3278, 01008 Žilina, Slovakia},% path={&path=weight:5|color:orange|Fakulta riadenia a informatiky, 01008 Žilina, Slovakia|49.203912,18.763293| 49.208426,18.761190|Obchodná 3269, 01008 Žilina, Slovakia% &path=weight:5|color:purple|Slovanská 3278, 01008 Žilina, Slovakia|49.207304,18.768442|49.206660,18.766833| 49.205117,18.768314|49.203267,18.762885}]{} 106 Obrázok 6: Snímka FRI ŽU zo služby Google Street View Obrázok 7: Satelitný záber okolia FRI ŽU Obrázky Google Street View Balíček getmap umožňuje vkladať do dokumentu aj fotografie, získané prostredníctvom služby Google Street View. Na tieto účely je potrebné pomocou voliteľných argumentov nastaviť službu mode=gsv. Pre špecifikáciu záberu sú dôležité voľby heading, ktorá udáva smer záberu zo stanoveného miesta v rozpätí 0–360 (pre sever použijeme hodnotu 0, pre východ 90 atď.), pitch, ktorá definuje uhol sklonu kamery od vodorovnej roviny a udáva sa v rozpätí od −90 po 90, a voľba fov udávajúca veľkosť rozsahu horizontálneho záberu v stupňoch, a to v rozsahu 0–120. Všetky uvedené parametre sú merané v stupňoch. Ilustrujeme si to na obrázku fakulty. Príslušnú snímku získame napríklad takýmto príkazom: \getmap[file=pfricka,mode=gsv,heading=120,fov=120,pitch=20, xsize=600,ysize=450,scale=2,zoom=20,overwrite=true] {49.202217,18.761407} Výsledok potom vidíme na obrázku 6. Na susednom obrázku 7 vidíme satelitný záber okolia fakulty s vyznačeným bodom snímania. Script getmapdl Ako sme sa už zmienili v úvode tohto príspevku, balíček getmap vlastne využíva jeden Lua skript, ktorý môže byť použitý aj z príkazového riadku. Úplnú nápovedu ku skriptu získame z príkazového riadku obvyklým postupom, teda: $ getmapdl -h 107 Z dostupných prepínačov si uvedieme len niekoľko najdôležitejších: -m určuje mód, obvykle osm|gm|gsv, -l určuje lokalitu, -i určuje formát grafického súboru, -o určuje pomenovanie výstupného súboru (bez prípony). Ak to zhrnieme, potom pomocou príkazu getmapdl -m gm -l ’Národná 25,01001 Žilina, Slovakia’ -i jpg -o zilina získame rovnaký obrázok, ako je na obrázku 2 a výsledok bude uložený v súbore zilina.jpg. Záver V príspevku sme predstavili balíček getmap. Na ukážkach bolo demonštrované, ako je do textu možné zaradiť nielen mapy získané zo služieb Open Street Map alebo Google Maps, ale aj fotografie objektov získané pomocou Google Street View. Poďakovanie Tento príspevok vznikol s láskavým prispením grantu KEGA–011ŽU–4/2014 „Experimentálna matematika – zviditeľnenie neviditeľného“ podporeného Slovenskou kultúrno-edukačnou grantovou agentúrou. Reference [1] BLAŠKO, R.: LATEX nie je farba na maľovanie, Otvorený softvér vo vzdelávaní, výskume a IT riešeniach, zborník medzinárodnej konferencie OSSConf 2010, Žilina, 1.–4. júla 2010, str. 43–52, ISBN 978-80-970457-0-8, http: //ossconf.soit.sk/images/zborniky/zbornik2010.pdf. [2] BLAŠKO, R.: LATEX nie je farba na maľovanie, ale na písanie, Otvorený softvér vo vzdelávaní, výskume a IT riešeniach, zborník medzinárodnej konferencie OSSConf 2011, Žilina, 1.–4. júla 2011, str. 249–258, ISBN 978-80-970457-1-5, http://ossconf.soit.sk/images/zborniky/ zbornik2012.pdf. [3] KLEBER, J.: Downloading maps from OpenStreetMap, Google Maps or Google Street View. [4] KOPKA, H. – DALY, P. W.: LATEX – Podrobný průvodce, Brno, Computer Press, 2004, ISBN 80-722-6973-9. 108 [5] KOZUBÍK, A.: Prezentačné materiály v triede Beamer, Zborník príspevkov z medzinárodnej konferencie OSSConf 2011, Žilina, 1.–4. júla 2011, str. 223–235, ISBN 978-80-970457-1-5. [6] RYBIČKA, J.: LATEX pro začátečníky, Brno, KONVOJ 2003, ISBN 80-7302-049-1. [7] RYBIČKA, J., ČAČKOVÁ, P., PŘICHYSTAL J.: Průvodce tvorbou dokumentů, Bučovice, Nakladatelství Martin Stříž 2011, ISBN 978-80-87106-43-3. [8] STŘÍŽ, P.: Sazba v TEXu a kresba v METAPOSTu, Bučovice, Nakladatelství Martin Stříž 2011, ISBN 978-80-87106-51-8. Summary: Maps in LATEX Documents – an Introduction of the getmap Package The aim of this article is to introduce the getmap package. This package allows to include into the LATEX documents the map materials obtained from the external resources such as OpenStreetMap and Google Maps and even with the support of Google Street View. In the simplest case, the specification of an address is sufficient. The package loads the map using the \write18 feature, which must be activated to use this package. The image will be downloaded by an external Lua script that can be used also from the command line. Keywords: Maps, LATEX, getmap, Lua Katedra matematických metód a operačnej analýzy, Fakulta riadenia a informatiky, Žilinská univerzita, Univerzitná 8215/1, 010 26 Žilina, Slovenská republika 109