1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-03 22:39:15 +02:00

Compare commits

...

41 Commits
4.5 ... 4.8

Author SHA1 Message Date
9e798e626c Decreased outlier detection window 2017-05-25 01:55:09 +02:00
cb70f0dded Merge pull request #27 from eson57/patch-1
Update gpxsee_sv.ts
2017-05-23 23:30:38 +02:00
400003f684 Update gpxsee_sv.ts 2017-05-23 21:50:21 +02:00
69db510b10 Decreased default speed filter value 2017-05-23 16:06:05 +02:00
cd9ea0f8a9 Unified settingsorder 2017-05-23 13:43:40 +02:00
0f6c8eb896 Code cleanup 2017-05-23 13:23:14 +02:00
6b3c0d05ca Merge branch 'master' of https://github.com/tumic0/GPXSee 2017-05-23 13:22:41 +02:00
b0cc028c4c Localization update 2017-05-23 13:03:28 +02:00
1513130435 Settings polishing on OS X 2017-05-23 12:50:46 +02:00
ec798451e8 Fixed POI radius setting handling 2017-05-23 00:26:59 +02:00
ffc61552d2 Code cleanup 2017-05-22 23:42:15 +02:00
aff7b1c13f Allow only odd window sizes for moving average filter 2017-05-22 23:41:01 +02:00
d54f22d3f0 Fixed crash with 0 window width 2017-05-22 22:37:35 +02:00
dba6291f3e Better (consistent) graph definition 2017-05-22 18:42:23 +02:00
e96cee2ea8 Improved filtering settings layout 2017-05-22 17:04:37 +02:00
1eaaea98a3 Version++ 2017-05-22 16:12:30 +02:00
a90073c422 Added missing icon 2017-05-22 16:10:44 +02:00
223a13583c Added data filtering settings 2017-05-22 14:54:22 +02:00
4386e1f2e1 Code cleanup 2017-05-16 13:18:57 +02:00
5bfe9c2527 Added missing ellipses 2017-05-16 12:59:59 +02:00
efa2b1c366 Code cleanup 2017-05-16 12:59:40 +02:00
e0ad64a902 Added missing units type setup for new items 2017-05-16 11:51:48 +02:00
f0a1acb96a Added missing libgeotrans Source Code Disclaimer 2017-05-08 20:39:42 +02:00
5f3bdb87f8 Added support for British, Irish and Swedish grid projections 2017-05-08 20:17:14 +02:00
90d062e097 Switched to latitude origin capable transverse mercator implementation 2017-05-08 19:53:50 +02:00
58b4c87d46 Fixed broken southern hemisphere reference points conversion
Fixed broken UTM zone setup
Added New Zealand TM 2000 "projection" support
2017-05-06 00:53:39 +02:00
02654ec862 Removed obsolete check 2017-05-05 09:09:32 +02:00
ff015c8714 Added missing data validity checks 2017-05-05 09:00:57 +02:00
c339116cd1 Added support for Albers Equal-Area projection 2017-05-04 20:25:47 +02:00
d8d70bfd8b Added missing MB->kB conversion 2017-05-04 00:04:28 +02:00
7d8149ace3 Fixed typo 2017-05-04 00:01:27 +02:00
4460b454c4 Added pixmap cache configuration to options. 2017-05-03 23:55:16 +02:00
211310f377 Version++ 2017-05-03 22:00:10 +02:00
1e4bcd0ac1 Added support for OZF3 map files 2017-05-03 21:34:13 +02:00
1a66ed0a36 Use the proper layer when displaying a single waypoint on an atlas. 2017-05-01 22:49:01 +02:00
273a127069 Version++ 2017-05-01 13:04:15 +02:00
1c0a0fd0b3 Fixed broken print/PDF export
(wrong map scale/waypoints size)
2017-05-01 12:59:56 +02:00
713e331b2a Some more OZFx extensions 2017-04-30 18:27:12 +02:00
96f406aad7 Removed Thunderforest map (requires API key)
Added USGS maps (topo & imagery)
2017-04-30 13:21:32 +02:00
0aedec66c4 Fixed atlas ll2xy() caching 2017-04-30 00:19:53 +02:00
b500031713 Atlas ll2xy() optimization 2017-04-29 23:15:44 +02:00
47 changed files with 1996 additions and 759 deletions

View File

@ -1,5 +1,5 @@
TARGET = GPXSee
VERSION = 4.5
VERSION = 4.8
QT += core \
gui \
network
@ -92,7 +92,9 @@ HEADERS += src/config.h \
src/ellipsoid.h \
src/ozf.h \
src/datum.h \
src/maplist.h
src/maplist.h \
src/albersequal.h \
src/oddspinbox.h
SOURCES += src/main.cpp \
src/gui.cpp \
src/poi.cpp \
@ -158,7 +160,9 @@ SOURCES += src/main.cpp \
src/ellipsoid.cpp \
src/ozf.cpp \
src/datum.cpp \
src/maplist.cpp
src/maplist.cpp \
src/albersequal.cpp \
src/oddspinbox.cpp
RESOURCES += gpxsee.qrc
TRANSLATIONS = lang/gpxsee_cs.ts \
lang/gpxsee_sv.ts \

View File

@ -14,11 +14,12 @@
<file>icons/arrow-left-double.png</file>
<file>icons/arrow-right-double.png</file>
<file>icons/view-fullscreen.png</file>
<file>icons/office-chart-line-stacked.png</file>
<file>icons/office-chart-line.png</file>
<file>icons/preferences-desktop-display.png</file>
<file>icons/flag_48.png</file>
<file>icons/system-run.png</file>
<file>icons/document-print-preview.png</file>
<file>icons/view-filter.png</file>
<file>lang/gpxsee_cs.qm</file>
<file>lang/gpxsee_sv.qm</file>
<file>lang/gpxsee_de.qm</file>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 B

BIN
icons/office-chart-line.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

BIN
icons/view-filter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -190,367 +190,366 @@
<context>
<name>GUI</name>
<message>
<location filename="../src/gui.cpp" line="653"/>
<location filename="../src/gui.cpp" line="655"/>
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source>
<translation>Program GPXSee je distribuován pod podmínkami licence GNU General Public License verze 3. Pro více informací navštivte stránky programu na adrese </translation>
</message>
<message>
<location filename="../src/gui.cpp" line="731"/>
<location filename="../src/gui.cpp" line="733"/>
<source>Open file</source>
<translation>Otevřít soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="821"/>
<location filename="../src/gui.cpp" line="823"/>
<source>Open POI file</source>
<translation>Otevřít POI soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="310"/>
<source>Open</source>
<translation>Otevřít</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="294"/>
<location filename="../src/gui.cpp" line="296"/>
<source>Quit</source>
<translation>Ukončit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="302"/>
<location filename="../src/gui.cpp" line="669"/>
<location filename="../src/gui.cpp" line="670"/>
<location filename="../src/gui.cpp" line="304"/>
<location filename="../src/gui.cpp" line="671"/>
<location filename="../src/gui.cpp" line="672"/>
<source>Keyboard controls</source>
<translation>Ovládací klávesy</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="326"/>
<location filename="../src/gui.cpp" line="328"/>
<source>Close</source>
<translation>Zavřít</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="332"/>
<location filename="../src/gui.cpp" line="334"/>
<source>Reload</source>
<translation>Znovu načíst</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="583"/>
<location filename="../src/gui.cpp" line="585"/>
<source>Show</source>
<translation>Zobrazit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="500"/>
<location filename="../src/gui.cpp" line="577"/>
<location filename="../src/gui.cpp" line="502"/>
<location filename="../src/gui.cpp" line="579"/>
<source>File</source>
<translation>Soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="107"/>
<location filename="../src/gui.cpp" line="108"/>
<source>FIT files (*.fit)</source>
<translation>Soubory FIT (*.fit)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="108"/>
<location filename="../src/gui.cpp" line="109"/>
<source>IGC files (*.igc)</source>
<translation>Soubory IGC (*.igc)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="109"/>
<location filename="../src/gui.cpp" line="110"/>
<source>NMEA files (*.nmea)</source>
<translation>Soubory NMEA (*.nmea)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="300"/>
<location filename="../src/gui.cpp" line="698"/>
<location filename="../src/gui.cpp" line="699"/>
<location filename="../src/gui.cpp" line="302"/>
<location filename="../src/gui.cpp" line="700"/>
<location filename="../src/gui.cpp" line="701"/>
<source>Data sources</source>
<translation>Zdroje dat</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="340"/>
<source>Load POI file</source>
<translation>Nahrát POI soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="343"/>
<location filename="../src/gui.cpp" line="345"/>
<source>Close POI files</source>
<translation>Zavřit POI soubory</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="345"/>
<location filename="../src/gui.cpp" line="347"/>
<source>Overlap POIs</source>
<translation>Překrývat POI</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="349"/>
<location filename="../src/gui.cpp" line="351"/>
<source>Show POI labels</source>
<translation>Zobrazit názvy POI</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="354"/>
<location filename="../src/gui.cpp" line="356"/>
<source>Show POIs</source>
<translation>Zobrazit POI</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="363"/>
<location filename="../src/gui.cpp" line="365"/>
<source>Show map</source>
<translation>Zobrazit mapu</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="370"/>
<location filename="../src/gui.cpp" line="1165"/>
<source>Load map</source>
<translation>Nahrát mapu</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="373"/>
<location filename="../src/gui.cpp" line="375"/>
<source>Clear tile cache</source>
<translation>Vymazat mezipaměť dlaždic</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="377"/>
<location filename="../src/gui.cpp" line="381"/>
<location filename="../src/gui.cpp" line="681"/>
<location filename="../src/gui.cpp" line="312"/>
<source>Open...</source>
<translation>Otevřít...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="342"/>
<source>Load POI file...</source>
<translation>Nahrát POI soubor...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="373"/>
<source>Load map...</source>
<translation>Nahrát mapu...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="379"/>
<location filename="../src/gui.cpp" line="383"/>
<location filename="../src/gui.cpp" line="683"/>
<source>Next map</source>
<translation>Následující mapa</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="391"/>
<location filename="../src/gui.cpp" line="393"/>
<source>Show tracks</source>
<translation>Zobrazit cesty</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="395"/>
<location filename="../src/gui.cpp" line="397"/>
<source>Show routes</source>
<translation>Zobrazit trasy</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="399"/>
<location filename="../src/gui.cpp" line="401"/>
<source>Show waypoints</source>
<translation>Zobrazit navigační body</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="403"/>
<location filename="../src/gui.cpp" line="405"/>
<source>Waypoint labels</source>
<translation>Názvy navigačních bodů</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="414"/>
<location filename="../src/gui.cpp" line="416"/>
<source>Show graphs</source>
<translation>Zobrazit grafy</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="436"/>
<location filename="../src/gui.cpp" line="438"/>
<source>Show grid</source>
<translation>Zobrazit mřížku</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="442"/>
<location filename="../src/gui.cpp" line="444"/>
<source>Show toolbars</source>
<translation>Zobrazovat nástrojové lišty</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="448"/>
<location filename="../src/gui.cpp" line="450"/>
<source>Total time</source>
<translation>Celkový čas</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="453"/>
<location filename="../src/gui.cpp" line="974"/>
<location filename="../src/gui.cpp" line="455"/>
<location filename="../src/gui.cpp" line="1015"/>
<source>Moving time</source>
<translation>Čistý čas</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="460"/>
<location filename="../src/gui.cpp" line="462"/>
<source>Metric</source>
<translation>Metrické</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="465"/>
<location filename="../src/gui.cpp" line="467"/>
<source>Imperial</source>
<translation>Imperiální</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="471"/>
<location filename="../src/gui.cpp" line="473"/>
<source>Fullscreen mode</source>
<translation>Celoobrazovkový režim</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="477"/>
<location filename="../src/gui.cpp" line="479"/>
<source>Options...</source>
<translation>Nastavení...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="482"/>
<location filename="../src/gui.cpp" line="484"/>
<source>Next</source>
<translation>Následující</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="485"/>
<location filename="../src/gui.cpp" line="487"/>
<source>Previous</source>
<translation>Předchozí</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="489"/>
<location filename="../src/gui.cpp" line="491"/>
<source>Last</source>
<translation>Poslední</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="492"/>
<location filename="../src/gui.cpp" line="494"/>
<source>First</source>
<translation>První</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="514"/>
<location filename="../src/gui.cpp" line="516"/>
<source>Map</source>
<translation>Mapa</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="522"/>
<location filename="../src/gui.cpp" line="524"/>
<source>Graph</source>
<translation>Graf</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="530"/>
<location filename="../src/gui.cpp" line="532"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="531"/>
<location filename="../src/gui.cpp" line="533"/>
<source>POI files</source>
<translation>POI soubory</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="542"/>
<location filename="../src/gui.cpp" line="544"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="543"/>
<location filename="../src/gui.cpp" line="545"/>
<source>Display</source>
<translation>Zobrazit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="551"/>
<location filename="../src/gui.cpp" line="553"/>
<source>Settings</source>
<translation>Nastavení</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="555"/>
<location filename="../src/gui.cpp" line="557"/>
<source>Units</source>
<translation>Jednotky</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="564"/>
<location filename="../src/gui.cpp" line="566"/>
<source>Help</source>
<translation>Nápověda</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="679"/>
<location filename="../src/gui.cpp" line="681"/>
<source>Append file</source>
<translation>Přidat soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="680"/>
<location filename="../src/gui.cpp" line="682"/>
<source>Next/Previous</source>
<translation>Následující/Předchozí</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="683"/>
<location filename="../src/gui.cpp" line="685"/>
<source>Previous map</source>
<translation>Předchozí mapa</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="684"/>
<location filename="../src/gui.cpp" line="686"/>
<source>Zoom in</source>
<translation>Přiblížit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="686"/>
<location filename="../src/gui.cpp" line="688"/>
<source>Zoom out</source>
<translation>Oddálit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="688"/>
<location filename="../src/gui.cpp" line="690"/>
<source>Digital zoom</source>
<translation>Digitální zoom</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="689"/>
<location filename="../src/gui.cpp" line="691"/>
<source>Zoom</source>
<translation>Zoom</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="701"/>
<location filename="../src/gui.cpp" line="703"/>
<source>Online maps</source>
<translation>Online mapy</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="702"/>
<location filename="../src/gui.cpp" line="704"/>
<source>Online map URLs are read on program startup from the following file:</source>
<translation>URL online map jsou načteny při startu programu z následujícího souboru:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="713"/>
<location filename="../src/gui.cpp" line="715"/>
<source>Offline maps are loaded on program startup from the following directory:</source>
<translation>Offline mapy jsou načítány při startu aplikace z následujícího adresáře:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="716"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer image-based maps and tiled TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Očekávaná struktura je jedna mapa/atlas v samostatném podadresáři. Podporované mapové formáty jsou OziExplorer mapy a TrekBuddy mapy/atlasy (včetně tar varianty).</translation>
<location filename="../src/gui.cpp" line="1206"/>
<source>Open map file</source>
<translation>Otevřít mapový soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1198"/>
<location filename="../src/gui.cpp" line="1239"/>
<source>No files loaded</source>
<translation>Nejsou načteny žádné soubory</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="108"/>
<location filename="../src/gui.cpp" line="109"/>
<source>GPX files (*.gpx)</source>
<translation>Soubory GPX (*.gpx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="110"/>
<location filename="../src/gui.cpp" line="111"/>
<source>TCX files (*.tcx)</source>
<translation>Soubory TCX (*.tcx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="109"/>
<location filename="../src/gui.cpp" line="110"/>
<source>KML files (*.kml)</source>
<translation>Soubory KML (*.kml)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="107"/>
<location filename="../src/gui.cpp" line="108"/>
<source>CSV files (*.csv)</source>
<translation>Soubory CSV (*.csv)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="110"/>
<location filename="../src/gui.cpp" line="111"/>
<source>All files (*)</source>
<translation>Všechny soubory (*)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="960"/>
<location filename="../src/gui.cpp" line="963"/>
<location filename="../src/gui.cpp" line="1001"/>
<location filename="../src/gui.cpp" line="1004"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="952"/>
<location filename="../src/gui.cpp" line="993"/>
<source>Routes</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1166"/>
<location filename="../src/gui.cpp" line="1207"/>
<source>Map files (*.map *.tba *.tar)</source>
<translation>Mapové soubory (*.map *.tba *.tar)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1183"/>
<location filename="../src/gui.cpp" line="1224"/>
<source>Error loading map:</source>
<translation>Mapu nelze načíst:</translation>
</message>
<message numerus="yes">
<location filename="../src/gui.cpp" line="1202"/>
<location filename="../src/gui.cpp" line="1243"/>
<source>%n files</source>
<translation>
<numerusform>%n soubor</numerusform>
@ -559,122 +558,127 @@
</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="673"/>
<location filename="../src/gui.cpp" line="675"/>
<source>Next file</source>
<translation>Následující soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="650"/>
<location filename="../src/gui.cpp" line="652"/>
<source>Version </source>
<translation>Verze </translation>
</message>
<message>
<location filename="../src/gui.cpp" line="315"/>
<location filename="../src/gui.cpp" line="317"/>
<source>Print...</source>
<translation>Tisknout...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="320"/>
<location filename="../src/gui.cpp" line="322"/>
<source>Export to PDF...</source>
<translation>Exportovat do PDF...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="954"/>
<location filename="../src/gui.cpp" line="995"/>
<source>Waypoints</source>
<translation>Navigační body</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="674"/>
<location filename="../src/gui.cpp" line="676"/>
<source>Previous file</source>
<translation>Předchozí soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="106"/>
<location filename="../src/gui.cpp" line="107"/>
<source>Supported files (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx)</source>
<translation>Podporované soubory (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="407"/>
<location filename="../src/gui.cpp" line="409"/>
<source>Route waypoints</source>
<translation>Body tras</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="676"/>
<location filename="../src/gui.cpp" line="678"/>
<source>First file</source>
<translation>První soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="678"/>
<location filename="../src/gui.cpp" line="680"/>
<source>Last file</source>
<translation>Poslední soubor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="705"/>
<location filename="../src/gui.cpp" line="707"/>
<source>The file format is one map entry per line, consisting of the map name and tiles URL delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source>
<translation>Formát souboru je jeden mapový záznam na řádku, kde mapový záznam sestává ze jména mapy a URL dlaždic navzájem oddělených tabulátorem. Souřadnice dlaždice jsou v URL nahrazeny řetězci $x a $y, úroven přiblížení (zoom) pak řetězcem $z. Příklad:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="712"/>
<location filename="../src/gui.cpp" line="714"/>
<source>Offline maps</source>
<translation>Offline mapy</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="721"/>
<location filename="../src/gui.cpp" line="718"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Očekávaná struktura je jedna mapa/atlas v samostatném podadresáři. Podporované mapové formáty jsou OziExplorer mapy a TrekBuddy mapy/atlasy (včetně tar varianty).</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="723"/>
<source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source>
<translation>POI soubory, které se mají automaticky nahrát při startu programu jsou načítány z následujícího adresáře:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="810"/>
<location filename="../src/gui.cpp" line="812"/>
<source>Error loading data file:</source>
<translation>Datový soubor nelze načíst:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="813"/>
<location filename="../src/gui.cpp" line="838"/>
<location filename="../src/gui.cpp" line="815"/>
<location filename="../src/gui.cpp" line="840"/>
<source>Line: %1</source>
<translation>Řádka: %1</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="835"/>
<location filename="../src/gui.cpp" line="837"/>
<source>Error loading POI file:</source>
<translation>Soubor POI nelze načíst:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="946"/>
<location filename="../src/gui.cpp" line="987"/>
<source>Name</source>
<translation>Název</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="950"/>
<location filename="../src/gui.cpp" line="991"/>
<source>Tracks</source>
<translation>Cesty</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="305"/>
<location filename="../src/gui.cpp" line="649"/>
<location filename="../src/gui.cpp" line="307"/>
<location filename="../src/gui.cpp" line="651"/>
<source>About GPXSee</source>
<translation>O aplikaci GPXSee</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="588"/>
<location filename="../src/gui.cpp" line="590"/>
<source>Navigation</source>
<translation>Navigace</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="720"/>
<location filename="../src/gui.cpp" line="722"/>
<source>POIs</source>
<translation>POI body</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="422"/>
<location filename="../src/gui.cpp" line="970"/>
<location filename="../src/gui.cpp" line="424"/>
<location filename="../src/gui.cpp" line="1011"/>
<source>Distance</source>
<translation>Vzdálenost</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="429"/>
<location filename="../src/gui.cpp" line="552"/>
<location filename="../src/gui.cpp" line="972"/>
<location filename="../src/gui.cpp" line="431"/>
<location filename="../src/gui.cpp" line="554"/>
<location filename="../src/gui.cpp" line="1013"/>
<source>Time</source>
<translation>Čas</translation>
</message>
@ -755,156 +759,256 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/optionsdialog.cpp" line="34"/>
<location filename="../src/optionsdialog.cpp" line="36"/>
<source>Base color:</source>
<translation>Základní barva:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="35"/>
<location filename="../src/optionsdialog.cpp" line="37"/>
<source>Palette shift:</source>
<translation>Posun palety:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="47"/>
<location filename="../src/optionsdialog.cpp" line="49"/>
<source>Track width:</source>
<translation>Šířka cest:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="48"/>
<location filename="../src/optionsdialog.cpp" line="50"/>
<source>Track style:</source>
<translation>Styl cest:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="50"/>
<location filename="../src/optionsdialog.cpp" line="52"/>
<source>Tracks</source>
<translation>Cesty</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="60"/>
<location filename="../src/optionsdialog.cpp" line="62"/>
<source>Route width:</source>
<translation>Šířka tras:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="61"/>
<location filename="../src/optionsdialog.cpp" line="63"/>
<source>Route style:</source>
<translation>Styl tras:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="63"/>
<location filename="../src/optionsdialog.cpp" line="65"/>
<source>Routes</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="67"/>
<location filename="../src/optionsdialog.cpp" line="99"/>
<location filename="../src/optionsdialog.cpp" line="69"/>
<location filename="../src/optionsdialog.cpp" line="102"/>
<source>Use anti-aliasing</source>
<translation>Vyhlazovat hrany</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="97"/>
<location filename="../src/optionsdialog.cpp" line="100"/>
<source>Line width:</source>
<translation>Šířka čar:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="113"/>
<location filename="../src/optionsdialog.cpp" line="116"/>
<source>Colors</source>
<translation>Barvy</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="114"/>
<location filename="../src/optionsdialog.cpp" line="117"/>
<source>Paths</source>
<translation>Trasy</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="115"/>
<location filename="../src/optionsdialog.cpp" line="183"/>
<location filename="../src/optionsdialog.cpp" line="118"/>
<location filename="../src/optionsdialog.cpp" line="278"/>
<source>Graphs</source>
<translation>Grafy</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="127"/>
<location filename="../src/optionsdialog.cpp" line="125"/>
<source>Moving average window size</source>
<translation>Velikost okna klouzavého průměru</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="144"/>
<source>Elevation:</source>
<translation>Výška:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="145"/>
<source>Speed:</source>
<translation>Rychlost:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="146"/>
<source>Heart rate:</source>
<translation>Tep:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="147"/>
<source>Cadence:</source>
<translation>Kadence:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="148"/>
<source>Power:</source>
<translation>Výkon:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="150"/>
<source>Smoothing</source>
<translation>Vyhlazování</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="154"/>
<source>Eliminate GPS outliers</source>
<translation>Odstarnit odlehlé GPS záznamy</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="160"/>
<source>Outlier elimination</source>
<translation>Odstranění odlehlých hodnot</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="167"/>
<source>Smoothing:</source>
<translation>Vyhlazování:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="190"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="193"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="197"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="201"/>
<source>Minimal speed:</source>
<translation>Minimální rychlost:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="202"/>
<source>Minimal duration:</source>
<translation>Minimální doba trvání:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="209"/>
<source>Filtering</source>
<translation>Filtrování</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="210"/>
<source>Pause detection</source>
<translation>Detekce přestávek</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="222"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="130"/>
<location filename="../src/optionsdialog.cpp" line="225"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="134"/>
<location filename="../src/optionsdialog.cpp" line="229"/>
<source>POI radius:</source>
<translation>POI radius:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="140"/>
<location filename="../src/optionsdialog.cpp" line="224"/>
<location filename="../src/optionsdialog.cpp" line="235"/>
<location filename="../src/optionsdialog.cpp" line="334"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="147"/>
<location filename="../src/optionsdialog.cpp" line="242"/>
<source>Name</source>
<translation>Název</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="149"/>
<location filename="../src/optionsdialog.cpp" line="244"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="151"/>
<location filename="../src/optionsdialog.cpp" line="246"/>
<source>Distance</source>
<translation>Vzdálenost</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="153"/>
<location filename="../src/optionsdialog.cpp" line="248"/>
<source>Time</source>
<translation>Čas</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="155"/>
<location filename="../src/optionsdialog.cpp" line="250"/>
<source>Moving time</source>
<translation>Čistý čas</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="157"/>
<location filename="../src/optionsdialog.cpp" line="252"/>
<source>Item count (&gt;1)</source>
<translation>Počet objektů (&gt;1)</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="172"/>
<location filename="../src/optionsdialog.cpp" line="267"/>
<source>Separate graph page</source>
<translation>Samostatná stránka s grafy</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="182"/>
<location filename="../src/optionsdialog.cpp" line="277"/>
<source>Header</source>
<translation>Záhlaví</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="190"/>
<location filename="../src/optionsdialog.cpp" line="285"/>
<source>Use OpenGL</source>
<translation>Používat OpenGL</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="206"/>
<location filename="../src/optionsdialog.cpp" line="227"/>
<location filename="../src/optionsdialog.cpp" line="297"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="301"/>
<source>Image cache size:</source>
<translation>Mezipaměť obrázků:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="314"/>
<location filename="../src/optionsdialog.cpp" line="337"/>
<source>System</source>
<translation>Systém</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="222"/>
<location filename="../src/optionsdialog.cpp" line="331"/>
<source>Appearance</source>
<translation>Vzhled</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="225"/>
<location filename="../src/optionsdialog.cpp" line="333"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="335"/>
<source>Print &amp; Export</source>
<translation>Tisk a export</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="254"/>
<location filename="../src/optionsdialog.cpp" line="364"/>
<source>Options</source>
<translation>Nastavení</translation>
</message>
@ -954,22 +1058,22 @@
<context>
<name>ScaleItem</name>
<message>
<location filename="../src/scaleitem.cpp" line="81"/>
<location filename="../src/scaleitem.cpp" line="83"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="82"/>
<location filename="../src/scaleitem.cpp" line="84"/>
<source>ft</source>
<translation>ft</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="84"/>
<location filename="../src/scaleitem.cpp" line="86"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="85"/>
<location filename="../src/scaleitem.cpp" line="87"/>
<source>m</source>
<translation>m</translation>
</message>
@ -1073,27 +1177,27 @@
<context>
<name>WaypointItem</name>
<message>
<location filename="../src/waypointitem.cpp" line="18"/>
<location filename="../src/waypointitem.cpp" line="17"/>
<source>Name</source>
<translation>Název</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="19"/>
<location filename="../src/waypointitem.cpp" line="18"/>
<source>Coordinates</source>
<translation>Souřadnice</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="22"/>
<location filename="../src/waypointitem.cpp" line="21"/>
<source>Elevation</source>
<translation>Výška</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="25"/>
<location filename="../src/waypointitem.cpp" line="24"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="28"/>
<location filename="../src/waypointitem.cpp" line="27"/>
<source>Description</source>
<translation>Popis</translation>
</message>

View File

@ -190,336 +190,335 @@
<context>
<name>GUI</name>
<message>
<location filename="../src/gui.cpp" line="653"/>
<location filename="../src/gui.cpp" line="655"/>
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source>
<translation>GPXSee wird unter der GNU General Public License version 3 vertrieben. Mehr Informationen zu GPXSee auf der Homepage </translation>
</message>
<message>
<location filename="../src/gui.cpp" line="731"/>
<location filename="../src/gui.cpp" line="733"/>
<source>Open file</source>
<translation>Datei öffnen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="821"/>
<location filename="../src/gui.cpp" line="823"/>
<source>Open POI file</source>
<translation>POI Datei öffnen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="310"/>
<source>Open</source>
<translation>Öffnen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="294"/>
<location filename="../src/gui.cpp" line="296"/>
<source>Quit</source>
<translation>Beenden</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="302"/>
<location filename="../src/gui.cpp" line="669"/>
<location filename="../src/gui.cpp" line="670"/>
<location filename="../src/gui.cpp" line="304"/>
<location filename="../src/gui.cpp" line="671"/>
<location filename="../src/gui.cpp" line="672"/>
<source>Keyboard controls</source>
<translation>Tastaturkürzel</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="326"/>
<location filename="../src/gui.cpp" line="328"/>
<source>Close</source>
<translation>Schließen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="332"/>
<location filename="../src/gui.cpp" line="334"/>
<source>Reload</source>
<translation>Neu Laden</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="583"/>
<location filename="../src/gui.cpp" line="585"/>
<source>Show</source>
<translation>Ansicht</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="500"/>
<location filename="../src/gui.cpp" line="577"/>
<location filename="../src/gui.cpp" line="502"/>
<location filename="../src/gui.cpp" line="579"/>
<source>File</source>
<translation>Datei</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="107"/>
<location filename="../src/gui.cpp" line="108"/>
<source>FIT files (*.fit)</source>
<translation>FIT-Dateien (*.fit)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="108"/>
<location filename="../src/gui.cpp" line="109"/>
<source>IGC files (*.igc)</source>
<translation>IGC-Dateien (*.igc)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="109"/>
<location filename="../src/gui.cpp" line="110"/>
<source>NMEA files (*.nmea)</source>
<translation>NMEA-Dateien (*.nmea)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="300"/>
<location filename="../src/gui.cpp" line="698"/>
<location filename="../src/gui.cpp" line="699"/>
<location filename="../src/gui.cpp" line="302"/>
<location filename="../src/gui.cpp" line="700"/>
<location filename="../src/gui.cpp" line="701"/>
<source>Data sources</source>
<translation>Datenquellen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="340"/>
<source>Load POI file</source>
<translation>POI-Datei laden</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="343"/>
<location filename="../src/gui.cpp" line="345"/>
<source>Close POI files</source>
<translation>POI-Datei schließen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="345"/>
<location filename="../src/gui.cpp" line="347"/>
<source>Overlap POIs</source>
<translation>POI überlappen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="349"/>
<location filename="../src/gui.cpp" line="351"/>
<source>Show POI labels</source>
<translation>POI-Labels anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="354"/>
<location filename="../src/gui.cpp" line="356"/>
<source>Show POIs</source>
<translation>POIs anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="363"/>
<location filename="../src/gui.cpp" line="365"/>
<source>Show map</source>
<translation>Karte anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="370"/>
<location filename="../src/gui.cpp" line="1165"/>
<source>Load map</source>
<translation>Karte laden</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="373"/>
<location filename="../src/gui.cpp" line="375"/>
<source>Clear tile cache</source>
<translation>Tile-Cache bereinigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="377"/>
<location filename="../src/gui.cpp" line="381"/>
<location filename="../src/gui.cpp" line="681"/>
<location filename="../src/gui.cpp" line="312"/>
<source>Open...</source>
<translation>Öffnen...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="342"/>
<source>Load POI file...</source>
<translation>POI-Datei laden...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="373"/>
<source>Load map...</source>
<translation>Karte laden...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="379"/>
<location filename="../src/gui.cpp" line="383"/>
<location filename="../src/gui.cpp" line="683"/>
<source>Next map</source>
<translation>Nächste Karte</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="391"/>
<location filename="../src/gui.cpp" line="393"/>
<source>Show tracks</source>
<translation>Strecken anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="395"/>
<location filename="../src/gui.cpp" line="397"/>
<source>Show routes</source>
<translation>Routen anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="399"/>
<location filename="../src/gui.cpp" line="401"/>
<source>Show waypoints</source>
<translation>Wegpunkte anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="403"/>
<location filename="../src/gui.cpp" line="405"/>
<source>Waypoint labels</source>
<translation>Wegpunkt Labels</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="414"/>
<location filename="../src/gui.cpp" line="416"/>
<source>Show graphs</source>
<translation>Graphen anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="436"/>
<location filename="../src/gui.cpp" line="438"/>
<source>Show grid</source>
<translation>Gitter anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="442"/>
<location filename="../src/gui.cpp" line="444"/>
<source>Show toolbars</source>
<translation>Toolbars anzeigen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="448"/>
<location filename="../src/gui.cpp" line="450"/>
<source>Total time</source>
<translation>Gesamtzeit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="453"/>
<location filename="../src/gui.cpp" line="974"/>
<location filename="../src/gui.cpp" line="455"/>
<location filename="../src/gui.cpp" line="1015"/>
<source>Moving time</source>
<translation>Bewegungszeit</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="460"/>
<location filename="../src/gui.cpp" line="462"/>
<source>Metric</source>
<translation>Metrisch</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="465"/>
<location filename="../src/gui.cpp" line="467"/>
<source>Imperial</source>
<translation>Imperial</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="471"/>
<location filename="../src/gui.cpp" line="473"/>
<source>Fullscreen mode</source>
<translation>Vollbildmodus</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="477"/>
<location filename="../src/gui.cpp" line="479"/>
<source>Options...</source>
<translation>Einstellungen...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="482"/>
<location filename="../src/gui.cpp" line="484"/>
<source>Next</source>
<translation>Nächste</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="485"/>
<location filename="../src/gui.cpp" line="487"/>
<source>Previous</source>
<translation>Vorherige</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="489"/>
<location filename="../src/gui.cpp" line="491"/>
<source>Last</source>
<translation>Letzte</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="492"/>
<location filename="../src/gui.cpp" line="494"/>
<source>First</source>
<translation>Erste</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="514"/>
<location filename="../src/gui.cpp" line="516"/>
<source>Map</source>
<translation>Karte</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="522"/>
<location filename="../src/gui.cpp" line="524"/>
<source>Graph</source>
<translation>Graph</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="530"/>
<location filename="../src/gui.cpp" line="532"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="531"/>
<location filename="../src/gui.cpp" line="533"/>
<source>POI files</source>
<translation>POI-Dateien</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="542"/>
<location filename="../src/gui.cpp" line="544"/>
<source>Data</source>
<translation>Daten</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="543"/>
<location filename="../src/gui.cpp" line="545"/>
<source>Display</source>
<translation>Anzeige</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="551"/>
<location filename="../src/gui.cpp" line="553"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="555"/>
<location filename="../src/gui.cpp" line="557"/>
<source>Units</source>
<translation>Einheiten</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="564"/>
<location filename="../src/gui.cpp" line="566"/>
<source>Help</source>
<translation>Hilfe</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="679"/>
<location filename="../src/gui.cpp" line="681"/>
<source>Append file</source>
<translation>An Datei anhängen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="680"/>
<location filename="../src/gui.cpp" line="682"/>
<source>Next/Previous</source>
<translation>Nächste/Vorherige</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="683"/>
<location filename="../src/gui.cpp" line="685"/>
<source>Previous map</source>
<translation>Vorherige Karte</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="684"/>
<location filename="../src/gui.cpp" line="686"/>
<source>Zoom in</source>
<translation>Hineinzoomen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="686"/>
<location filename="../src/gui.cpp" line="688"/>
<source>Zoom out</source>
<translation>Herauszoomen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="688"/>
<location filename="../src/gui.cpp" line="690"/>
<source>Digital zoom</source>
<translation>Digitaler Zoom</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="689"/>
<location filename="../src/gui.cpp" line="691"/>
<source>Zoom</source>
<translation>Zoom</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="701"/>
<location filename="../src/gui.cpp" line="703"/>
<source>Online maps</source>
<translation>Onlinekarten</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="702"/>
<location filename="../src/gui.cpp" line="704"/>
<source>Online map URLs are read on program startup from the following file:</source>
<translation>Onlinekarten URLs werden zu Programmstart aus der folgenden Datei gelesen:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="712"/>
<location filename="../src/gui.cpp" line="714"/>
<source>Offline maps</source>
<translation>Offlinekarten</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="713"/>
<location filename="../src/gui.cpp" line="715"/>
<source>Offline maps are loaded on program startup from the following directory:</source>
<translation>Offlinekarten werden zu Programmstart aus dem folgenden Verzeichnis geladen:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="716"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer image-based maps and tiled TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Die erwartete Struktur ist eine Karte/ein Atlas pro Unterverzeichnis. Unterstützte Kartenformate sind bildbasierte OziExplorer Karten und tile-basierte TrekBuddy Karten/Atlanten (mit oder ohne tar Kompression).</translation>
<location filename="../src/gui.cpp" line="1206"/>
<source>Open map file</source>
<translation>Karte Datei öffnen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1166"/>
<location filename="../src/gui.cpp" line="1207"/>
<source>Map files (*.map *.tba *.tar)</source>
<translation>Karten-Dateien (*.map *.tba *.tar)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1183"/>
<location filename="../src/gui.cpp" line="1224"/>
<source>Error loading map:</source>
<translation>Fehler beim Laden der Karte-Datei:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1198"/>
<location filename="../src/gui.cpp" line="1239"/>
<source>No files loaded</source>
<translation>Keine Dateien geladen</translation>
</message>
<message numerus="yes">
<location filename="../src/gui.cpp" line="1202"/>
<location filename="../src/gui.cpp" line="1243"/>
<source>%n files</source>
<translation>
<numerusform>%n Datei</numerusform>
@ -527,153 +526,158 @@
</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="108"/>
<location filename="../src/gui.cpp" line="109"/>
<source>GPX files (*.gpx)</source>
<translation>GPX-Dateien (*.gpx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="110"/>
<location filename="../src/gui.cpp" line="111"/>
<source>TCX files (*.tcx)</source>
<translation>TCX-Dateien (*.tcx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="109"/>
<location filename="../src/gui.cpp" line="110"/>
<source>KML files (*.kml)</source>
<translation>KML-Dateien (*.kml)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="107"/>
<location filename="../src/gui.cpp" line="108"/>
<source>CSV files (*.csv)</source>
<translation>CSV-Dateien (*.csv)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="110"/>
<location filename="../src/gui.cpp" line="111"/>
<source>All files (*)</source>
<translation>Alle Dateien (*)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="960"/>
<location filename="../src/gui.cpp" line="963"/>
<location filename="../src/gui.cpp" line="1001"/>
<location filename="../src/gui.cpp" line="1004"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="952"/>
<location filename="../src/gui.cpp" line="993"/>
<source>Routes</source>
<translation>Routen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="673"/>
<location filename="../src/gui.cpp" line="675"/>
<source>Next file</source>
<translation>Nächste Datei</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="650"/>
<location filename="../src/gui.cpp" line="652"/>
<source>Version </source>
<translation>Version </translation>
</message>
<message>
<location filename="../src/gui.cpp" line="315"/>
<location filename="../src/gui.cpp" line="317"/>
<source>Print...</source>
<translation>Drucken...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="320"/>
<location filename="../src/gui.cpp" line="322"/>
<source>Export to PDF...</source>
<translation>Als PDF exportieren...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="954"/>
<location filename="../src/gui.cpp" line="995"/>
<source>Waypoints</source>
<translation>Wegpunkte</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="674"/>
<location filename="../src/gui.cpp" line="676"/>
<source>Previous file</source>
<translation>Vorherige Datei</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="106"/>
<location filename="../src/gui.cpp" line="107"/>
<source>Supported files (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx)</source>
<translation>Unterstütze Dateien (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="407"/>
<location filename="../src/gui.cpp" line="409"/>
<source>Route waypoints</source>
<translation>Routen Wegpunkte</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="676"/>
<location filename="../src/gui.cpp" line="678"/>
<source>First file</source>
<translation>Erste Datei</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="678"/>
<location filename="../src/gui.cpp" line="680"/>
<source>Last file</source>
<translation>Letzte Datei</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="705"/>
<location filename="../src/gui.cpp" line="707"/>
<source>The file format is one map entry per line, consisting of the map name and tiles URL delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source>
<translation>Das Dateiformat ist eine Karte pro Linie. Jede Linie besteht aus dem Kartenname und die durch ein TAB Zeichen getrennte Tiles URL. X und Y Koordinate einer Tile werden in der URL durch $x und $y ersetzt und das Zoomlevel durch $z. Ein Beispiel einer Kartendatei könnte so aussehen:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="721"/>
<location filename="../src/gui.cpp" line="718"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Die erwartete Struktur ist eine Karte/ein Atlas pro Unterverzeichnis. Unterstützte Kartenformate sind OziExplorer Karten und TrekBuddy Karten/Atlanten (mit oder ohne tar Kompression).</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="723"/>
<source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source>
<translation>Damit GPXSee zu Programmstart automatisch eine POI-Datei lädt, fügen Sie diese zu folgendem Verzeichnis hinzu:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="810"/>
<location filename="../src/gui.cpp" line="812"/>
<source>Error loading data file:</source>
<translation>Fehler beim Laden der Datei:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="813"/>
<location filename="../src/gui.cpp" line="838"/>
<location filename="../src/gui.cpp" line="815"/>
<location filename="../src/gui.cpp" line="840"/>
<source>Line: %1</source>
<translation>Linie: %1</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="835"/>
<location filename="../src/gui.cpp" line="837"/>
<source>Error loading POI file:</source>
<translation>Fehler beim Laden der POI-Datei:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="946"/>
<location filename="../src/gui.cpp" line="987"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="950"/>
<location filename="../src/gui.cpp" line="991"/>
<source>Tracks</source>
<translation>Strecken</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="305"/>
<location filename="../src/gui.cpp" line="649"/>
<location filename="../src/gui.cpp" line="307"/>
<location filename="../src/gui.cpp" line="651"/>
<source>About GPXSee</source>
<translation>Über GPXSee</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="588"/>
<location filename="../src/gui.cpp" line="590"/>
<source>Navigation</source>
<translation>Navigation</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="720"/>
<location filename="../src/gui.cpp" line="722"/>
<source>POIs</source>
<translation>POIs</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="422"/>
<location filename="../src/gui.cpp" line="970"/>
<location filename="../src/gui.cpp" line="424"/>
<location filename="../src/gui.cpp" line="1011"/>
<source>Distance</source>
<translation>Distanz</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="429"/>
<location filename="../src/gui.cpp" line="552"/>
<location filename="../src/gui.cpp" line="972"/>
<location filename="../src/gui.cpp" line="431"/>
<location filename="../src/gui.cpp" line="554"/>
<location filename="../src/gui.cpp" line="1013"/>
<source>Time</source>
<translation>Zeit</translation>
</message>
@ -754,156 +758,256 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/optionsdialog.cpp" line="34"/>
<location filename="../src/optionsdialog.cpp" line="36"/>
<source>Base color:</source>
<translation>Grundfarbe:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="35"/>
<location filename="../src/optionsdialog.cpp" line="37"/>
<source>Palette shift:</source>
<translation>Palettenverschiebung:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="47"/>
<location filename="../src/optionsdialog.cpp" line="49"/>
<source>Track width:</source>
<translation>Streckenbreite:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="48"/>
<location filename="../src/optionsdialog.cpp" line="50"/>
<source>Track style:</source>
<translation>Streckenstil:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="50"/>
<location filename="../src/optionsdialog.cpp" line="52"/>
<source>Tracks</source>
<translation>Strecken</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="60"/>
<location filename="../src/optionsdialog.cpp" line="62"/>
<source>Route width:</source>
<translation>Routenbreite:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="61"/>
<location filename="../src/optionsdialog.cpp" line="63"/>
<source>Route style:</source>
<translation>Routenstil:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="63"/>
<location filename="../src/optionsdialog.cpp" line="65"/>
<source>Routes</source>
<translation>Routen</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="67"/>
<location filename="../src/optionsdialog.cpp" line="99"/>
<location filename="../src/optionsdialog.cpp" line="69"/>
<location filename="../src/optionsdialog.cpp" line="102"/>
<source>Use anti-aliasing</source>
<translation>Anti-Aliasing verwenden</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="97"/>
<location filename="../src/optionsdialog.cpp" line="100"/>
<source>Line width:</source>
<translation>Linienbreite:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="113"/>
<location filename="../src/optionsdialog.cpp" line="116"/>
<source>Colors</source>
<translation>Farben</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="114"/>
<location filename="../src/optionsdialog.cpp" line="117"/>
<source>Paths</source>
<translation>Pfade</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="115"/>
<location filename="../src/optionsdialog.cpp" line="183"/>
<location filename="../src/optionsdialog.cpp" line="118"/>
<location filename="../src/optionsdialog.cpp" line="278"/>
<source>Graphs</source>
<translation>Graphen</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="127"/>
<location filename="../src/optionsdialog.cpp" line="125"/>
<source>Moving average window size</source>
<translation>Fensterbreite des gleitenden Mittelwerts</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="144"/>
<source>Elevation:</source>
<translation>Höhe:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="145"/>
<source>Speed:</source>
<translation>Geschwindigkeit:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="146"/>
<source>Heart rate:</source>
<translation>Herzfrequenz:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="147"/>
<source>Cadence:</source>
<translation>Frequenz:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="148"/>
<source>Power:</source>
<translation>Leistung:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="150"/>
<source>Smoothing</source>
<translation>Glätten</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="154"/>
<source>Eliminate GPS outliers</source>
<translation>GPS Ausreißer entfernen</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="160"/>
<source>Outlier elimination</source>
<translation>Ausreißer Entfernung</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="167"/>
<source>Smoothing:</source>
<translation>Glätten:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="190"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="193"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="197"/>
<source>s</source>
<translation>sek</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="201"/>
<source>Minimal speed:</source>
<translation>Minimale Geschwindigkeit:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="202"/>
<source>Minimal duration:</source>
<translation>Minimale Dauer:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="209"/>
<source>Filtering</source>
<translation>Datenfilterung</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="210"/>
<source>Pause detection</source>
<translation>Pausenerkennung</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="222"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="130"/>
<location filename="../src/optionsdialog.cpp" line="225"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="134"/>
<location filename="../src/optionsdialog.cpp" line="229"/>
<source>POI radius:</source>
<translation>POI-Radius:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="140"/>
<location filename="../src/optionsdialog.cpp" line="224"/>
<location filename="../src/optionsdialog.cpp" line="235"/>
<location filename="../src/optionsdialog.cpp" line="334"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="147"/>
<location filename="../src/optionsdialog.cpp" line="242"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="149"/>
<location filename="../src/optionsdialog.cpp" line="244"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="151"/>
<location filename="../src/optionsdialog.cpp" line="246"/>
<source>Distance</source>
<translation>Distanz</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="153"/>
<location filename="../src/optionsdialog.cpp" line="248"/>
<source>Time</source>
<translation>Zeit</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="155"/>
<location filename="../src/optionsdialog.cpp" line="250"/>
<source>Moving time</source>
<translation>Bewegungszeit</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="157"/>
<location filename="../src/optionsdialog.cpp" line="252"/>
<source>Item count (&gt;1)</source>
<translation>Elementanzahl (&gt;1)</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="172"/>
<location filename="../src/optionsdialog.cpp" line="267"/>
<source>Separate graph page</source>
<translation>Separate Seite für Graphen</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="182"/>
<location filename="../src/optionsdialog.cpp" line="277"/>
<source>Header</source>
<translation>Kopfzeile</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="190"/>
<location filename="../src/optionsdialog.cpp" line="285"/>
<source>Use OpenGL</source>
<translation>OpenGL verwenden</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="206"/>
<location filename="../src/optionsdialog.cpp" line="227"/>
<location filename="../src/optionsdialog.cpp" line="297"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="301"/>
<source>Image cache size:</source>
<translation>Bild-Cache größe:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="314"/>
<location filename="../src/optionsdialog.cpp" line="337"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="222"/>
<location filename="../src/optionsdialog.cpp" line="331"/>
<source>Appearance</source>
<translation>Erscheinungsbild</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="225"/>
<location filename="../src/optionsdialog.cpp" line="333"/>
<source>Data</source>
<translation>Daten</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="335"/>
<source>Print &amp; Export</source>
<translation>Druck &amp; Export</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="254"/>
<location filename="../src/optionsdialog.cpp" line="364"/>
<source>Options</source>
<translation>Einstellungen</translation>
</message>
@ -953,22 +1057,22 @@
<context>
<name>ScaleItem</name>
<message>
<location filename="../src/scaleitem.cpp" line="81"/>
<location filename="../src/scaleitem.cpp" line="83"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="82"/>
<location filename="../src/scaleitem.cpp" line="84"/>
<source>ft</source>
<translation>ft</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="84"/>
<location filename="../src/scaleitem.cpp" line="86"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="85"/>
<location filename="../src/scaleitem.cpp" line="87"/>
<source>m</source>
<translation>m</translation>
</message>
@ -1072,27 +1176,27 @@
<context>
<name>WaypointItem</name>
<message>
<location filename="../src/waypointitem.cpp" line="18"/>
<location filename="../src/waypointitem.cpp" line="17"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="19"/>
<location filename="../src/waypointitem.cpp" line="18"/>
<source>Coordinates</source>
<translation>Koordinaten</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="22"/>
<location filename="../src/waypointitem.cpp" line="21"/>
<source>Elevation</source>
<translation>Höhe</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="25"/>
<location filename="../src/waypointitem.cpp" line="24"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="28"/>
<location filename="../src/waypointitem.cpp" line="27"/>
<source>Description</source>
<translation>Beschreibung</translation>
</message>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="sv">
<TS version="2.0" language="sv">
<context>
<name>CadenceGraph</name>
<message>
@ -190,336 +190,335 @@
<context>
<name>GUI</name>
<message>
<location filename="../src/gui.cpp" line="653"/>
<location filename="../src/gui.cpp" line="655"/>
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at </source>
<translation>GPXSee distribueras under vilkoren för GNU General Public License version 3. För mer info om GPXSee, besök hemsidan </translation>
</message>
<message>
<location filename="../src/gui.cpp" line="731"/>
<location filename="../src/gui.cpp" line="733"/>
<source>Open file</source>
<translation>Öppna fil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="821"/>
<location filename="../src/gui.cpp" line="823"/>
<source>Open POI file</source>
<translation>Öppna POI-fil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="310"/>
<source>Open</source>
<translation>Öppna</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="294"/>
<location filename="../src/gui.cpp" line="296"/>
<source>Quit</source>
<translation>Avsluta</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="302"/>
<location filename="../src/gui.cpp" line="669"/>
<location filename="../src/gui.cpp" line="670"/>
<location filename="../src/gui.cpp" line="304"/>
<location filename="../src/gui.cpp" line="671"/>
<location filename="../src/gui.cpp" line="672"/>
<source>Keyboard controls</source>
<translation>Snabbtangenter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="326"/>
<location filename="../src/gui.cpp" line="328"/>
<source>Close</source>
<translation>Stäng</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="332"/>
<location filename="../src/gui.cpp" line="334"/>
<source>Reload</source>
<translation>Uppdatera</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="583"/>
<location filename="../src/gui.cpp" line="585"/>
<source>Show</source>
<translation>Visa</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="500"/>
<location filename="../src/gui.cpp" line="577"/>
<location filename="../src/gui.cpp" line="502"/>
<location filename="../src/gui.cpp" line="579"/>
<source>File</source>
<translation>Arkiv</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="107"/>
<location filename="../src/gui.cpp" line="108"/>
<source>FIT files (*.fit)</source>
<translation>FIT-filer (*.fit)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="108"/>
<location filename="../src/gui.cpp" line="109"/>
<source>IGC files (*.igc)</source>
<translation>IGC-filer (*.igc)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="109"/>
<location filename="../src/gui.cpp" line="110"/>
<source>NMEA files (*.nmea)</source>
<translation>NMEA-filer (*.nmea)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="300"/>
<location filename="../src/gui.cpp" line="698"/>
<location filename="../src/gui.cpp" line="699"/>
<location filename="../src/gui.cpp" line="302"/>
<location filename="../src/gui.cpp" line="700"/>
<location filename="../src/gui.cpp" line="701"/>
<source>Data sources</source>
<translation>Datakällor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="340"/>
<source>Load POI file</source>
<translation>Läs in POI-fil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="343"/>
<location filename="../src/gui.cpp" line="345"/>
<source>Close POI files</source>
<translation>Stäng POI-filer</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="345"/>
<location filename="../src/gui.cpp" line="347"/>
<source>Overlap POIs</source>
<translation>Överlappa POI:er</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="349"/>
<location filename="../src/gui.cpp" line="351"/>
<source>Show POI labels</source>
<translation>Visa POI-namn</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="354"/>
<location filename="../src/gui.cpp" line="356"/>
<source>Show POIs</source>
<translation>Visa POI:er</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="363"/>
<location filename="../src/gui.cpp" line="365"/>
<source>Show map</source>
<translation>Visa karta</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="370"/>
<location filename="../src/gui.cpp" line="1165"/>
<source>Load map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui.cpp" line="373"/>
<location filename="../src/gui.cpp" line="375"/>
<source>Clear tile cache</source>
<translation>Rensa kart-cache</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="377"/>
<location filename="../src/gui.cpp" line="381"/>
<location filename="../src/gui.cpp" line="681"/>
<location filename="../src/gui.cpp" line="312"/>
<source>Open...</source>
<translation>Öppna...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="342"/>
<source>Load POI file...</source>
<translation>Läs in POI-fil...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="373"/>
<source>Load map...</source>
<translation>Läs in karta...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="379"/>
<location filename="../src/gui.cpp" line="383"/>
<location filename="../src/gui.cpp" line="683"/>
<source>Next map</source>
<translation>Nästa karta</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="391"/>
<location filename="../src/gui.cpp" line="393"/>
<source>Show tracks</source>
<translation>Visa spår</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="395"/>
<location filename="../src/gui.cpp" line="397"/>
<source>Show routes</source>
<translation>Visa rutter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="399"/>
<location filename="../src/gui.cpp" line="401"/>
<source>Show waypoints</source>
<translation>Visa vägpunkter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="403"/>
<location filename="../src/gui.cpp" line="405"/>
<source>Waypoint labels</source>
<translation>Vägpunktsnamn</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="414"/>
<location filename="../src/gui.cpp" line="416"/>
<source>Show graphs</source>
<translation>Visa diagram</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="436"/>
<location filename="../src/gui.cpp" line="438"/>
<source>Show grid</source>
<translation>Visa stödlinjer</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="442"/>
<location filename="../src/gui.cpp" line="444"/>
<source>Show toolbars</source>
<translation>Visa verktygsfält</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="448"/>
<location filename="../src/gui.cpp" line="450"/>
<source>Total time</source>
<translation>Total tid</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="453"/>
<location filename="../src/gui.cpp" line="974"/>
<location filename="../src/gui.cpp" line="455"/>
<location filename="../src/gui.cpp" line="1015"/>
<source>Moving time</source>
<translation>Förflyttningstid</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="460"/>
<location filename="../src/gui.cpp" line="462"/>
<source>Metric</source>
<translation>Meter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="465"/>
<location filename="../src/gui.cpp" line="467"/>
<source>Imperial</source>
<translation>Imperial</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="471"/>
<location filename="../src/gui.cpp" line="473"/>
<source>Fullscreen mode</source>
<translation>Helskärmsläge</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="477"/>
<location filename="../src/gui.cpp" line="479"/>
<source>Options...</source>
<translation>Alternativ...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="482"/>
<location filename="../src/gui.cpp" line="484"/>
<source>Next</source>
<translation>Nästa</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="485"/>
<location filename="../src/gui.cpp" line="487"/>
<source>Previous</source>
<translation>Föregående</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="489"/>
<location filename="../src/gui.cpp" line="491"/>
<source>Last</source>
<translation>Sista</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="492"/>
<location filename="../src/gui.cpp" line="494"/>
<source>First</source>
<translation>Första</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="514"/>
<location filename="../src/gui.cpp" line="516"/>
<source>Map</source>
<translation>Karta</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="522"/>
<location filename="../src/gui.cpp" line="524"/>
<source>Graph</source>
<translation>Diagram</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="530"/>
<location filename="../src/gui.cpp" line="532"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="531"/>
<location filename="../src/gui.cpp" line="533"/>
<source>POI files</source>
<translation>POI-filer</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="542"/>
<location filename="../src/gui.cpp" line="544"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="543"/>
<location filename="../src/gui.cpp" line="545"/>
<source>Display</source>
<translation>Visa</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="551"/>
<location filename="../src/gui.cpp" line="553"/>
<source>Settings</source>
<translation>Inställningar</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="555"/>
<location filename="../src/gui.cpp" line="557"/>
<source>Units</source>
<translation>Enhet</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="564"/>
<location filename="../src/gui.cpp" line="566"/>
<source>Help</source>
<translation>Hjälp</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="679"/>
<location filename="../src/gui.cpp" line="681"/>
<source>Append file</source>
<translation>Lägg till fil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="680"/>
<location filename="../src/gui.cpp" line="682"/>
<source>Next/Previous</source>
<translation>Nästa/Föregående</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="683"/>
<location filename="../src/gui.cpp" line="685"/>
<source>Previous map</source>
<translation>Föregående karta</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="684"/>
<location filename="../src/gui.cpp" line="686"/>
<source>Zoom in</source>
<translation>Zooma in</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="686"/>
<location filename="../src/gui.cpp" line="688"/>
<source>Zoom out</source>
<translation>Zooma ut</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="688"/>
<location filename="../src/gui.cpp" line="690"/>
<source>Digital zoom</source>
<translation>Digital zoom</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="689"/>
<location filename="../src/gui.cpp" line="691"/>
<source>Zoom</source>
<translation>Zoom</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="701"/>
<location filename="../src/gui.cpp" line="703"/>
<source>Online maps</source>
<translation>Online-kartor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="702"/>
<location filename="../src/gui.cpp" line="704"/>
<source>Online map URLs are read on program startup from the following file:</source>
<translation>Online-kartors URL:er, läses från följande fil vid programstart:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="712"/>
<location filename="../src/gui.cpp" line="714"/>
<source>Offline maps</source>
<translation>Offline-kartor</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="713"/>
<location filename="../src/gui.cpp" line="715"/>
<source>Offline maps are loaded on program startup from the following directory:</source>
<translation>Offline-kartor läses in från följande mapp vid programstart:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="716"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer image-based maps and tiled TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Den förväntade strukturen är en karta/atlas i en separat undermapp. Kartformat som stöds är OziExplorer bildbaserade kartor och rutindelade TrekBuddy-kartor/-kartsamlingar (tarerade och icke tarerade).</translation>
<location filename="../src/gui.cpp" line="1206"/>
<source>Open map file</source>
<translation>Öppna kartfil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1166"/>
<location filename="../src/gui.cpp" line="1207"/>
<source>Map files (*.map *.tba *.tar)</source>
<translation type="unfinished"></translation>
<translation>Kartfiler (*.map *.tba *.tar)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1183"/>
<location filename="../src/gui.cpp" line="1224"/>
<source>Error loading map:</source>
<translation type="unfinished"></translation>
<translation>Fel vid inläsning av karta:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="1198"/>
<location filename="../src/gui.cpp" line="1239"/>
<source>No files loaded</source>
<translation>Inga filer inlästa</translation>
</message>
<message numerus="yes">
<location filename="../src/gui.cpp" line="1202"/>
<location filename="../src/gui.cpp" line="1243"/>
<source>%n files</source>
<translation>
<numerusform>%n filer</numerusform>
@ -527,153 +526,158 @@
</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="108"/>
<location filename="../src/gui.cpp" line="109"/>
<source>GPX files (*.gpx)</source>
<translation>GPX-filer (*.gpx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="110"/>
<location filename="../src/gui.cpp" line="111"/>
<source>TCX files (*.tcx)</source>
<translation>TCX-filer (*.tcx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="109"/>
<location filename="../src/gui.cpp" line="110"/>
<source>KML files (*.kml)</source>
<translation>KML-filer (*.kml)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="107"/>
<location filename="../src/gui.cpp" line="108"/>
<source>CSV files (*.csv)</source>
<translation>CSV-filer (*.csv)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="110"/>
<location filename="../src/gui.cpp" line="111"/>
<source>All files (*)</source>
<translation>Alla filer (*)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="960"/>
<location filename="../src/gui.cpp" line="963"/>
<location filename="../src/gui.cpp" line="1001"/>
<location filename="../src/gui.cpp" line="1004"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="952"/>
<location filename="../src/gui.cpp" line="993"/>
<source>Routes</source>
<translation>Rutter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="673"/>
<location filename="../src/gui.cpp" line="675"/>
<source>Next file</source>
<translation>Nästa fil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="650"/>
<location filename="../src/gui.cpp" line="652"/>
<source>Version </source>
<translation>Version </translation>
</message>
<message>
<location filename="../src/gui.cpp" line="315"/>
<location filename="../src/gui.cpp" line="317"/>
<source>Print...</source>
<translation>Skriv ut...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="320"/>
<location filename="../src/gui.cpp" line="322"/>
<source>Export to PDF...</source>
<translation>Exportera till PDF...</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="954"/>
<location filename="../src/gui.cpp" line="995"/>
<source>Waypoints</source>
<translation>Vägpunkter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="674"/>
<location filename="../src/gui.cpp" line="676"/>
<source>Previous file</source>
<translation>Föregående fil</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="106"/>
<location filename="../src/gui.cpp" line="107"/>
<source>Supported files (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx)</source>
<translation>Filer som stöds (*.csv *.fit *.gpx *.igc *.kml *.nmea *.tcx)</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="407"/>
<location filename="../src/gui.cpp" line="409"/>
<source>Route waypoints</source>
<translation>Ruttvägpunkter</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="676"/>
<location filename="../src/gui.cpp" line="678"/>
<source>First file</source>
<translation>Första filen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="678"/>
<location filename="../src/gui.cpp" line="680"/>
<source>Last file</source>
<translation>Sista filen</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="705"/>
<location filename="../src/gui.cpp" line="707"/>
<source>The file format is one map entry per line, consisting of the map name and tiles URL delimited by a TAB character. The tile X and Y coordinates are replaced with $x and $y in the URL and the zoom level is replaced with $z. An example map file could look like:</source>
<translation>Filformatet är en kartpost per rad, bestående av kartnamn och kartrutans URL, avgränsade med ett TAB-tecken. Kartrutans X- och Y-koordinater ersätts med $x och $y i URL:en och zoomnivån ersätts med $z. Exempel en kartfil kan se ut här:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="721"/>
<location filename="../src/gui.cpp" line="718"/>
<source>The expected structure is one map/atlas in a separate subdirectory. Supported map formats are OziExplorer maps and TrekBuddy maps/atlases (tared and non-tared).</source>
<translation>Den förväntade strukturen är en karta/atlas i en separat undermapp. Kartformat som stöds är OziExplorer kartor och TrekBuddy-kartor/-kartsamlingar (tarerade och icke tarerade).</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="723"/>
<source>To make GPXSee load a POI file automatically on startup, add the file to the following directory:</source>
<translation>För att GPXSee skall läsa in en POI-fil automatiskt vid programstart, läggs filen i följande mapp:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="810"/>
<location filename="../src/gui.cpp" line="812"/>
<source>Error loading data file:</source>
<translation>Fel vid inläsning av datafil:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="813"/>
<location filename="../src/gui.cpp" line="838"/>
<location filename="../src/gui.cpp" line="815"/>
<location filename="../src/gui.cpp" line="840"/>
<source>Line: %1</source>
<translation>Rad: %1</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="835"/>
<location filename="../src/gui.cpp" line="837"/>
<source>Error loading POI file:</source>
<translation>Fel vid inläsning av POI-fil:</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="946"/>
<location filename="../src/gui.cpp" line="987"/>
<source>Name</source>
<translation>Namn</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="950"/>
<location filename="../src/gui.cpp" line="991"/>
<source>Tracks</source>
<translation>Spår</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="305"/>
<location filename="../src/gui.cpp" line="649"/>
<location filename="../src/gui.cpp" line="307"/>
<location filename="../src/gui.cpp" line="651"/>
<source>About GPXSee</source>
<translation>Om GPXSee</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="588"/>
<location filename="../src/gui.cpp" line="590"/>
<source>Navigation</source>
<translation>Navigation</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="720"/>
<location filename="../src/gui.cpp" line="722"/>
<source>POIs</source>
<translation>POI:er</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="422"/>
<location filename="../src/gui.cpp" line="970"/>
<location filename="../src/gui.cpp" line="424"/>
<location filename="../src/gui.cpp" line="1011"/>
<source>Distance</source>
<translation>Avstånd</translation>
</message>
<message>
<location filename="../src/gui.cpp" line="429"/>
<location filename="../src/gui.cpp" line="552"/>
<location filename="../src/gui.cpp" line="972"/>
<location filename="../src/gui.cpp" line="431"/>
<location filename="../src/gui.cpp" line="554"/>
<location filename="../src/gui.cpp" line="1013"/>
<source>Time</source>
<translation>Tid</translation>
</message>
@ -754,156 +758,256 @@
<context>
<name>OptionsDialog</name>
<message>
<location filename="../src/optionsdialog.cpp" line="34"/>
<location filename="../src/optionsdialog.cpp" line="36"/>
<source>Base color:</source>
<translation>Basfärg:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="35"/>
<location filename="../src/optionsdialog.cpp" line="37"/>
<source>Palette shift:</source>
<translation>Palettskiftning:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="47"/>
<location filename="../src/optionsdialog.cpp" line="49"/>
<source>Track width:</source>
<translation>Spårtjocklek:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="48"/>
<location filename="../src/optionsdialog.cpp" line="50"/>
<source>Track style:</source>
<translation>Spårstil:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="50"/>
<location filename="../src/optionsdialog.cpp" line="52"/>
<source>Tracks</source>
<translation>Spår</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="60"/>
<location filename="../src/optionsdialog.cpp" line="62"/>
<source>Route width:</source>
<translation>Ruttjocklek:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="61"/>
<location filename="../src/optionsdialog.cpp" line="63"/>
<source>Route style:</source>
<translation>Ruttstil:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="63"/>
<location filename="../src/optionsdialog.cpp" line="65"/>
<source>Routes</source>
<translation>Rutter</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="67"/>
<location filename="../src/optionsdialog.cpp" line="99"/>
<location filename="../src/optionsdialog.cpp" line="69"/>
<location filename="../src/optionsdialog.cpp" line="102"/>
<source>Use anti-aliasing</source>
<translation>Använd kantutjämning</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="97"/>
<location filename="../src/optionsdialog.cpp" line="100"/>
<source>Line width:</source>
<translation>Linjetjocklek:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="113"/>
<location filename="../src/optionsdialog.cpp" line="116"/>
<source>Colors</source>
<translation>Färger</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="114"/>
<location filename="../src/optionsdialog.cpp" line="117"/>
<source>Paths</source>
<translation>Sökvägar</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="115"/>
<location filename="../src/optionsdialog.cpp" line="183"/>
<location filename="../src/optionsdialog.cpp" line="118"/>
<location filename="../src/optionsdialog.cpp" line="278"/>
<source>Graphs</source>
<translation>Diagram</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="127"/>
<location filename="../src/optionsdialog.cpp" line="125"/>
<source>Moving average window size</source>
<translation>Flyttar vanlig fönsterstorlek</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="144"/>
<source>Elevation:</source>
<translation>Höjd:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="145"/>
<source>Speed:</source>
<translation>Hastighet:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="146"/>
<source>Heart rate:</source>
<translation>Hjärtfrekvens:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="147"/>
<source>Cadence:</source>
<translation>Stegfrekvens:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="148"/>
<source>Power:</source>
<translation>Kraft:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="150"/>
<source>Smoothing</source>
<translation>Utjämning</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="154"/>
<source>Eliminate GPS outliers</source>
<translation>Eliminera GPS-extremvärden</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="160"/>
<source>Outlier elimination</source>
<translation>Extremvärdeseliminering</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="167"/>
<source>Smoothing:</source>
<translation>Utjämning:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="190"/>
<source>mi/h</source>
<translation>mi/h</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="193"/>
<source>km/h</source>
<translation>km/h</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="197"/>
<source>s</source>
<translation>sek</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="201"/>
<source>Minimal speed:</source>
<translation>Minsta hastighet:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="202"/>
<source>Minimal duration:</source>
<translation>Kortast varaktighet:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="209"/>
<source>Filtering</source>
<translation>Filtrerar</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="210"/>
<source>Pause detection</source>
<translation>Pausa identifiering</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="222"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="130"/>
<location filename="../src/optionsdialog.cpp" line="225"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="134"/>
<location filename="../src/optionsdialog.cpp" line="229"/>
<source>POI radius:</source>
<translation>POI-radie:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="140"/>
<location filename="../src/optionsdialog.cpp" line="224"/>
<location filename="../src/optionsdialog.cpp" line="235"/>
<location filename="../src/optionsdialog.cpp" line="334"/>
<source>POI</source>
<translation>POI</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="147"/>
<location filename="../src/optionsdialog.cpp" line="242"/>
<source>Name</source>
<translation>Namn</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="149"/>
<location filename="../src/optionsdialog.cpp" line="244"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="151"/>
<location filename="../src/optionsdialog.cpp" line="246"/>
<source>Distance</source>
<translation>Avstånd</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="153"/>
<location filename="../src/optionsdialog.cpp" line="248"/>
<source>Time</source>
<translation>Tid</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="155"/>
<location filename="../src/optionsdialog.cpp" line="250"/>
<source>Moving time</source>
<translation>Förflyttningstid</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="157"/>
<location filename="../src/optionsdialog.cpp" line="252"/>
<source>Item count (&gt;1)</source>
<translation>Objektantal (&gt;1)</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="172"/>
<location filename="../src/optionsdialog.cpp" line="267"/>
<source>Separate graph page</source>
<translation>Separat diagramsida</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="182"/>
<location filename="../src/optionsdialog.cpp" line="277"/>
<source>Header</source>
<translation></translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="190"/>
<location filename="../src/optionsdialog.cpp" line="285"/>
<source>Use OpenGL</source>
<translation>Använd OpenGL</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="206"/>
<location filename="../src/optionsdialog.cpp" line="227"/>
<location filename="../src/optionsdialog.cpp" line="297"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="301"/>
<source>Image cache size:</source>
<translation>Cashe-storlek för bilder:</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="314"/>
<location filename="../src/optionsdialog.cpp" line="337"/>
<source>System</source>
<translation>System</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="222"/>
<location filename="../src/optionsdialog.cpp" line="331"/>
<source>Appearance</source>
<translation>Utseende</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="225"/>
<location filename="../src/optionsdialog.cpp" line="333"/>
<source>Data</source>
<translation>Data</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="335"/>
<source>Print &amp; Export</source>
<translation>Utskrift &amp; Export</translation>
</message>
<message>
<location filename="../src/optionsdialog.cpp" line="254"/>
<location filename="../src/optionsdialog.cpp" line="364"/>
<source>Options</source>
<translation>Alternativ</translation>
</message>
@ -953,22 +1057,22 @@
<context>
<name>ScaleItem</name>
<message>
<location filename="../src/scaleitem.cpp" line="81"/>
<location filename="../src/scaleitem.cpp" line="83"/>
<source>mi</source>
<translation>mi</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="82"/>
<location filename="../src/scaleitem.cpp" line="84"/>
<source>ft</source>
<translation>ft</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="84"/>
<location filename="../src/scaleitem.cpp" line="86"/>
<source>km</source>
<translation>km</translation>
</message>
<message>
<location filename="../src/scaleitem.cpp" line="85"/>
<location filename="../src/scaleitem.cpp" line="87"/>
<source>m</source>
<translation>m</translation>
</message>
@ -1072,27 +1176,27 @@
<context>
<name>WaypointItem</name>
<message>
<location filename="../src/waypointitem.cpp" line="18"/>
<location filename="../src/waypointitem.cpp" line="17"/>
<source>Name</source>
<translation>Namn</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="19"/>
<location filename="../src/waypointitem.cpp" line="18"/>
<source>Coordinates</source>
<translation>Koordinater</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="22"/>
<location filename="../src/waypointitem.cpp" line="21"/>
<source>Elevation</source>
<translation>Höjd</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="25"/>
<location filename="../src/waypointitem.cpp" line="24"/>
<source>Date</source>
<translation>Datum</translation>
</message>
<message>
<location filename="../src/waypointitem.cpp" line="28"/>
<location filename="../src/waypointitem.cpp" line="27"/>
<source>Description</source>
<translation>Beskrivning</translation>
</message>

View File

@ -5,7 +5,7 @@
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "4.5"
!define VERSION "4.8"
; The file to write
OutFile "GPXSee-${VERSION}.exe"

View File

@ -5,7 +5,7 @@
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "4.5"
!define VERSION "4.8"
; The file to write
OutFile "GPXSee-${VERSION}_x64.exe"

View File

@ -1,3 +1,4 @@
Open Topo Map https://a.tile.opentopomap.org/$z/$x/$y.png
Thunderforest http://tile.thunderforest.com/outdoors/$z/$x/$y.png
Open Street Map http://tile.openstreetmap.org/$z/$x/$y.png
USGS Topo https://navigator.er.usgs.gov/tiles/tcr.cgi/$z/$x/$y.png
USGS Imagery https://navigator.er.usgs.gov/tiles/aerial_Imagery.cgi/$z/$x/$y

229
src/albersequal.cpp Normal file
View File

@ -0,0 +1,229 @@
/*
* Based on libgeotrans with the following Source Code Disclaimer:
1. The GEOTRANS source code ("the software") is provided free of charge by
the National Imagery and Mapping Agency (NIMA) of the United States
Department of Defense. Although NIMA makes no copyright claim under Title 17
U.S.C., NIMA claims copyrights in the source code under other legal regimes.
NIMA hereby grants to each user of the software a license to use and
distribute the software, and develop derivative works.
2. Warranty Disclaimer: The software was developed to meet only the internal
requirements of the U.S. National Imagery and Mapping Agency. The software
is provided "as is," and no warranty, express or implied, including but not
limited to the implied warranties of merchantability and fitness for
particular purpose or arising by statute or otherwise in law or from a
course of dealing or usage in trade, is made by NIMA as to the accuracy and
functioning of the software.
3. NIMA and its personnel are not required to provide technical support or
general assistance with respect to the software.
4. Neither NIMA nor its personnel will be liable for any claims, losses, or
damages arising from or connected with the use of the software. The user
agrees to hold harmless the United States National Imagery and Mapping
Agency. The user's sole and exclusive remedy is to stop using the software.
5. NIMA requests that products developed using the software credit the
source of the software with the following statement, "The product was
developed using GEOTRANS, a product of the National Imagery and Mapping
Agency and U.S. Army Engineering Research and Development Center."
6. For any products developed using the software, NIMA requires a disclaimer
that use of the software does not indicate endorsement or approval of the
product by the Secretary of Defense or the National Imagery and Mapping
Agency. Pursuant to the United States Code, 10 U.S.C. Sec. 2797, the name of
the National Imagery and Mapping Agency, the initials "NIMA", the seal of
the National Imagery and Mapping Agency, or any colorable imitation thereof
shall not be used to imply approval, endorsement, or authorization of a
product without prior written permission from United States Secretary of
Defense.
*/
#include "ellipsoid.h"
#include "rd.h"
#include "albersequal.h"
#ifndef M_PI_2
#define M_PI_2 1.57079632679489661923
#endif // M_PI_2
#define ONE_MINUS_SQR(x) (1.0 - (x) * (x))
#define ALBERS_Q(slat, one_minus_sqr_es_sin, es_sin) \
(_one_minus_es2 * ((slat) / (one_minus_sqr_es_sin) - \
(1 / (_two_es)) * log((1 - (es_sin)) / (1 + (es_sin)))))
#define ALBERS_M(clat, one_minus_sqr_es_sin) \
((clat) / sqrt(one_minus_sqr_es_sin))
AlbersEqual::AlbersEqual(const Ellipsoid &ellipsoid, double standardParallel1,
double standardParallel2, double latitudeOrigin, double longitudeOrigin,
double falseEasting, double falseNorthing)
{
double sin_lat, sin_lat1, sin_lat2, cos_lat1, cos_lat2;
double m1, m2, sqr_m1, sqr_m2;
double q0, q1, q2;
double es_sin, es_sin1, es_sin2;
double one_minus_sqr_es_sin1, one_minus_sqr_es_sin2;
double nq0;
double sp1, sp2;
_e = ellipsoid;
_latitudeOrigin = deg2rad(latitudeOrigin);
_longitudeOrigin = deg2rad(longitudeOrigin);
_falseEasting = falseEasting;
_falseNorthing = falseNorthing;
sp1 = deg2rad(standardParallel1);
sp2 = deg2rad(standardParallel2);
_es2 = 2 * _e.flattening() - _e.flattening() * _e.flattening();
_es = sqrt(_es2);
_one_minus_es2 = 1 - _es2;
_two_es = 2 * _es;
sin_lat = sin(_latitudeOrigin);
es_sin = _es * sin_lat;
q0 = ALBERS_Q(sin_lat, ONE_MINUS_SQR(es_sin), es_sin);
sin_lat1 = sin(sp1);
cos_lat1 = cos(sp1);
es_sin1 = _es * sin_lat1;
one_minus_sqr_es_sin1 = ONE_MINUS_SQR(es_sin1);
m1 = ALBERS_M(cos_lat1, one_minus_sqr_es_sin1);
q1 = ALBERS_Q(sin_lat1, one_minus_sqr_es_sin1, es_sin1);
sqr_m1 = m1 * m1;
if (fabs(sp1 - sp2) > 1.0e-10) {
sin_lat2 = sin(sp2);
cos_lat2 = cos(sp2);
es_sin2 = _es * sin_lat2;
one_minus_sqr_es_sin2 = ONE_MINUS_SQR(es_sin2);
m2 = ALBERS_M(cos_lat2, one_minus_sqr_es_sin2);
q2 = ALBERS_Q(sin_lat2, one_minus_sqr_es_sin2, es_sin2);
sqr_m2 = m2 * m2;
_n = (sqr_m1 - sqr_m2) / (q2 - q1);
} else
_n = sin_lat1;
_C = sqr_m1 + _n * q1;
_a_over_n = _e.radius() / _n;
nq0 = _n * q0;
_rho0 = (_C < nq0) ? 0 : _a_over_n * sqrt(_C - nq0);
}
QPointF AlbersEqual::ll2xy(const Coordinates &c) const
{
double dlam;
double sin_lat;
double es_sin;
double q;
double rho;
double theta;
double nq;
dlam = deg2rad(c.lon()) - _longitudeOrigin;
if (dlam > M_PI)
dlam -= 2.0 * M_PI;
if (dlam < -M_PI)
dlam += 2.0 * M_PI;
sin_lat = sin(deg2rad(c.lat()));
es_sin = _es * sin_lat;
q = ALBERS_Q(sin_lat, ONE_MINUS_SQR(es_sin), es_sin);
nq = _n * q;
rho = (_C < nq) ? 0 : _a_over_n * sqrt(_C - nq);
theta = _n * dlam;
return QPointF(rho * sin(theta) + _falseEasting,
_rho0 - rho * cos(theta) + _falseNorthing);
}
Coordinates AlbersEqual::xy2ll(const QPointF &p) const
{
double dy, dx;
double rho0_minus_dy;
double q, qc, q_over_2;
double rho, rho_n;
double phi, delta_phi = 1.0;
double sin_phi;
double es_sin, one_minus_sqr_es_sin;
double theta = 0.0;
int count = 30;
double tolerance = 4.85e-10;
double lat, lon;
dy = p.y() - _falseNorthing;
dx = p.x() - _falseEasting;
rho0_minus_dy = _rho0 - dy;
rho = sqrt(dx * dx + rho0_minus_dy * rho0_minus_dy);
if (_n < 0) {
rho *= -1.0;
dx *= -1.0;
rho0_minus_dy *= -1.0;
}
if (rho != 0.0)
theta = atan2(dx, rho0_minus_dy);
rho_n = rho * _n;
q = (_C - (rho_n * rho_n) / (_e.radius() * _e.radius())) / _n;
qc = 1 - ((_one_minus_es2) / (_two_es)) * log((1.0 - _es) / (1.0 + _es));
if (fabs(fabs(qc) - fabs(q)) > 1.0e-6) {
q_over_2 = q / 2.0;
if (q_over_2 > 1.0)
lat = M_PI_2;
else if (q_over_2 < -1.0)
lat = -M_PI_2;
else {
phi = asin(q_over_2);
if (_es < 1.0e-10)
lat = phi;
else {
while ((fabs(delta_phi) > tolerance) && count) {
sin_phi = sin(phi);
es_sin = _es * sin_phi;
one_minus_sqr_es_sin = ONE_MINUS_SQR(es_sin);
delta_phi = (one_minus_sqr_es_sin * one_minus_sqr_es_sin)
/ (2.0 * cos(phi)) * (q / (_one_minus_es2) - sin_phi
/ one_minus_sqr_es_sin + (log((1.0 - es_sin)
/ (1.0 + es_sin)) / (_two_es)));
phi += delta_phi;
count --;
}
lat = phi;
}
if (lat > M_PI_2)
lat = M_PI_2;
else if (lat < -M_PI_2)
lat = -M_PI_2;
}
} else {
if (q >= 0.0)
lat = M_PI_2;
else
lat = -M_PI_2;
}
lon = _longitudeOrigin + theta / _n;
if (lon > M_PI)
lon -= M_PI * 2;
if (lon < -M_PI)
lon += M_PI * 2;
if (lon > M_PI)
lon = M_PI;
else if (lon < -M_PI)
lon = -M_PI;
return Coordinates(rad2deg(lon), rad2deg(lat));
}

36
src/albersequal.h Normal file
View File

@ -0,0 +1,36 @@
#ifndef ALBERSEQUAL_H
#define ALBERSEQUAL_H
#include "projection.h"
class Ellipsoid;
class AlbersEqual : public Projection
{
public:
AlbersEqual(const Ellipsoid &ellipsoid, double standardParallel1,
double standardParallel2, double latitudeOrigin, double longitudeOrigin,
double falseEasting, double falseNorthing);
virtual QPointF ll2xy(const Coordinates &c) const;
virtual Coordinates xy2ll(const QPointF &p) const;
private:
Ellipsoid _e;
double _latitudeOrigin;
double _longitudeOrigin;
double _falseEasting;
double _falseNorthing;
double _rho0;
double _C;
double _n;
double _es;
double _es2;
double _a_over_n;
double _one_minus_es2;
double _two_es;
};
#endif // ALBERSEQUAL_H

View File

@ -3,7 +3,6 @@
#include <QLocale>
#include <QFileOpenEvent>
#include <QNetworkProxyFactory>
#include <QPixmapCache>
#include "opengl.h"
#include "gui.h"
#include "onlinemap.h"
@ -24,7 +23,6 @@ App::App(int &argc, char **argv) : QApplication(argc, argv),
#endif // Q_OS_MAC
QNetworkProxyFactory::setUseSystemConfiguration(true);
QPixmapCache::setCacheLimit(65536);
OnlineMap::setDownloader(new Downloader(this));
OPENGL_SET_SAMPLES(4);

View File

@ -118,6 +118,7 @@ Atlas::Atlas(const QString &fileName, QObject *parent) : Map(parent)
_valid = false;
_zoom = 0;
_name = fi.dir().dirName();
_ci = -1; _cz = -1;
if (!isAtlas(tar, fileName))
return;
@ -201,6 +202,11 @@ qreal Atlas::zoomFit(const QSize &size, const QRectF &br)
{
_zoom = 0;
if (br.isNull()) {
_zoom = _zooms.size() - 1;
return _zoom;
}
for (int z = 0; z < _zooms.count(); z++) {
for (int i = _zooms.at(z).first; i <= _zooms.at(z).second; i++) {
if (!_bounds.at(i).first.contains(_maps.at(i)->ll2pp(br.center())))
@ -233,22 +239,33 @@ qreal Atlas::zoomOut()
return _zoom;
}
QPointF Atlas::ll2xy(const Coordinates &c) const
QPointF Atlas::ll2xy(const Coordinates &c)
{
int idx = _zooms.at(_zoom).first;
QPointF pp;
for (int i = _zooms.at(_zoom).first; i <= _zooms.at(_zoom).second; i++) {
if (_bounds.at(i).first.contains(_maps.at(i)->ll2pp(c))) {
idx = i;
break;
if (_cz != _zoom) {
_ci = -1;
_cz = _zoom;
}
if (_ci >= 0)
pp = _maps.at(_ci)->ll2pp(c);
if (_ci < 0 || !_bounds.at(_ci).first.contains(pp)) {
_ci = _zooms.at(_zoom).first;
for (int i = _zooms.at(_zoom).first; i <= _zooms.at(_zoom).second; i++) {
pp = _maps.at(i)->ll2pp(c);
if (_bounds.at(i).first.contains(pp)) {
_ci = i;
break;
}
}
}
QPointF p = _maps.at(idx)->ll2xy(c);
return p + _bounds.at(idx).second.topLeft();
QPointF p = _maps.at(_ci)->pp2xy(pp);
return p + _bounds.at(_ci).second.topLeft();
}
Coordinates Atlas::xy2ll(const QPointF &p) const
Coordinates Atlas::xy2ll(const QPointF &p)
{
int idx = _zooms.at(_zoom).first;

View File

@ -24,8 +24,8 @@ public:
qreal zoomIn();
qreal zoomOut();
QPointF ll2xy(const Coordinates &c) const;
Coordinates xy2ll(const QPointF &p) const;
QPointF ll2xy(const Coordinates &c);
Coordinates xy2ll(const QPointF &p);
void draw(QPainter *painter, const QRectF &rect);
@ -48,6 +48,8 @@ private:
QVector<QPair<int, int> > _zooms;
QVector<QPair<QRectF, QRectF> > _bounds;
int _zoom;
int _ci, _cz;
};
#endif // ATLAS_H

View File

@ -64,13 +64,13 @@ void EmptyMap::draw(QPainter *painter, const QRectF &rect)
painter->fillRect(rect, Qt::white);
}
QPointF EmptyMap::ll2xy(const Coordinates &c) const
QPointF EmptyMap::ll2xy(const Coordinates &c)
{
QPointF m = Mercator().ll2xy(c);
return QPointF(m.x() / _scale, m.y() / -_scale);
}
Coordinates EmptyMap::xy2ll(const QPointF &p) const
Coordinates EmptyMap::xy2ll(const QPointF &p)
{
QPointF m(p.x() * _scale, -p.y() * _scale);
return Mercator().xy2ll(m);

View File

@ -20,8 +20,8 @@ public:
qreal zoomIn();
qreal zoomOut();
QPointF ll2xy(const Coordinates &c) const;
Coordinates xy2ll(const QPointF &p) const;
QPointF ll2xy(const Coordinates &c);
Coordinates xy2ll(const QPointF &p);
void draw(QPainter *painter, const QRectF &rect);

View File

@ -31,22 +31,6 @@ private:
Q_DECLARE_TYPEINFO(GraphPoint, Q_PRIMITIVE_TYPE);
QDebug operator<<(QDebug dbg, const GraphPoint &point);
class Graph : public QVector<GraphPoint>
{
public:
Graph() : QVector<GraphPoint>() {_time = true;}
void append(const GraphPoint &p)
{
if (std::isnan(p.t()))
_time = false;
QVector<GraphPoint>::append(p);
}
bool hasTime() const {return _time;}
private:
bool _time;
};
typedef QVector<GraphPoint> Graph;
#endif // GRAPH_H

View File

@ -14,6 +14,14 @@ GraphItem::GraphItem(const Graph &graph, QGraphicsItem *parent)
_graph = graph;
_sx = 1.0; _sy = 1.0;
_time = true;
for (int i = 0; i < _graph.size(); i++) {
if (std::isnan(_graph.at(i).t())) {
_time = false;
break;
}
}
setZValue(1.0);
updatePath();
@ -124,7 +132,7 @@ qreal GraphItem::distanceAtTime(qreal time)
void GraphItem::emitSliderPositionChanged(qreal pos)
{
if (_type == Time) {
if (_graph.hasTime()) {
if (_time) {
if (pos >= _graph.first().t() && pos <= _graph.last().t())
emit sliderPositionChanged(distanceAtTime(pos));
else
@ -163,7 +171,7 @@ void GraphItem::updatePath()
{
_path = QPainterPath();
if (_type == Time && !_graph.hasTime())
if (_type == Time && !_time)
return;
_path.moveTo(_graph.first().x(_type) * _sx, -_graph.first().y() * _sy);
@ -173,7 +181,7 @@ void GraphItem::updatePath()
void GraphItem::updateBounds()
{
if (_type == Time && !_graph.hasTime()) {
if (_type == Time && !_time) {
_bounds = QRectF();
return;
}

View File

@ -50,6 +50,8 @@ private:
QPainterPath _path;
QRectF _bounds;
qreal _sx, _sy;
bool _time;
};
#endif // GRAPHITEM_H

View File

@ -21,6 +21,7 @@
#include <QLocale>
#include <QMimeData>
#include <QUrl>
#include <QPixmapCache>
#include "config.h"
#include "icons.h"
#include "keys.h"
@ -261,7 +262,8 @@ void GUI::createPOIFilesActions()
for (int i = 0; i < _poi->files().count(); i++)
createPOIFileAction(i);
connect(_poiFilesSignalMapper, SIGNAL(mapped(int)), this, SLOT(poiFileChecked(int)));
connect(_poiFilesSignalMapper, SIGNAL(mapped(int)), this,
SLOT(poiFileChecked(int)));
}
QAction *GUI::createPOIFileAction(int index)
@ -307,7 +309,7 @@ void GUI::createActions()
// File actions
_openFileAction = new QAction(QIcon(QPixmap(OPEN_FILE_ICON)),
tr("Open"), this);
tr("Open..."), this);
_openFileAction->setShortcut(OPEN_SHORTCUT);
connect(_openFileAction, SIGNAL(triggered()), this, SLOT(openFile()));
addAction(_openFileAction);
@ -337,7 +339,7 @@ void GUI::createActions()
// POI actions
_openPOIAction = new QAction(QIcon(QPixmap(OPEN_FILE_ICON)),
tr("Load POI file"), this);
tr("Load POI file..."), this);
connect(_openPOIAction, SIGNAL(triggered()), this, SLOT(openPOIFile()));
_closePOIAction = new QAction(QIcon(QPixmap(CLOSE_FILE_ICON)),
tr("Close POI files"), this);
@ -367,8 +369,8 @@ void GUI::createActions()
connect(_showMapAction, SIGNAL(triggered(bool)), _pathView,
SLOT(showMap(bool)));
addAction(_showMapAction);
_loadMapAction = new QAction(QIcon(QPixmap(OPEN_FILE_ICON)), tr("Load map"),
this);
_loadMapAction = new QAction(QIcon(QPixmap(OPEN_FILE_ICON)),
tr("Load map..."), this);
connect(_loadMapAction, SIGNAL(triggered()), this, SLOT(loadMap()));
_clearMapCacheAction = new QAction(tr("Clear tile cache"), this);
connect(_clearMapCacheAction, SIGNAL(triggered()), this,
@ -714,8 +716,8 @@ void GUI::dataSources()
"directory:")
+ "</p><p><code>" + USER_MAP_DIR + "</code></p><p>"
+ tr("The expected structure is one map/atlas in a separate subdirectory."
" Supported map formats are OziExplorer image-based maps and tiled"
" TrekBuddy maps/atlases (tared and non-tared).") + "</p>"
" Supported map formats are OziExplorer maps and TrekBuddy maps/atlases"
" (tared and non-tared).") + "</p>"
+ "<h4>" + tr("POIs") + "</h4><p>"
+ tr("To make GPXSee load a POI file automatically on startup, add "
@ -873,6 +875,7 @@ void GUI::printFile()
void GUI::openOptions()
{
Options options(_options);
bool reload = false;
OptionsDialog dialog(&options, this);
if (dialog.exec() != QDialog::Accepted)
@ -902,6 +905,39 @@ void GUI::openOptions()
_tabs.at(i)->setRenderHint(QPainter::Antialiasing,
options.graphAntiAliasing);
if (options.elevationFilter != _options.elevationFilter) {
Track::setElevationFilter(options.elevationFilter);
reload = true;
}
if (options.speedFilter != _options.speedFilter) {
Track::setSpeedFilter(options.speedFilter);
reload = true;
}
if (options.heartRateFilter != _options.heartRateFilter) {
Track::setHeartRateFilter(options.heartRateFilter);
reload = true;
}
if (options.cadenceFilter != _options.cadenceFilter) {
Track::setCadenceFilter(options.cadenceFilter);
reload = true;
}
if (options.powerFilter != _options.powerFilter) {
Track::setPowerFilter(options.powerFilter);
reload = true;
}
if (options.outlierEliminate != _options.outlierEliminate) {
Track::setOutlierElimination(options.outlierEliminate);
reload = true;
}
if (options.pauseSpeed != _options.pauseSpeed) {
Track::setPauseSpeed(options.pauseSpeed);
reload = true;
}
if (options.pauseInterval != _options.pauseInterval) {
Track::setPauseInterval(options.pauseInterval);
reload = true;
}
if (options.poiRadius != _options.poiRadius)
_poi->setRadius(options.poiRadius);
@ -910,6 +946,11 @@ void GUI::openOptions()
for (int i = 0; i < _tabs.count(); i++)
_tabs.at(i)->useOpenGL(options.useOpenGL);
}
if (options.pixmapCache != _options.pixmapCache)
QPixmapCache::setCacheLimit(options.pixmapCache * 1024);
if (reload)
reloadFile();
_options = options;
}
@ -1162,7 +1203,7 @@ void GUI::showGraphGrids(bool show)
void GUI::loadMap()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Load map"),
QString fileName = QFileDialog::getOpenFileName(this, tr("Open map file"),
QString(), tr("Map files (*.map *.tba *.tar)"));
if (fileName.isEmpty())
@ -1577,10 +1618,28 @@ void GUI::writeSettings()
settings.setValue(PATH_AA_SETTING, _options.pathAntiAliasing);
if (_options.graphAntiAliasing != GRAPH_AA_DEFAULT)
settings.setValue(GRAPH_AA_SETTING, _options.graphAntiAliasing);
if (_options.elevationFilter != ELEVATION_FILTER_DEFAULT)
settings.setValue(ELEVATION_FILTER_SETTING, _options.elevationFilter);
if (_options.speedFilter != SPEED_FILTER_DEFAULT)
settings.setValue(SPEED_FILTER_SETTING, _options.speedFilter);
if (_options.heartRateFilter != HEARTRATE_FILTER_DEFAULT)
settings.setValue(HEARTRATE_FILTER_SETTING, _options.heartRateFilter);
if (_options.cadenceFilter != CADENCE_FILTER_DEFAULT)
settings.setValue(CADENCE_FILTER_SETTING, _options.cadenceFilter);
if (_options.powerFilter != POWER_FILTER_DEFAULT)
settings.setValue(POWER_FILTER_SETTING, _options.powerFilter);
if (_options.outlierEliminate != OUTLIER_ELIMINATE_DEFAULT)
settings.setValue(OUTLIER_ELIMINATE_SETTING, _options.outlierEliminate);
if (_options.pauseSpeed != PAUSE_SPEED_DEFAULT)
settings.setValue(PAUSE_SPEED_SETTING, _options.pauseSpeed);
if (_options.pauseInterval != PAUSE_INTERVAL_DEFAULT)
settings.setValue(PAUSE_INTERVAL_SETTING, _options.pauseInterval);
if (_options.poiRadius != POI_RADIUS_DEFAULT)
settings.setValue(POI_RADIUS_SETTING, _options.poiRadius);
if (_options.useOpenGL != USE_OPENGL_DEFAULT)
settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL);
if (_options.pixmapCache != PIXMAP_CACHE_DEFAULT)
settings.setValue(PIXMAP_CACHE_SETTING, _options.pixmapCache);
if (_options.printName != PRINT_NAME_DEFAULT)
settings.setValue(PRINT_NAME_SETTING, _options.printName);
if (_options.printDate != PRINT_DATE_DEFAULT)
@ -1754,10 +1813,28 @@ void GUI::readSettings()
GRAPH_WIDTH_DEFAULT).toInt();
_options.graphAntiAliasing = settings.value(GRAPH_AA_SETTING,
GRAPH_AA_DEFAULT).toBool();
_options.elevationFilter = settings.value(ELEVATION_FILTER_SETTING,
ELEVATION_FILTER_DEFAULT).toInt();
_options.speedFilter = settings.value(SPEED_FILTER_SETTING,
SPEED_FILTER_DEFAULT).toInt();
_options.heartRateFilter = settings.value(HEARTRATE_FILTER_SETTING,
HEARTRATE_FILTER_DEFAULT).toInt();
_options.cadenceFilter = settings.value(CADENCE_FILTER_SETTING,
CADENCE_FILTER_DEFAULT).toInt();
_options.powerFilter = settings.value(POWER_FILTER_SETTING,
POWER_FILTER_DEFAULT).toInt();
_options.outlierEliminate = settings.value(OUTLIER_ELIMINATE_SETTING,
OUTLIER_ELIMINATE_DEFAULT).toBool();
_options.pauseSpeed = settings.value(PAUSE_SPEED_SETTING,
PAUSE_SPEED_DEFAULT).toFloat();
_options.pauseInterval = settings.value(PAUSE_INTERVAL_SETTING,
PAUSE_INTERVAL_DEFAULT).toInt();
_options.poiRadius = settings.value(POI_RADIUS_SETTING, POI_RADIUS_DEFAULT)
.toInt();
_options.useOpenGL = settings.value(USE_OPENGL_SETTING, USE_OPENGL_DEFAULT)
.toBool();
_options.pixmapCache = settings.value(PIXMAP_CACHE_SETTING,
PIXMAP_CACHE_DEFAULT).toInt();
_options.printName = settings.value(PRINT_NAME_SETTING, PRINT_NAME_DEFAULT)
.toBool();
_options.printDate = settings.value(PRINT_DATE_SETTING, PRINT_DATE_DEFAULT)
@ -1791,8 +1868,19 @@ void GUI::readSettings()
_tabs.at(i)->useOpenGL(true);
}
Track::setElevationFilter(_options.elevationFilter);
Track::setSpeedFilter(_options.speedFilter);
Track::setHeartRateFilter(_options.heartRateFilter);
Track::setCadenceFilter(_options.cadenceFilter);
Track::setPowerFilter(_options.powerFilter);
Track::setOutlierElimination(_options.outlierEliminate);
Track::setPauseSpeed(_options.pauseSpeed);
Track::setPauseInterval(_options.pauseInterval);
_poi->setRadius(_options.poiRadius);
QPixmapCache::setCacheLimit(_options.pixmapCache * 1024);
settings.endGroup();
}

View File

@ -10,7 +10,7 @@
#define CLOSE_FILE_ICON ":/icons/dialog-close.png"
#define SHOW_POI_ICON ":/icons/flag.png"
#define SHOW_MAP_ICON ":/icons/applications-internet.png"
#define SHOW_GRAPHS_ICON ":/icons/office-chart-line-stacked.png"
#define SHOW_GRAPHS_ICON ":/icons/office-chart-line.png"
#define QUIT_ICON ":/icons/application-exit.png"
#define RELOAD_FILE_ICON ":/icons/view-refresh.png"
#define NEXT_FILE_ICON ":/icons/arrow-right.png"
@ -24,5 +24,6 @@
#define POI_ICON ":/icons/flag_48.png"
#define SYSTEM_ICON ":/icons/system-run.png"
#define PRINT_EXPORT_ICON ":/icons/document-print-preview.png"
#define DATA_ICON ":/icons/view-filter.png"
#endif /* ICONS_H */

View File

@ -25,8 +25,8 @@ public:
virtual qreal zoomIn() = 0;
virtual qreal zoomOut() = 0;
virtual QPointF ll2xy(const Coordinates &c) const = 0;
virtual Coordinates xy2ll(const QPointF &p) const = 0;
virtual QPointF ll2xy(const Coordinates &c) = 0;
virtual Coordinates xy2ll(const QPointF &p) = 0;
virtual void draw(QPainter *painter, const QRectF &rect) = 0;

20
src/oddspinbox.cpp Normal file
View File

@ -0,0 +1,20 @@
#include "oddspinbox.h"
OddSpinBox::OddSpinBox(QWidget *parent) : QSpinBox(parent)
{
setSingleStep(2);
setMinimum(1);
}
QValidator::State OddSpinBox::validate(QString &text, int &pos) const
{
Q_UNUSED(pos);
bool ok;
int val;
val = text.toInt(&ok);
if (!ok || val < 0 || val % 2 == 0)
return QValidator::Invalid;
return QValidator::Acceptable;
}

15
src/oddspinbox.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef ODDSPINBOX_H
#define ODDSPINBOX_H
#include <QSpinBox>
class OddSpinBox : public QSpinBox
{
public:
OddSpinBox(QWidget *parent = 0);
protected:
QValidator::State validate(QString &text, int &pos) const;
};
#endif // ODDSPINBOX_H

View File

@ -18,6 +18,7 @@
#include "transversemercator.h"
#include "utm.h"
#include "lambertconic.h"
#include "albersequal.h"
#include "ozf.h"
#include "offlinemap.h"
@ -25,22 +26,19 @@
// Abridged Molodensky transformation
static Coordinates toWGS84(Coordinates c, const Datum &datum)
{
Ellipsoid WGS84(WGS84_RADIUS, WGS84_FLATTENING);
double rlat = deg2rad(c.lat());
double rlon = deg2rad(c.lon());
double dX = datum.dx();
double dY = datum.dy();
double dZ = datum.dz();
double slat = sin(deg2rad(c.lat()));
double clat = cos(deg2rad(c.lat()));
double slon = sin(deg2rad(c.lon()));
double clon = cos(deg2rad(c.lon()));
double slat = sin(rlat);
double clat = cos(rlat);
double slon = sin(rlon);
double clon = cos(rlon);
double ssqlat = slat * slat;
double from_f = datum.ellipsoid().flattening();
double df = WGS84.flattening() - from_f;
double df = WGS84_FLATTENING - from_f;
double from_a = datum.ellipsoid().radius();
double da = WGS84.radius() - from_a;
double da = WGS84_RADIUS - from_a;
double from_esq = datum.ellipsoid().flattening()
* (2.0 - datum.ellipsoid().flattening());
double adb = 1.0 / (1.0 - from_f);
@ -48,10 +46,11 @@ static Coordinates toWGS84(Coordinates c, const Datum &datum)
double rm = from_a * (1 - from_esq) / pow((1 - from_esq * ssqlat), 1.5);
double from_h = 0.0;
double dlat = (-dX * slat * clon - dY * slat * slon + dZ * clat + da * rn
* from_esq * slat * clat / from_a + +df * (rm * adb + rn / adb) * slat
* clat) / (rm + from_h);
double dlon = (-dX * slon + dY * clon) / ((rn + from_h) * clat);
double dlat = (-datum.dx() * slat * clon - datum.dy() * slat * slon
+ datum.dz() * clat + da * rn * from_esq * slat * clat / from_a + df
* (rm * adb + rn / adb) * slat * clat) / (rm + from_h);
double dlon = (-datum.dx() * slon + datum.dy() * clon) / ((rn + from_h)
* clat);
return Coordinates(c.lon() + rad2deg(dlon), c.lat() + rad2deg(dlat));
}
@ -101,14 +100,18 @@ int OfflineMap::parse(QIODevice &device, QList<ReferencePoint> &points,
qreal lonm = list.at(10).trimmed().toFloat(&res);
if (!res)
ll = false;
if (ll && list.at(8).trimmed() == "S")
if (ll && list.at(8).trimmed() == "S") {
latd = -latd;
if (ll && list.at(11).trimmed() == "W")
latm = -latm;
}
if (ll && list.at(11).trimmed() == "W") {
lond = -lond;
lonm = -lonm;
}
int zone = list.at(13).trimmed().toInt(&res);
setup.zone = list.at(13).trimmed().toInt(&res);
if (!res)
zone = 0;
setup.zone = 0;
qreal ppx = list.at(14).trimmed().toFloat(&res);
if (!res)
pp = false;
@ -116,16 +119,18 @@ int OfflineMap::parse(QIODevice &device, QList<ReferencePoint> &points,
if (!res)
pp = false;
if (list.at(16).trimmed() == "S")
zone = -zone;
setup.zone = -setup.zone;
ReferencePoint p;
p.xy = QPoint(x, y);
if (ll) {
p.ll = Coordinates(lond + lonm/60.0, latd + latm/60.0);
points.append(p);
if (p.ll.isValid())
points.append(p);
else
return ln;
} else if (pp) {
p.pp = QPointF(ppx, ppy);
setup.zone = zone;
points.append(p);
} else
return ln;
@ -206,12 +211,20 @@ bool OfflineMap::createProjection(const QString &datum,
return false;
}
if (setup.latitudeOrigin < -90.0 || setup.latitudeOrigin > 90.0
|| setup.longitudeOrigin < -180.0 || setup.longitudeOrigin > 180.0
|| setup.standardParallel1 < -90 || setup.standardParallel1 > 90
|| setup.standardParallel2 < -90 || setup.standardParallel2 > 90) {
_errorString = "Invalid projection setup";
return false;
}
if (projection == "Mercator")
_projection = new Mercator();
else if (projection == "Transverse Mercator")
_projection = new TransverseMercator(d.ellipsoid(),
setup.longitudeOrigin, setup.scale, setup.falseEasting,
setup.falseNorthing);
setup.latitudeOrigin, setup.longitudeOrigin, setup.scale,
setup.falseEasting, setup.falseNorthing);
else if (projection == "Latitude/Longitude")
_projection = new LatLon();
else if (projection == "Lambert Conformal Conic")
@ -219,6 +232,10 @@ bool OfflineMap::createProjection(const QString &datum,
setup.standardParallel1, setup.standardParallel2,
setup.latitudeOrigin, setup.longitudeOrigin, setup.scale,
setup.falseEasting, setup.falseNorthing);
else if (projection == "Albers Equal Area")
_projection = new AlbersEqual(d.ellipsoid(), setup.standardParallel1,
setup.standardParallel2, setup.latitudeOrigin, setup.longitudeOrigin,
setup.falseEasting, setup.falseNorthing);
else if (projection == "(UTM) Universal Transverse Mercator") {
if (setup.zone)
_projection = new UTM(d.ellipsoid(), setup.zone);
@ -228,7 +245,19 @@ bool OfflineMap::createProjection(const QString &datum,
_errorString = "Can not determine UTM zone";
return false;
}
} else {
} else if (projection == "(NZTM2) New Zealand TM 2000")
_projection = new TransverseMercator(d.ellipsoid(), 0, 173.0, 0.9996,
1600000, 10000000);
else if (projection == "(BNG) British National Grid")
_projection = new TransverseMercator(d.ellipsoid(), 49, -2, 0.999601,
400000, -100000);
else if (projection == "(IG) Irish Grid")
_projection = new TransverseMercator(d.ellipsoid(), 53.5, -8, 1.000035,
200000, 250000);
else if (projection == "(SG) Swedish Grid")
_projection = new TransverseMercator(d.ellipsoid(), 0, 15.808278, 1,
1500000, 0);
else {
_errorString = QString("%1: Unknown map projection").arg(projection);
return false;
}
@ -250,7 +279,7 @@ bool OfflineMap::createProjection(const QString &datum,
bool OfflineMap::computeTransformation(const QList<ReferencePoint> &points)
{
Q_ASSERT(points.count() >= 2);
Q_ASSERT(points.size() >= 2);
Matrix c(3, 2);
c.zeroize();
@ -348,11 +377,12 @@ bool OfflineMap::getImageInfo(const QString &path)
}
QString suffix = ii.suffix().toLower();
if (suffix == "ozf3" || suffix == "ozf4") {
_errorString = QString("%1: Obfuscated image files not supported")
if (suffix == "ozf4" || suffix == "ozfx4") {
_errorString = QString("%1: OZF4 image files not supported")
.arg(QFileInfo(_imgPath).fileName());
return false;
} else if (suffix == "ozf2") {
} else if (suffix == "ozf2" || suffix == "ozfx2" || suffix == "ozf3"
|| suffix == "ozfx3") {
_ozf.load(_imgPath);
_size = _ozf.size();
} else {

View File

@ -31,9 +31,9 @@ public:
qreal zoomIn() {return 1.0;}
qreal zoomOut() {return 1.0;}
QPointF ll2xy(const Coordinates &c) const
QPointF ll2xy(const Coordinates &c)
{return _transform.map(_projection->ll2xy(c));}
Coordinates xy2ll(const QPointF &p) const
Coordinates xy2ll(const QPointF &p)
{return _projection->xy2ll(_inverted.map(p));}
void draw(QPainter *painter, const QRectF &rect);

View File

@ -232,13 +232,13 @@ void OnlineMap::draw(QPainter *painter, const QRectF &rect)
}
}
QPointF OnlineMap::ll2xy(const Coordinates &c) const
QPointF OnlineMap::ll2xy(const Coordinates &c)
{
QPointF m = Mercator().ll2xy(c);
return QPointF(m.x() / _scale, m.y() / -_scale);
}
Coordinates OnlineMap::xy2ll(const QPointF &p) const
Coordinates OnlineMap::xy2ll(const QPointF &p)
{
QPointF m(p.x() * _scale, -p.y() * _scale);
return Mercator().xy2ll(m);

View File

@ -23,8 +23,8 @@ public:
qreal zoomIn();
qreal zoomOut();
QPointF ll2xy(const Coordinates &c) const;
Coordinates xy2ll(const QPointF &p) const;
QPointF ll2xy(const Coordinates &c);
Coordinates xy2ll(const QPointF &p);
void draw(QPainter *painter, const QRectF &rect);

View File

@ -9,11 +9,13 @@
#include <QGroupBox>
#include <QCheckBox>
#include <QComboBox>
#include <QLabel>
#include <QSysInfo>
#include "config.h"
#include "icons.h"
#include "colorbox.h"
#include "stylecombobox.h"
#include "oddspinbox.h"
#include "optionsdialog.h"
#define MENU_MARGIN 20
@ -83,11 +85,12 @@ QWidget *OptionsDialog::createAppearancePage()
pathTabLayout->addWidget(l1);
pathTabLayout->addLayout(routeLayout);
pathTabLayout->addWidget(l2);
#else
#else // Q_OS_MAC
pathTabLayout->addWidget(trackBox);
pathTabLayout->addWidget(routeBox);
#endif
#endif // Q_OS_MAC
pathTabLayout->addLayout(pathAALayout);
pathTabLayout->addStretch();
pathTab->setLayout(pathTabLayout);
_graphWidth = new QSpinBox();
@ -117,6 +120,98 @@ QWidget *OptionsDialog::createAppearancePage()
return appearancePage;
}
QWidget *OptionsDialog::createDataPage()
{
QString filterToolTip = tr("Moving average window size");
_elevationFilter = new OddSpinBox();
_elevationFilter->setValue(_options->elevationFilter);
_elevationFilter->setToolTip(filterToolTip);
_speedFilter = new OddSpinBox();
_speedFilter->setValue(_options->speedFilter);
_speedFilter->setToolTip(filterToolTip);
_heartRateFilter = new OddSpinBox();
_heartRateFilter->setValue(_options->heartRateFilter);
_heartRateFilter->setToolTip(filterToolTip);
_cadenceFilter = new OddSpinBox();
_cadenceFilter->setValue(_options->cadenceFilter);
_cadenceFilter->setToolTip(filterToolTip);
_powerFilter = new OddSpinBox();
_powerFilter->setValue(_options->powerFilter);
_powerFilter->setToolTip(filterToolTip);
QFormLayout *smoothLayout = new QFormLayout();
smoothLayout->addRow(tr("Elevation:"), _elevationFilter);
smoothLayout->addRow(tr("Speed:"), _speedFilter);
smoothLayout->addRow(tr("Heart rate:"), _heartRateFilter);
smoothLayout->addRow(tr("Cadence:"), _cadenceFilter);
smoothLayout->addRow(tr("Power:"), _powerFilter);
#ifndef Q_OS_MAC
QGroupBox *smoothBox = new QGroupBox(tr("Smoothing"));
smoothBox->setLayout(smoothLayout);
#endif // Q_OS_MAC
_outlierEliminate = new QCheckBox(tr("Eliminate GPS outliers"));
_outlierEliminate->setChecked(_options->outlierEliminate);
QFormLayout *outlierLayout = new QFormLayout();
outlierLayout->addWidget(_outlierEliminate);
#ifndef Q_OS_MAC
QGroupBox *outlierBox = new QGroupBox(tr("Outlier elimination"));
outlierBox->setLayout(outlierLayout);
#endif // Q_OS_MAC
QWidget *filterTab = new QWidget();
QVBoxLayout *filterTabLayout = new QVBoxLayout();
#ifdef Q_OS_MAC
QLabel *label = new QLabel(tr("Smoothing:"));
QFrame *line = new QFrame();
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
filterTabLayout->addWidget(label);
filterTabLayout->addLayout(smoothLayout);
filterTabLayout->addWidget(line);
filterTabLayout->addLayout(outlierLayout);
#else // Q_OS_MAC
filterTabLayout->addWidget(smoothBox);
filterTabLayout->addWidget(outlierBox);
#endif // Q_OS_MAC
filterTabLayout->addStretch();
filterTab->setLayout(filterTabLayout);
_pauseSpeed = new QDoubleSpinBox();
_pauseSpeed->setDecimals(1);
_pauseSpeed->setSingleStep(0.1);
_pauseSpeed->setMinimum(0.1);
if (_options->units == Imperial) {
_pauseSpeed->setValue(_options->pauseSpeed * MS2MIH);
_pauseSpeed->setSuffix(UNIT_SPACE + tr("mi/h"));
} else {
_pauseSpeed->setValue(_options->pauseSpeed * MS2KMH);
_pauseSpeed->setSuffix(UNIT_SPACE + tr("km/h"));
}
_pauseInterval = new QSpinBox();
_pauseInterval->setMinimum(1);
_pauseInterval->setSuffix(UNIT_SPACE + tr("s"));
_pauseInterval->setValue(_options->pauseInterval);
QFormLayout *pauseLayout = new QFormLayout();
pauseLayout->addRow(tr("Minimal speed:"), _pauseSpeed);
pauseLayout->addRow(tr("Minimal duration:"), _pauseInterval);
QWidget *pauseTab = new QWidget();
pauseTab->setLayout(pauseLayout);
QTabWidget *filterPage = new QTabWidget();
filterPage->addTab(filterTab, tr("Filtering"));
filterPage->addTab(pauseTab, tr("Pause detection"));
return filterPage;
}
QWidget *OptionsDialog::createPOIPage()
{
_poiRadius = new QDoubleSpinBox();
@ -196,11 +291,24 @@ QWidget *OptionsDialog::createSystemPage()
#endif // Q_OS_WIN32
_useOpenGL->setChecked(_options->useOpenGL);
QFormLayout *systemLayout = new QFormLayout();
systemLayout->addWidget(_useOpenGL);
_pixmapCache = new QSpinBox();
_pixmapCache->setMinimum(16);
_pixmapCache->setMaximum(1024);
_pixmapCache->setSuffix(UNIT_SPACE + tr("MB"));
_pixmapCache->setValue(_options->pixmapCache);
QFormLayout *cacheLayout = new QFormLayout();
cacheLayout->addRow(tr("Image cache size:"), _pixmapCache);
QFormLayout *openGLLayout = new QFormLayout();
openGLLayout->addWidget(_useOpenGL);
QWidget *systemTab = new QWidget();
systemTab->setLayout(systemLayout);
QVBoxLayout *systemTabLayout = new QVBoxLayout();
systemTabLayout->addLayout(cacheLayout);
systemTabLayout->addLayout(openGLLayout);
systemTabLayout->addStretch();
systemTab->setLayout(systemTabLayout);
QTabWidget *systemPage = new QTabWidget();
systemPage->addTab(systemTab, tr("System"));
@ -213,6 +321,7 @@ OptionsDialog::OptionsDialog(Options *options, QWidget *parent)
{
QStackedWidget *pages = new QStackedWidget();
pages->addWidget(createAppearancePage());
pages->addWidget(createDataPage());
pages->addWidget(createPOIPage());
pages->addWidget(createExportPage());
pages->addWidget(createSystemPage());
@ -221,6 +330,7 @@ OptionsDialog::OptionsDialog(Options *options, QWidget *parent)
menu->setIconSize(QSize(MENU_ICON_SIZE, MENU_ICON_SIZE));
new QListWidgetItem(QIcon(QPixmap(APPEARANCE_ICON)), tr("Appearance"),
menu);
new QListWidgetItem(QIcon(QPixmap(DATA_ICON)), tr("Data"), menu);
new QListWidgetItem(QIcon(QPixmap(POI_ICON)), tr("POI"), menu);
new QListWidgetItem(QIcon(QPixmap(PRINT_EXPORT_ICON)), tr("Print & Export"),
menu);
@ -269,12 +379,21 @@ void OptionsDialog::accept()
_options->graphWidth = _graphWidth->value();
_options->graphAntiAliasing = _graphAA->isChecked();
if (_options->units == Imperial)
_options->poiRadius = _poiRadius->value() * MIINM;
else
_options->poiRadius = _poiRadius->value() * KMINM;
_options->elevationFilter = _elevationFilter->value();
_options->speedFilter = _speedFilter->value();
_options->heartRateFilter = _heartRateFilter->value();
_options->cadenceFilter = _cadenceFilter->value();
_options->powerFilter = _powerFilter->value();
_options->outlierEliminate = _outlierEliminate->isChecked();
_options->pauseSpeed = (_options->units == Imperial)
? _pauseSpeed->value() / MS2MIH : _pauseSpeed->value() / MS2KMH;
_options->pauseInterval = _pauseInterval->value();
_options->poiRadius = (_options->units == Imperial)
? _poiRadius->value() * MIINM : _poiRadius->value() * KMINM;
_options->useOpenGL = _useOpenGL->isChecked();
_options->pixmapCache = _pixmapCache->value();
_options->printName = _name->isChecked();
_options->printDate = _date->isChecked();

View File

@ -7,6 +7,7 @@
class ColorBox;
class StyleComboBox;
class OddSpinBox;
class QSpinBox;
class QDoubleSpinBox;
class QComboBox;
@ -22,10 +23,20 @@ struct Options {
int graphWidth;
bool pathAntiAliasing;
bool graphAntiAliasing;
// Data
int elevationFilter;
int speedFilter;
int heartRateFilter;
int cadenceFilter;
int powerFilter;
bool outlierEliminate;
qreal pauseSpeed;
int pauseInterval;
// POI
int poiRadius;
// System
bool useOpenGL;
int pixmapCache;
// Print/Export
bool printName;
bool printDate;
@ -50,12 +61,14 @@ public slots:
private:
QWidget *createAppearancePage();
QWidget *createDataPage();
QWidget *createPOIPage();
QWidget *createSystemPage();
QWidget *createExportPage();
Options *_options;
// Appearance
ColorBox *_baseColor;
QDoubleSpinBox *_colorOffset;
QSpinBox *_trackWidth;
@ -65,8 +78,21 @@ private:
QCheckBox *_pathAA;
QSpinBox *_graphWidth;
QCheckBox *_graphAA;
// Data
OddSpinBox *_elevationFilter;
OddSpinBox *_speedFilter;
OddSpinBox *_heartRateFilter;
OddSpinBox *_cadenceFilter;
OddSpinBox *_powerFilter;
QCheckBox *_outlierEliminate;
QDoubleSpinBox *_pauseSpeed;
QSpinBox *_pauseInterval;
// POI
QDoubleSpinBox *_poiRadius;
// System
QSpinBox *_pixmapCache;
QCheckBox *_useOpenGL;
// Print/Export
QCheckBox *_name;
QCheckBox *_date;
QCheckBox *_distance;

View File

@ -3,8 +3,23 @@
#include "ozf.h"
#define OZF2_MAGIC 0x7778
#define OZF2_SEPARATOR 0x77777777
#define OZF2_MAGIC 0x7778
#define OZF3_MAGIC 0x7780
#define SEPARATOR 0x77777777
static const quint8 XKEY[] =
{
0x2D, 0x4A, 0x43, 0xF1, 0x27, 0x9B, 0x69, 0x4F,
0x36, 0x52, 0x87, 0xEC, 0x5F, 0x42, 0x53, 0x22,
0x9E, 0x8B, 0x2D, 0x83, 0x3D, 0xD2, 0x84, 0xBA,
0xD8, 0x5B
};
static void decrypt(void *data, size_t size, quint8 init)
{
for (size_t i = 0; i < size; i++)
reinterpret_cast<quint8*>(data)[i] ^= XKEY[i % sizeof(XKEY)] + init;
}
template<class T> bool OZF::readValue(T &val)
{
@ -13,6 +28,9 @@ template<class T> bool OZF::readValue(T &val)
if (_file.read((char*)&data, sizeof(T)) < (qint64)sizeof(T))
return false;
if (_decrypt)
decrypt(&data, sizeof(T), _key);
if (sizeof(T) > 1)
val = qFromLittleEndian(data);
else
@ -21,17 +39,88 @@ template<class T> bool OZF::readValue(T &val)
return true;
}
bool OZF::read(void *data, size_t size)
{
if (_file.read((char*)data, size) < (qint64)size)
return false;
if (_decrypt)
decrypt(data, size, _key);
return true;
}
bool OZF::readKey()
{
quint8 randomNumber, initial;
quint32 keyblock;
if (!_file.seek(14))
return false;
if (!readValue(randomNumber))
return false;
if (!_file.seek(162))
return false;
if (!readValue(initial))
return false;
_decrypt = true; _key = initial;
if (!_file.seek(15 + randomNumber))
return false;
if (!readValue(keyblock))
return false;
switch (keyblock & 0xFF) {
case 0xf1:
initial += 0x8a;
break;
case 0x18:
case 0x54:
initial += 0xa0;
break;
case 0x56:
initial += 0xb9;
break;
case 0x43:
initial += 0x6a;
break;
case 0x83:
initial += 0xa4;
break;
case 0xc5:
initial += 0x7e;
break;
case 0x38:
initial += 0xc1;
break;
default:
break;
}
_key = initial;
return true;
}
bool OZF::readHeaders()
{
quint16 magic;
quint32 separator;
if (!readValue(magic) || magic != OZF2_MAGIC)
if (!readValue(magic))
return false;
if (!_file.seek(_file.pos() + 52))
return false;
if (!readValue(separator) || separator != OZF2_SEPARATOR)
if (magic == OZF2_MAGIC) {
if (!_file.seek(_file.pos() + 52))
return false;
if (!readValue(separator) || separator != SEPARATOR)
return false;
} else if (magic == OZF3_MAGIC) {
if (!readKey())
return false;
} else
return false;
return true;
@ -69,9 +158,10 @@ bool OZF::readTileTable()
_dim = QSize(x, y);
_palette = QVector<quint32>(256);
if (!read(&(_palette[0]), sizeof(quint32) * 256))
return false;
for (int i = 0; i < _palette.size(); i++) {
if (!readValue(bgr0))
return false;
bgr0 = qFromLittleEndian(_palette.at(i));
quint32 b = (bgr0 & 0x000000FF);
quint32 g = (bgr0 & 0x0000FF00) >> 8;
@ -98,7 +188,7 @@ bool OZF::load(const QString &path)
return false;
if (!readHeaders()) {
qWarning("%s: not a OZF2 file", qPrintable(_file.fileName()));
qWarning("%s: not a OZF2/OZF3 file", qPrintable(_file.fileName()));
_file.close();
return false;
}
@ -128,6 +218,8 @@ QPixmap OZF::tile(int x, int y)
QByteArray ba = _file.read(size);
if (ba.size() != size)
return QPixmap();
if (_decrypt)
decrypt(ba.data(), qMin(16, ba.size()), _key);
quint32 bes = qToBigEndian(tileSize().width() * tileSize().height());
ba.prepend(QByteArray((char*)&bes, sizeof(bes)));
QByteArray uba = qUncompress(ba);

View File

@ -11,6 +11,8 @@
class OZF
{
public:
OZF() : _decrypt(false), _key(0) {}
bool load(const QString &path);
QString fileName() const {return _file.fileName();}
@ -22,9 +24,14 @@ public:
private:
template<class T> bool readValue(T &val);
bool read(void *data, size_t size);
bool readKey();
bool readHeaders();
bool readTileTable();
bool _decrypt;
quint8 _key;
QSize _size;
QSize _dim;
QVector<QRgb> _palette;

View File

@ -12,20 +12,21 @@ PathItem::PathItem(const Path &path, Map *map, QGraphicsItem *parent)
: QGraphicsObject(parent)
{
Q_ASSERT(path.count() >= 2);
_path = path;
_map = map;
updatePainterPath(map);
updateShape();
_digitalZoom = 0;
_width = 3;
QBrush brush(Qt::SolidPattern);
_pen = QPen(brush, _width);
updatePainterPath(map);
updateShape();
_marker = new MarkerItem(this);
_marker->setPos(position(_path.at(0).distance()));
_marker->setFlag(QGraphicsItem::ItemIgnoresTransformations);
_md = _path.at(0).distance();
_markerDistance = _path.at(0).distance();
setCursor(Qt::ArrowCursor);
setAcceptHoverEvents(true);
@ -34,7 +35,7 @@ PathItem::PathItem(const Path &path, Map *map, QGraphicsItem *parent)
void PathItem::updateShape()
{
QPainterPathStroker s;
s.setWidth((_width + 1) * 1.0/scale());
s.setWidth((_width + 1) * pow(2, -_digitalZoom));
_shape = s.createStroke(_painterPath);
}
@ -71,7 +72,7 @@ void PathItem::setMap(Map *map)
updatePainterPath(map);
updateShape();
_marker->setPos(position(_md));
_marker->setPos(position(_markerDistance));
}
void PathItem::setColor(const QColor &color)
@ -85,7 +86,7 @@ void PathItem::setWidth(qreal width)
prepareGeometryChange();
_width = width;
_pen.setWidthF(_width * 1.0/scale());
_pen.setWidthF(_width * pow(2, -_digitalZoom));
updateShape();
}
@ -96,6 +97,17 @@ void PathItem::setStyle(Qt::PenStyle style)
update();
}
void PathItem::setDigitalZoom(int zoom)
{
prepareGeometryChange();
_digitalZoom = zoom;
_pen.setWidthF(_width * pow(2, -_digitalZoom));
_marker->setScale(pow(2, -_digitalZoom));
updateShape();
}
QPointF PathItem::position(qreal x) const
{
int low = 0;
@ -137,7 +149,7 @@ void PathItem::moveMarker(qreal distance)
&& distance <= _path.last().distance()) {
_marker->setVisible(true);
_marker->setPos(position(distance));
_md = distance;
_markerDistance = distance;
} else
_marker->setVisible(false);
}
@ -146,7 +158,7 @@ void PathItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);
_pen.setWidthF((_width + 1) * 1.0/scale());
_pen.setWidthF((_width + 1) * pow(2, -_digitalZoom));
setZValue(zValue() + 1.0);
update();
@ -157,7 +169,7 @@ void PathItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event);
_pen.setWidthF(_width * 1.0/scale());
_pen.setWidthF(_width * pow(2, -_digitalZoom));
setZValue(zValue() - 1.0);
update();

View File

@ -28,8 +28,7 @@ public:
void setColor(const QColor &color);
void setWidth(qreal width);
void setStyle(Qt::PenStyle style);
void showMarker(bool show) {_marker->setVisible(show);}
void setDigitalZoom(int zoom);
public slots:
void moveMarker(qreal distance);
@ -50,7 +49,8 @@ private:
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
Map *_map;
qreal _md;
qreal _markerDistance;
int _digitalZoom;
qreal _width;
QPen _pen;

View File

@ -2,6 +2,7 @@
#include <QGraphicsScene>
#include <QWheelEvent>
#include <QApplication>
#include <QPixmapCache>
#include "opengl.h"
#include "misc.h"
#include "poi.h"
@ -50,7 +51,6 @@ PathView::PathView(Map *map, POI *poi, QWidget *parent)
_mapScale = new ScaleItem();
_mapScale->setZValue(2.0);
_mapScale->setFlag(QGraphicsItem::ItemIgnoresTransformations);
_map = map;
_poi = poi;
@ -97,9 +97,11 @@ PathItem *PathView::addTrack(const Track &track)
_tracks.append(ti);
_tr |= ti->path().boundingRect();
ti->setColor(_palette.nextColor());
ti->setWidth(_trackWidth * pow(2, -_digitalZoom));
ti->setWidth(_trackWidth);
ti->setStyle(_trackStyle);
ti->setUnits(_units);
ti->setVisible(_showTracks);
ti->setDigitalZoom(_digitalZoom);
_scene->addItem(ti);
addPOI(_poi->points(ti->path()));
@ -118,11 +120,13 @@ PathItem *PathView::addRoute(const Route &route)
_routes.append(ri);
_rr |= ri->path().boundingRect();
ri->setColor(_palette.nextColor());
ri->setWidth(_routeWidth * pow(2, -_digitalZoom));
ri->setWidth(_routeWidth);
ri->setStyle(_routeStyle);
ri->setUnits(_units);
ri->setVisible(_showRoutes);
ri->showWaypoints(_showRouteWaypoints);
ri->showWaypointLabels(_showWaypointLabels);
ri->setDigitalZoom(_digitalZoom);
_scene->addItem(ri);
addPOI(_poi->points(ri->path()));
@ -141,8 +145,9 @@ void PathView::addWaypoints(const QList<Waypoint> &waypoints)
updateWaypointsBoundingRect(QPointF(c.lon(), c.lat()));
wi->setZValue(1);
wi->showLabel(_showWaypointLabels);
wi->setUnits(_units);
wi->setVisible(_showWaypoints);
wi->setFlag(QGraphicsItem::ItemIgnoresTransformations);
wi->setDigitalZoom(_digitalZoom);
_scene->addItem(wi);
}
@ -297,6 +302,7 @@ void PathView::setMap(Map *map)
_mapScale->setResolution(_res);
resetCachedContent();
QPixmapCache::clear();
}
void PathView::setPOI(POI *poi)
@ -340,7 +346,7 @@ void PathView::addPOI(const QVector<Waypoint> &waypoints)
pi->setZValue(1);
pi->showLabel(_showPOILabels);
pi->setVisible(_showPOI);
pi->setFlag(QGraphicsItem::ItemIgnoresTransformations);
pi->setDigitalZoom(_digitalZoom);
_scene->addItem(pi);
_pois.insert(w, pi);
@ -372,23 +378,40 @@ void PathView::redraw()
void PathView::resetDigitalZoom()
{
_digitalZoom = 0;
QHash<Waypoint, WaypointItem*>::const_iterator it;
_digitalZoom = 0;
resetTransform();
setTrackWidth(_trackWidth);
setRouteWidth(_routeWidth);
for (int i = 0; i < _tracks.size(); i++)
_tracks.at(i)->setDigitalZoom(0);
for (int i = 0; i < _routes.size(); i++)
_routes.at(i)->setDigitalZoom(0);
for (int i = 0; i < _waypoints.size(); i++)
_waypoints.at(i)->setDigitalZoom(0);
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
it.value()->setDigitalZoom(0);
_mapScale->setDigitalZoom(0);
}
void PathView::digitalZoom(int zoom)
{
QHash<Waypoint, WaypointItem*>::const_iterator it;
_digitalZoom += zoom;
scale(pow(2, zoom), pow(2, zoom));
setTrackWidth(_trackWidth);
setRouteWidth(_routeWidth);
for (int i = 0; i < _tracks.size(); i++)
_tracks.at(i)->setDigitalZoom(_digitalZoom);
for (int i = 0; i < _routes.size(); i++)
_routes.at(i)->setDigitalZoom(_digitalZoom);
for (int i = 0; i < _waypoints.size(); i++)
_waypoints.at(i)->setDigitalZoom(_digitalZoom);
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
it.value()->setDigitalZoom(_digitalZoom);
_mapScale->setResolution(_res * pow(2, -_digitalZoom));
_mapScale->setDigitalZoom(_digitalZoom);
}
void PathView::zoom(int zoom, const QPoint &pos, const Coordinates &c)
@ -519,10 +542,9 @@ void PathView::clear()
_tr = QRectF(); _rr = QRectF(); _wr = QRectF();
_wp = QPointF();
_digitalZoom = 0;
resetTransform();
resetDigitalZoom();
resetCachedContent();
QPixmapCache::clear();
}
void PathView::showTracks(bool show)
@ -608,7 +630,7 @@ void PathView::setTrackWidth(int width)
_trackWidth = width;
for (int i = 0; i < _tracks.count(); i++)
_tracks.at(i)->setWidth(width * pow(2, -_digitalZoom));
_tracks.at(i)->setWidth(width);
}
void PathView::setRouteWidth(int width)
@ -616,7 +638,7 @@ void PathView::setRouteWidth(int width)
_routeWidth = width;
for (int i = 0; i < _routes.count(); i++)
_routes.at(i)->setWidth(width * pow(2, -_digitalZoom));
_routes.at(i)->setWidth(width);
}
void PathView::setTrackStyle(Qt::PenStyle style)

View File

@ -1,3 +1,4 @@
#include <cmath>
#include <QPainter>
#include "config.h"
#include "misc.h"
@ -15,6 +16,7 @@ ScaleItem::ScaleItem(QGraphicsItem *parent) : QGraphicsItem(parent)
{
_units = Metric;
_res = 1.0;
_digitalZoom = 0;
#ifndef Q_OS_MAC
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
@ -87,24 +89,26 @@ QString ScaleItem::units() const
void ScaleItem::computeScale()
{
qreal res = _res * pow(2, -_digitalZoom);
if (_units == Imperial) {
_length = niceNum((_res * M2FT * SCALE_WIDTH) / SEGMENTS, 1);
_length = niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, 1);
if (_length >= MIINFT) {
_length = niceNum((_res * M2FT * FT2MI * SCALE_WIDTH) / SEGMENTS, 1);
_width = (_length / (_res * M2FT * FT2MI));
_length = niceNum((res * M2FT * FT2MI * SCALE_WIDTH) / SEGMENTS, 1);
_width = (_length / (res * M2FT * FT2MI));
_scale = true;
} else {
_width = (_length / (_res * M2FT));
_width = (_length / (res * M2FT));
_scale = false;
}
} else {
_length = niceNum((_res * SCALE_WIDTH) / SEGMENTS, 1);
_length = niceNum((res * SCALE_WIDTH) / SEGMENTS, 1);
if (_length >= KMINM) {
_length *= M2KM;
_width = (_length / (_res * M2KM));
_width = (_length / (res * M2KM));
_scale = true;
} else {
_width = (_length / _res);
_width = (_length / res);
_scale = false;
}
}
@ -127,3 +131,14 @@ void ScaleItem::setUnits(enum Units units)
updateBoundingRect();
update();
}
void ScaleItem::setDigitalZoom(int zoom)
{
prepareGeometryChange();
_digitalZoom = zoom;
computeScale();
updateBoundingRect();
update();
setScale(pow(2, -_digitalZoom));
}

View File

@ -15,6 +15,7 @@ public:
void setResolution(qreal res);
void setUnits(enum Units units);
void setDigitalZoom(int zoom);
private:
void updateBoundingRect();
@ -27,6 +28,8 @@ private:
Units _units;
bool _scale;
int _digitalZoom;
QRectF _boundingRect;
};

View File

@ -90,10 +90,28 @@
#define PATH_AA_DEFAULT true
#define GRAPH_AA_SETTING "graphAntiAliasing"
#define GRAPH_AA_DEFAULT false
#define ELEVATION_FILTER_SETTING "elevationFilter"
#define ELEVATION_FILTER_DEFAULT 3
#define SPEED_FILTER_SETTING "speedFilter"
#define SPEED_FILTER_DEFAULT 5
#define HEARTRATE_FILTER_SETTING "heartrateFilter"
#define HEARTRATE_FILTER_DEFAULT 3
#define CADENCE_FILTER_SETTING "cadenceFilter"
#define CADENCE_FILTER_DEFAULT 3
#define POWER_FILTER_SETTING "powerFilter"
#define POWER_FILTER_DEFAULT 3
#define OUTLIER_ELIMINATE_SETTING "outlierEliminate"
#define OUTLIER_ELIMINATE_DEFAULT true
#define PAUSE_SPEED_SETTING "pauseSpeed"
#define PAUSE_SPEED_DEFAULT 0.5 /* m/s */
#define PAUSE_INTERVAL_SETTING "pauseInterval"
#define PAUSE_INTERVAL_DEFAULT 10 /* s */
#define POI_RADIUS_SETTING "poiRadius"
#define POI_RADIUS_DEFAULT (IMPERIAL_UNITS() ? MIINM : KMINM)
#define POI_RADIUS_DEFAULT (int)(IMPERIAL_UNITS() ? MIINM : KMINM)
#define USE_OPENGL_SETTING "useOpenGL"
#define USE_OPENGL_DEFAULT false
#define PIXMAP_CACHE_SETTING "pixmapCache"
#define PIXMAP_CACHE_DEFAULT 64 /* MB */
#define PRINT_NAME_SETTING "printName"
#define PRINT_NAME_DEFAULT true
#define PRINT_DATE_SETTING "printDate"

View File

@ -1,16 +1,17 @@
#include "track.h"
#define OUTLIER_WINDOW 21
#define WINDOW_OE 31
int Track::_elevationWindow = 3;
int Track::_speedWindow = 5;
int Track::_heartRateWindow = 3;
int Track::_cadenceWindow = 3;
int Track::_powerWindow = 3;
#define WINDOW_EF 3
#define WINDOW_SF 7
#define WINDOW_HF 3
#define WINDOW_CF 3
#define WINDOW_PF 3
qreal Track::_pauseSpeed = 0.5;
int Track::_pauseInterval = 10;
#define PAUSE_SPEED 0.5
#define PAUSE_TIME_DIFF 10
bool Track::_outlierEliminate = true;
static qreal median(QVector<qreal> v)
@ -48,24 +49,26 @@ static QSet<int> eliminate(const QVector<qreal> &v, int window)
static Graph filter(const Graph &g, int window)
{
qreal acc = 0;
Graph ret;
if (g.size() < window)
return ret;
return Graph();
if (window < 2)
return Graph(g);
qreal acc = 0;
Graph ret(g.size());
for (int i = 0; i < window; i++)
acc += g.at(i).y();
for (int i = 0; i <= window/2; i++)
ret.append(GraphPoint(g.at(i).s(), g.at(i).t(), acc/window));
ret[i] = GraphPoint(g.at(i).s(), g.at(i).t(), acc/window);
for (int i = window/2 + 1; i < g.size() - window/2; i++) {
acc += g.at(i + window/2).y() - g.at(i - (window/2 + 1)).y();
ret.append(GraphPoint(g.at(i).s(), g.at(i).t(), acc/window));
ret[i] = GraphPoint(g.at(i).s(), g.at(i).t(), acc/window);
}
for (int i = g.size() - window/2; i < g.size(); i++)
ret.append(GraphPoint(g.at(i).s(), g.at(i).t(), acc/window));
ret[i] = GraphPoint(g.at(i).s(), g.at(i).t(), acc/window);
return ret;
}
@ -104,15 +107,16 @@ Track::Track(const TrackData &data) : _data(data)
_pause = 0;
for (int i = 1; i < data.count(); i++) {
if (_time.at(i) > _time.at(i-1) + PAUSE_TIME_DIFF
&& _speed.at(i) < PAUSE_SPEED) {
if (_time.at(i) > _time.at(i-1) + _pauseInterval
&& _speed.at(i) < _pauseSpeed) {
_pause += _time.at(i) - _time.at(i-1);
_stop.insert(i-1);
_stop.insert(i);
}
}
_outliers = eliminate(_speed, WINDOW_OE);
if (_outlierEliminate)
_outliers = eliminate(_speed, OUTLIER_WINDOW);
QSet<int>::const_iterator it;
for (it = _stop.constBegin(); it != _stop.constEnd(); ++it)
@ -137,7 +141,7 @@ Graph Track::elevation() const
raw.append(GraphPoint(_distance.at(i), _time.at(i),
_data.at(i).elevation()));
return filter(raw, WINDOW_EF);
return filter(raw, _elevationWindow);
}
Graph Track::speed() const
@ -161,7 +165,7 @@ Graph Track::speed() const
raw.append(GraphPoint(_distance.at(i), _time.at(i), v));
}
filtered = filter(raw, WINDOW_SF);
filtered = filter(raw, _speedWindow);
QSet<int>::const_iterator it;
for (it = stop.constBegin(); it != stop.constEnd(); ++it)
@ -179,7 +183,7 @@ Graph Track::heartRate() const
raw.append(GraphPoint(_distance.at(i), _time.at(i),
_data.at(i).heartRate()));
return filter(raw, WINDOW_HF);
return filter(raw, _heartRateWindow);
}
Graph Track::temperature() const
@ -212,7 +216,7 @@ Graph Track::cadence() const
raw.append(GraphPoint(_distance.at(i), _time.at(i), c));
}
filtered = filter(raw, WINDOW_CF);
filtered = filter(raw, _cadenceWindow);
QSet<int>::const_iterator it;
for (it = stop.constBegin(); it != stop.constEnd(); ++it)
@ -239,7 +243,7 @@ Graph Track::power() const
raw.append(GraphPoint(_distance.at(i), _time.at(i), p));
}
filtered = filter(raw, WINDOW_PF);
filtered = filter(raw, _powerWindow);
QSet<int>::const_iterator it;
for (it = stop.constBegin(); it != stop.constEnd(); ++it)

View File

@ -33,6 +33,16 @@ public:
bool isNull() const {return (_data.size() < 2);}
static void setElevationFilter(int window) {_elevationWindow = window;}
static void setSpeedFilter(int window) {_speedWindow = window;}
static void setHeartRateFilter(int window) {_heartRateWindow = window;}
static void setCadenceFilter(int window) {_cadenceWindow = window;}
static void setPowerFilter(int window) {_powerWindow = window;}
static void setPauseSpeed(qreal speed) {_pauseSpeed = speed;}
static void setPauseInterval(int interval) {_pauseInterval = interval;}
static void setOutlierElimination(bool eliminate)
{_outlierEliminate = eliminate;}
private:
bool discardStopPoint(int i) const;
@ -46,6 +56,17 @@ private:
QSet<int> _stop;
qreal _pause;
static bool _outlierEliminate;
static int _elevationWindow;
static int _speedWindow;
static int _heartRateWindow;
static int _cadenceWindow;
static int _powerWindow;
static qreal _pauseSpeed;
static int _pauseInterval;
};
#endif // TRACK_H

View File

@ -1,93 +1,256 @@
/*
* Based on libgeotrans with the following Source Code Disclaimer:
1. The GEOTRANS source code ("the software") is provided free of charge by
the National Imagery and Mapping Agency (NIMA) of the United States
Department of Defense. Although NIMA makes no copyright claim under Title 17
U.S.C., NIMA claims copyrights in the source code under other legal regimes.
NIMA hereby grants to each user of the software a license to use and
distribute the software, and develop derivative works.
2. Warranty Disclaimer: The software was developed to meet only the internal
requirements of the U.S. National Imagery and Mapping Agency. The software
is provided "as is," and no warranty, express or implied, including but not
limited to the implied warranties of merchantability and fitness for
particular purpose or arising by statute or otherwise in law or from a
course of dealing or usage in trade, is made by NIMA as to the accuracy and
functioning of the software.
3. NIMA and its personnel are not required to provide technical support or
general assistance with respect to the software.
4. Neither NIMA nor its personnel will be liable for any claims, losses, or
damages arising from or connected with the use of the software. The user
agrees to hold harmless the United States National Imagery and Mapping
Agency. The user's sole and exclusive remedy is to stop using the software.
5. NIMA requests that products developed using the software credit the
source of the software with the following statement, "The product was
developed using GEOTRANS, a product of the National Imagery and Mapping
Agency and U.S. Army Engineering Research and Development Center."
6. For any products developed using the software, NIMA requires a disclaimer
that use of the software does not indicate endorsement or approval of the
product by the Secretary of Defense or the National Imagery and Mapping
Agency. Pursuant to the United States Code, 10 U.S.C. Sec. 2797, the name of
the National Imagery and Mapping Agency, the initials "NIMA", the seal of
the National Imagery and Mapping Agency, or any colorable imitation thereof
shall not be used to imply approval, endorsement, or authorization of a
product without prior written permission from United States Secretary of
Defense.
*/
#include <cmath>
#include "rd.h"
#include "ellipsoid.h"
#include "transversemercator.h"
#define SPHSN(lat) \
((double)(_e.radius() / sqrt(1.e0 - _es * pow(sin(lat), 2))))
#define SPHTMD(lat) \
((double)(_ap * lat - _bp * sin(2.e0 * lat) + _cp * sin(4.e0 * lat) \
- _dp * sin(6.e0 * lat) + _ep * sin(8.e0 * lat)))
#define DENOM(lat) \
((double)(sqrt(1.e0 - _es * pow(sin(lat),2))))
#define SPHSR(lat) \
((double)(_e.radius() * (1.e0 - _es) / pow(DENOM(lat), 3)))
TransverseMercator::TransverseMercator(const Ellipsoid &ellipsoid,
double centralMeridian, double scale, double falseEasting,
double falseNorthing)
double latitudeOrigin, double longitudeOrigin, double scale,
double falseEasting, double falseNorthing)
{
_centralMeridian = centralMeridian;
double tn, tn2, tn3, tn4, tn5;
double b;
_e = ellipsoid;
_longitudeOrigin = deg2rad(longitudeOrigin);
_latitudeOrigin = deg2rad(latitudeOrigin);
_scale = scale;
_falseEasting = falseEasting;
_falseNorthing = falseNorthing;
_es = 2 * _e.flattening() - _e.flattening() * _e.flattening();
_ebs = (1 / (1 - _es)) - 1;
const double e2 = ellipsoid.flattening() * (2 - ellipsoid.flattening());
const double n = ellipsoid.flattening() / (2 - ellipsoid.flattening());
_rectifyingRadius = ellipsoid.radius() / (1 + n)
* (1 + 0.25*pow(n, 2) + 0.015625*pow(n, 4));
b = _e.radius() * (1 - _e.flattening());
_A = e2;
_B = (5 * pow(e2, 2) - pow(e2, 3)) / 6.0;
_C = (104 * pow(e2, 3) - 45 * pow(e2, 4)) / 120.0;
_D = (1237 * pow(e2, 4)) / 1260.0;
tn = (_e.radius() - b) / (_e.radius() + b);
tn2 = tn * tn;
tn3 = tn2 * tn;
tn4 = tn3 * tn;
tn5 = tn4 * tn;
_beta1 = 1/2.0 * n - 2/3.0 * pow(n, 2) + 5/16.0 * pow(n, 3) + 41/180.0
* pow(n, 4);
_beta2 = 13/48.0 * pow(n, 2) - 3/5.0 * pow(n, 3) + 557/1440.0 * pow(n, 4);
_beta3 = 61/240.0 * pow(n, 3) - 103/140.0 * pow(n, 4);
_beta4 = 49561/161280.0 * pow(n, 4);
_delta1 = 1/2.0 * n - 2/3.0 * pow(n, 2) + 37/96.0 * pow(n, 3) - 1/360.0
* pow(n, 4);
_delta2 = 1/48.0 * pow(n, 2) + 1/15.0 * pow(n, 3) - 437/1440.0 * pow(n, 4);
_delta3 = 17/480.0 * pow(n, 3) - 37/840.0 * pow(n, 4);
_delta4 = 4397/161280.0 * pow(n, 4);
_AStar = e2 + pow(e2, 2) + pow(e2, 3) + pow(e2, 4);
_BStar = (7 * pow(e2, 2) + 17 * pow(e2, 3) + 30 * pow(e2, 4)) / -6;
_CStar = (224 * pow(e2, 3) + 889 * pow(e2, 4)) / 120;
_DStar = (4279 * pow(e2, 4)) / -1260;
_ap = _e.radius() * (1.e0 - tn + 5.e0 * (tn2 - tn3) / 4.e0 + 81.e0
* (tn4 - tn5) / 64.e0);
_bp = 3.e0 * _e.radius() * (tn - tn2 + 7.e0 * (tn3 - tn4) / 8.e0 + 55.e0
* tn5 / 64.e0 ) / 2.e0;
_cp = 15.e0 * _e.radius() * (tn2 - tn3 + 3.e0 * (tn4 - tn5 ) / 4.e0) / 16.0;
_dp = 35.e0 * _e.radius() * (tn3 - tn4 + 11.e0 * tn5 / 16.e0) / 48.e0;
_ep = 315.e0 * _e.radius() * (tn4 - tn5) / 512.e0;
}
QPointF TransverseMercator::ll2xy(const Coordinates &c) const
{
QPointF p;
double rl;
double cl, c2, c3, c5, c7;
double dlam;
double eta, eta2, eta3, eta4;
double sl, sn;
double t, tan2, tan3, tan4, tan5, tan6;
double t1, t2, t3, t4, t5, t6, t7, t8, t9;
double tmd, tmdo;
double x, y;
double phi = deg2rad(c.lat());
double lambda = deg2rad(c.lon());
double lambda0 = deg2rad(_centralMeridian);
double deltaLambda = lambda - lambda0;
dlam = deg2rad(c.lon()) - _longitudeOrigin;
double phiStar = phi - sin(phi) * cos(phi) * (_A + _B*pow(sin(phi), 2)
+ _C*pow(sin(phi), 4) + _D*pow(sin(phi), 6));
if (dlam > M_PI)
dlam -= (2 * M_PI);
if (dlam < -M_PI)
dlam += (2 * M_PI);
if (fabs(dlam) < 2.e-10)
dlam = 0.0;
double xiPrim = atan(tan(phiStar) / cos(deltaLambda));
double etaPrim = atanh(cos(phiStar) * sin(deltaLambda));
rl = deg2rad(c.lat());
sl = sin(rl);
cl = cos(rl);
c2 = cl * cl;
c3 = c2 * cl;
c5 = c3 * c2;
c7 = c5 * c2;
t = sl / cl;
tan2 = t * t;
tan3 = tan2 * t;
tan4 = tan3 * t;
tan5 = tan4 * t;
tan6 = tan5 * t;
eta = _ebs * c2;
eta2 = eta * eta;
eta3 = eta2 * eta;
eta4 = eta3 * eta;
p.ry() = _falseNorthing + _scale * _rectifyingRadius * (xiPrim + _beta1
* sin(2*xiPrim) * cosh(2*etaPrim) + _beta2 * sin(4*xiPrim)
* cosh(4*etaPrim) + _beta3 * sin(6*xiPrim) * cosh(6*etaPrim) + _beta4
* sin(8*xiPrim) * cosh(8*etaPrim));
p.rx() = _falseEasting + _scale * _rectifyingRadius * (etaPrim + _beta1
* cos(2*xiPrim) * sinh(2*etaPrim) + _beta2 * cos(4*xiPrim)
* sinh(4*etaPrim) + _beta3 * cos(6*xiPrim) * sinh(6*etaPrim) + _beta4
* cos(8*xiPrim) * sinh(8*etaPrim));
sn = SPHSN(rl);
tmd = SPHTMD(rl);
tmdo = SPHTMD (_latitudeOrigin);
return p;
t1 = (tmd - tmdo) * _scale;
t2 = sn * sl * cl * _scale / 2.e0;
t3 = sn * sl * c3 * _scale * (5.e0 - tan2 + 9.e0 * eta + 4.e0 * eta2)
/ 24.e0;
t4 = sn * sl * c5 * _scale * (61.e0 - 58.e0 * tan2 + tan4 + 270.e0 * eta
- 330.e0 * tan2 * eta + 445.e0 * eta2 + 324.e0 * eta3 - 680.e0 * tan2
* eta2 + 88.e0 * eta4 - 600.e0 * tan2 * eta3 - 192.e0 * tan2 * eta4)
/ 720.e0;
t5 = sn * sl * c7 * _scale * (1385.e0 - 3111.e0 * tan2 + 543.e0 * tan4
- tan6) / 40320.e0;
y = _falseNorthing + t1 + pow(dlam, 2.e0) * t2 + pow(dlam, 4.e0) * t3
+ pow(dlam, 6.e0) * t4 + pow(dlam, 8.e0) * t5;
t6 = sn * cl * _scale;
t7 = sn * c3 * _scale * (1.e0 - tan2 + eta) /6.e0;
t8 = sn * c5 * _scale * (5.e0 - 18.e0 * tan2 + tan4 + 14.e0 * eta - 58.e0
* tan2 * eta + 13.e0 * eta2 + 4.e0 * eta3 - 64.e0 * tan2 * eta2 - 24.e0
* tan2 * eta3) / 120.e0;
t9 = sn * c7 * _scale * (61.e0 - 479.e0 * tan2 + 179.e0 * tan4 - tan6)
/ 5040.e0;
x = _falseEasting + dlam * t6 + pow(dlam, 3.e0) * t7 + pow(dlam, 5.e0)
* t8 + pow(dlam, 7.e0) * t9;
return QPointF(x, y);
}
Coordinates TransverseMercator::xy2ll(const QPointF &p) const
{
double xi = (p.y() - _falseNorthing) / (_scale * _rectifyingRadius);
double eta = (p.x() - _falseEasting) / (_scale * _rectifyingRadius);
double cl;
double de;
double dlam;
double eta, eta2, eta3, eta4;
double ftphi;
double sn;
double sr;
double t, tan2, tan4;
double t10, t11, t12, t13, t14, t15, t16, t17;
double tmd, tmdo;
double lat, lon;
double xiPrim = xi - _delta1 * sin(2*xi) * cosh(2*eta) - _delta2 * sin(4*xi)
* cosh(4*eta) - _delta3 * sin(6*xi) * cosh(6*eta) - _delta4 * sin(8*xi)
* cosh(8*eta);
double etaPrim = eta - _delta1 * cos(2*xi) * sinh(2*eta) - _delta2
* cos(4*xi) * sinh(4*eta) - _delta3 * cos(6*xi) * sinh(6*eta) - _delta4
* cos(8*xi) * sinh(8*eta);
double phiStar = asin(sin(xiPrim) / cosh(etaPrim));
double deltaLambda = atan(sinh(etaPrim) / cos(xiPrim));
tmdo = SPHTMD(_latitudeOrigin);
tmd = tmdo + (p.y() - _falseNorthing) / _scale;
double phi = phiStar + sin(phiStar) * cos(phiStar) * (_AStar + _BStar
* pow(sin(phiStar), 2) + _CStar * pow(sin(phiStar), 4) + _DStar
* pow(sin(phiStar), 6));
sr = SPHSR(0.e0);
ftphi = tmd / sr;
return Coordinates(_centralMeridian + rad2deg(deltaLambda), rad2deg(phi));
for (int i = 0; i < 5 ; i++) {
t10 = SPHTMD(ftphi);
sr = SPHSR(ftphi);
ftphi = ftphi + (tmd - t10) / sr;
}
sr = SPHSR(ftphi);
sn = SPHSN(ftphi);
cl = cos(ftphi);
t = tan(ftphi);
tan2 = t * t;
tan4 = tan2 * tan2;
eta = _ebs * pow(cl, 2);
eta2 = eta * eta;
eta3 = eta2 * eta;
eta4 = eta3 * eta;
de = p.x() - _falseEasting;
if (fabs(de) < 0.0001)
de = 0.0;
t10 = t / (2.e0 * sr * sn * pow(_scale, 2));
t11 = t * (5.e0 + 3.e0 * tan2 + eta - 4.e0 * pow(eta, 2) - 9.e0 * tan2
* eta) / (24.e0 * sr * pow(sn, 3) * pow(_scale, 4));
t12 = t * (61.e0 + 90.e0 * tan2 + 46.e0 * eta + 45.E0 * tan4 - 252.e0 * tan2
* eta - 3.e0 * eta2 + 100.e0 * eta3 - 66.e0 * tan2 * eta2 - 90.e0 * tan4
* eta + 88.e0 * eta4 + 225.e0 * tan4 * eta2 + 84.e0 * tan2 * eta3 - 192.e0
* tan2 * eta4) / (720.e0 * sr * pow(sn, 5) * pow(_scale, 6));
t13 = t * (1385.e0 + 3633.e0 * tan2 + 4095.e0 * tan4 + 1575.e0 * pow(t,6))
/ (40320.e0 * sr * pow(sn, 7) * pow(_scale, 8));
lat = ftphi - pow(de, 2) * t10 + pow(de, 4) * t11 - pow(de, 6) * t12
+ pow(de, 8) * t13;
t14 = 1.e0 / (sn * cl * _scale);
t15 = (1.e0 + 2.e0 * tan2 + eta) / (6.e0 * pow(sn, 3) * cl * pow(_scale, 3));
t16 = (5.e0 + 6.e0 * eta + 28.e0 * tan2 - 3.e0 * eta2 + 8.e0 * tan2 * eta
+ 24.e0 * tan4 - 4.e0 * eta3 + 4.e0 * tan2 * eta2 + 24.e0 * tan2 * eta3)
/ (120.e0 * pow(sn, 5) * cl * pow(_scale, 5));
t17 = (61.e0 + 662.e0 * tan2 + 1320.e0 * tan4 + 720.e0 * pow(t,6))
/ (5040.e0 * pow(sn, 7) * cl * pow(_scale, 7));
dlam = de * t14 - pow(de, 3) * t15 + pow(de, 5) * t16 - pow(de, 7) * t17;
lon = _longitudeOrigin + dlam;
while (lat > deg2rad(90.0)) {
lat = M_PI - lat;
lon += M_PI;
if (lon > M_PI)
lon -= (2 * M_PI);
}
while (lat < deg2rad(-90.0)) {
lat = - (lat + M_PI);
lon += M_PI;
if (lon > M_PI)
lon -= (2 * M_PI);
}
if (lon > (2 * M_PI))
lon -= (2 * M_PI);
if (lon < -M_PI)
lon += (2 * M_PI);
return Coordinates(rad2deg(lon), rad2deg(lat));
}

View File

@ -2,29 +2,29 @@
#define TRANSVERSEMERCATOR_H
#include "projection.h"
class Ellipsoid;
#include "ellipsoid.h"
class TransverseMercator : public Projection
{
public:
TransverseMercator(const Ellipsoid &ellipsoid, double centralMeridian,
double scale, double falseEasting, double falseNorthing);
TransverseMercator(const Ellipsoid &ellipsoid, double latitudeOrigin,
double longitudeOrigin, double scale, double falseEasting,
double falseNorthing);
virtual QPointF ll2xy(const Coordinates &c) const;
virtual Coordinates xy2ll(const QPointF &p) const;
private:
double _centralMeridian;
Ellipsoid _e;
double _longitudeOrigin;
double _latitudeOrigin;
double _scale;
double _falseEasting;
double _falseNorthing;
double _rectifyingRadius;
double _A, _B, _C, _D;
double _beta1, _beta2, _beta3, _beta4;
double _delta1, _delta2, _delta3, _delta4;
double _AStar, _BStar, _CStar, _DStar;
double _es;
double _ebs;
double _ap, _bp, _cp, _dp, _ep;
};
#endif // TRANSVERSEMERCATOR_H

View File

@ -2,13 +2,13 @@
#include "utm.h"
UTM::UTM(const Ellipsoid &ellipsoid, int zone)
: _tm(ellipsoid, (qAbs(zone) - 1)*6 - 180 + 3, 0.9996, 500000,
: _tm(ellipsoid, 0, (qAbs(zone) - 1)*6 - 180 + 3, 0.9996, 500000,
zone < 0 ? 10000000 : 0)
{
}
UTM::UTM(const Ellipsoid &ellipsoid, const Coordinates &c)
: _tm(ellipsoid, 0, 0, 0, 0)
: _tm(ellipsoid, 0, 0, 0, 0, 0)
{
int zone = int((c.lon() + 180)/6) + 1;
@ -26,6 +26,6 @@ UTM::UTM(const Ellipsoid &ellipsoid, const Coordinates &c)
}
double cm = (zone - 1)*6 - 180 + 3;
_tm = TransverseMercator(ellipsoid, cm, 0.9996, 500000,
_tm = TransverseMercator(ellipsoid, 0, cm, 0.9996, 500000,
(c.lat() < 0) ? 10000000 : 0);
}

View File

@ -3,7 +3,6 @@
#include "config.h"
#include "format.h"
#include "tooltip.h"
#include "map.h"
#include "waypointitem.h"
@ -46,11 +45,6 @@ WaypointItem::WaypointItem(const Waypoint &waypoint, Map *map,
setAcceptHoverEvents(true);
}
void WaypointItem::setMap(Map *map)
{
setPos(map->ll2xy(_waypoint.coordinates()));
}
void WaypointItem::updateShape()
{
QPainterPath p;
@ -106,14 +100,6 @@ void WaypointItem::paint(QPainter *painter,
*/
}
/*
void WaypointItem::setScale(qreal scale)
{
QPointF p = _map->ll2xy(_waypoint.coordinates());
setPos(QPointF(p.x(), -p.y()) * scale);
}
*/
void WaypointItem::setUnits(enum Units units)
{
setToolTip(toolTip(units));

View File

@ -1,11 +1,11 @@
#ifndef WAYPOINTITEM_H
#define WAYPOINTITEM_H
#include <cmath>
#include <QGraphicsItem>
#include "waypoint.h"
#include "units.h"
class Map;
#include "map.h"
class WaypointItem : public QGraphicsItem
{
@ -14,9 +14,10 @@ public:
const Waypoint &waypoint() const {return _waypoint;}
void setMap(Map *map);
void setMap(Map *map) {setPos(map->ll2xy(_waypoint.coordinates()));}
void setUnits(Units units);
void showLabel(bool show);
void setDigitalZoom(int zoom) {setScale(pow(2, -zoom));}
QPainterPath shape() const {return _shape;}
QRectF boundingRect() const {return _shape.boundingRect();}