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

Compare commits

...

228 Commits
5.0 ... 5.13

Author SHA1 Message Date
2c816a509b Refactoring 2018-05-29 21:54:25 +02:00
58e752a022 Added missing coordinate system 2018-05-29 00:37:04 +02:00
7d412a274d Added support for Krovak projection 2018-05-29 00:17:20 +02:00
6bee2a46f1 Version++ 2018-05-28 22:37:35 +02:00
eeab6a399e Fixed broken map formats list 2018-05-28 22:30:13 +02:00
9e04bf0fa7 Update gpxsee_sv.ts (#119)
new string translated
2018-05-26 11:42:06 +02:00
2842c6c125 Added Garmin JNX support info 2018-05-25 19:42:22 +02:00
bafd0b6af2 Translations update (#118) 2018-05-25 17:16:04 +02:00
eb89ef2f2b Refactoring 2018-05-24 23:19:30 +02:00
f9822b7c78 Translations update 2018-05-24 22:47:28 +02:00
e4feeae064 Improved error handling + code cleanup 2018-05-24 22:11:00 +02:00
31ff81576c Removed asserts from release code 2018-05-24 00:36:27 +02:00
0d879e61a9 Added support for Garmin JNX maps 2018-05-22 22:40:15 +02:00
ba7074f902 Version++ 2018-05-20 21:47:29 +02:00
f371500570 Fixed graph resize glitches 2018-05-20 19:38:01 +02:00
7324535bfc Some more code cleanup 2018-05-19 22:36:11 +02:00
59c95e53c4 Precompute some more constants 2018-05-19 20:55:43 +02:00
a66ca7b3a8 Includes cleanup 2018-05-19 20:32:00 +02:00
273a918ed9 Precache font related info 2018-05-19 20:30:29 +02:00
7198d610c5 Code cleanup 2018-05-18 22:22:36 +02:00
a6389f0174 Precompute e2s as well 2018-05-18 22:10:43 +02:00
d9c922aa47 Do not cache the grid, drawing it is faster 2018-05-18 20:11:41 +02:00
0156d2fbc0 Precompute all compute-intensive stuff 2018-05-18 20:08:52 +02:00
650eb1c302 Optimization/code cleanup 2018-05-18 01:38:33 +02:00
33919c501c Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-05-18 00:22:35 +02:00
be9da5aabe Some more naming unification 2018-05-18 00:21:59 +02:00
f341219613 Update gpxsee_sv.ts (#115) 2018-05-18 00:00:08 +02:00
a486f9e78d Datum shift optimization (precompute ellipsoid constants)
+ projections code unification
2018-05-17 22:41:56 +02:00
b3940283a8 Update Polish translation file. (#114) 2018-05-16 22:08:21 +02:00
74aebce357 Code cleanup 2018-05-16 22:01:21 +02:00
0cd6a82a0f Added support for Garmin route extension
Resolves #112
2018-05-16 21:53:06 +02:00
81a5c712c6 Projection error handling cleanup 2018-05-16 18:52:48 +02:00
025a403c73 PI defines cleanup 2018-05-15 21:51:56 +02:00
a762445bce Version++ 2018-05-14 22:19:59 +02:00
e1a87c84f3 Only include oblique mercator PCSs that can be aproximated using LLC 2018-05-14 22:14:09 +02:00
5f47383648 Updated PCS list 2018-05-14 00:37:19 +02:00
7a702be012 Allow entries with equal timestamp as some Garmin devices do produce them 2018-05-13 21:14:48 +02:00
abfb0c637a 9804 was correct... 2018-05-13 08:52:20 +02:00
c9cedebeb0 Use the propper mercator projection EPSG code number 2018-05-13 01:16:10 +02:00
be1c7fa4c2 Added support for Mercator projection (the real one) 2018-05-13 00:40:03 +02:00
2b421f3b63 Properly name the web mercator projection 2018-05-12 22:38:42 +02:00
80f13d7057 Fixed LCC2 GeoTIFFs loading 2018-05-12 21:45:58 +02:00
ab05014896 Added all remaining EPSG 9603 GCSs 2018-05-12 17:11:33 +02:00
c8433f7b55 Added EPSG 9606 and 9607 datums to the gcs.csv file
(gcs file format change)
2018-05-12 14:48:21 +02:00
bb52003743 Includes cleanup 2018-05-12 13:18:49 +02:00
22ea1b0bca Cosmetics 2018-05-12 13:13:35 +02:00
adb407dcf5 Translations update 2018-05-12 12:15:21 +02:00
3b0a4a30bb Use precise arc second to radian transformation constants 2018-05-11 20:06:16 +02:00
792ec17a20 Added support for EPSG:9606 and EPSG:9607 datum transformations 2018-05-11 19:54:12 +02:00
bd6c6ef344 Simplified zoom key bindings
Closes #99
2018-05-09 18:18:58 +02:00
dfb48d17bf Ignore missing namespace declarations
Fixes #110
2018-05-08 22:09:39 +02:00
362d065020 Added EST97 PCS 2018-05-05 18:18:54 +02:00
b0f4f2294a Fixed the instant-resize-after-first-load issue 2018-05-04 19:36:37 +02:00
4463241e50 Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-05-03 19:12:22 +02:00
abc987cb0c Code cleanup 2018-05-03 19:11:55 +02:00
81f0c40bec Translations update (#109) 2018-05-02 23:29:25 +02:00
cf81e42f52 Remaining qreal/double separation
+ some minor TrekBuddy atlas issues fixes
2018-05-02 21:25:14 +02:00
1aedc1de93 Fixed scale info when printing/exporting with digital zoom 2018-04-28 22:34:37 +02:00
beb966c58f Fixed broken returning from print mode 2018-04-28 22:18:11 +02:00
9eb2e38499 Includes cleanup 2018-04-28 19:08:21 +02:00
247eef5261 Added download retries in case of connection timeout 2018-04-28 19:07:52 +02:00
9c125a0583 Cosmetics 2018-04-28 16:14:03 +02:00
bcff05c37c Code cleanup 2018-04-28 16:07:32 +02:00
266a1d037e Code cleanup 2018-04-27 23:08:44 +02:00
2b0989438a Version++ 2018-04-27 21:16:11 +02:00
f8c92cf036 Enable authorization for OSM type maps 2018-04-27 21:13:10 +02:00
2fb9a59bf0 A little bit more sane PDF resolutions 2018-04-27 19:37:15 +02:00
566f3185f9 Separated map downloaders, added configurable connection timeouts 2018-04-27 19:31:27 +02:00
62962b5de2 Added new Polish comment entry (#105) 2018-04-23 07:41:56 +02:00
cb09ea0681 Version++ 2018-04-19 19:50:04 +02:00
e5d566807a Fixed HTTP redirects (+addded support for relative URLs)
Fixes #104
2018-04-19 19:46:56 +02:00
0ce2cfd13c Update gpxsee_sv.ts (#102)
* Update gpxsee_sv.ts

* Fixed typo

Sorry! I edited online, on a borrowed windows machine.  :(
2018-04-18 22:03:26 +02:00
e1532b978f The true cause of the map switch offset... 2018-04-18 22:02:24 +02:00
bb10f7c0e1 Version++ 2018-04-17 22:54:42 +02:00
8ff21b5b37 Added the Polish translation into the builds 2018-04-17 22:52:47 +02:00
32f41e5287 Added new PL (Polish) translation file. (#103) 2018-04-17 22:40:12 +02:00
c50e41dea1 Numerical instability fix 2018-04-17 22:26:20 +02:00
e34800b8d1 Updated description (added OziExplorer files) 2018-04-17 21:27:03 +02:00
6642a2f810 Updated USGS maps URLs 2018-04-17 21:25:47 +02:00
55458b04a6 Fixed 1px map change offset & invalid zoom level 2018-04-17 21:24:46 +02:00
9e36451001 RectC now uses the expected axis direction
+ some more refactoring
2018-04-16 20:26:10 +02:00
b26a10a5b3 Added missing initialization 2018-04-16 19:14:27 +02:00
4530ec1354 Code cleanup 2018-04-15 17:32:25 +02:00
f2b72ec1b5 Fixed GeoTIFF on platforms where qreal != double 2018-04-15 16:27:47 +02:00
4b776c8cc1 Replaced remaining qreals in Coordinates logic 2018-04-15 10:42:06 +02:00
d31bf80885 Merget the OziExplorer parsers to a single source file 2018-04-15 10:08:50 +02:00
f77497c93e Translations update 2018-04-15 09:50:20 +02:00
c6ddee8682 Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-04-14 23:35:09 +02:00
0d6bc05818 Added missing GPX icon to OS X bundle copy 2018-04-14 23:33:59 +02:00
fdecbc6cee Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-04-14 22:56:37 +02:00
cad17fb5d3 appdata.xml description update 2018-04-14 22:55:58 +02:00
ced1244cbd Translations update (#100) 2018-04-14 22:34:41 +02:00
3dd22eb2ba Version++ 2018-04-14 21:26:13 +02:00
b12e83043d Updated icns files 2018-04-14 21:21:58 +02:00
6416c81232 Removed debug comment 2018-04-14 20:55:39 +02:00
e5db00a4f4 Added missing density setting 2018-04-14 20:54:18 +02:00
6266d71463 Added icns generation script 2018-04-14 20:30:44 +02:00
daf0cf6f9d Updated forgotten TCX icon 2018-04-14 17:41:20 +02:00
d6b810b6ef Updated icns icons 2018-04-14 17:31:39 +02:00
8f20080a36 Adjusted the SVG template to workaround broken rsvg vertical centering 2018-04-14 17:17:17 +02:00
e112363424 Fixed icon order 2018-04-14 15:10:27 +02:00
a277d0ad4f Added OziExplorer data formats icons & association 2018-04-14 14:04:19 +02:00
d4cd542a20 Grouped OziExplorer files to a single selection 2018-04-14 08:53:37 +02:00
5eaf0455aa Fixed empty CSV fields handling 2018-04-14 00:45:03 +02:00
3f71775101 Fixed broken radius-rect computation
Always use the double type for coordinate related data
2018-04-13 21:14:12 +02:00
f8009b0151 Added support for OziExplorer data files 2018-04-13 20:54:38 +02:00
f64e88290d Update README.md 2018-04-08 21:21:04 +02:00
b4cf614f77 Added missing "other sample dimensions" support for WMS 2018-04-08 19:13:16 +02:00
ca710b6a22 Fixed typo in german ts file
ts files update
2018-04-08 18:50:34 +02:00
c894e75c17 Adjusted stuff to comply with the new map version 1 xsd 2018-04-08 17:48:13 +02:00
259a15332e Fixed QT4 build 2018-04-07 23:04:26 +02:00
c4915891e7 Code cleanup 2018-04-07 18:42:25 +02:00
c5256b25e9 Added missing namespace 2018-04-05 21:13:48 +02:00
81b3a517f8 Use the correct axis order defaults for WMS/WMTS maps 2018-04-05 20:38:23 +02:00
3aa1ab4b4c Set a less restrictive lower bound for WMS scale denominators 2018-04-03 23:14:47 +02:00
d4fb8ed9c9 Fixed error reporting 2018-04-03 23:05:17 +02:00
fb16c3f2db Fixed tile cache reload logic 2018-04-03 22:36:08 +02:00
4096d87a6a Improved default WMS/WMTS style handling 2018-04-03 22:35:13 +02:00
68eac5b8cc Yet another WMS corner case handling fix 2018-04-03 01:14:58 +02:00
88d6904ded Yet another WMS bounding box computation fix 2018-04-03 00:08:01 +02:00
021558b114 Fixed QT4 build 2018-04-02 23:33:10 +02:00
b8815ca9f5 Fixed layer bounding box & scale denominator range joining 2018-04-02 23:27:42 +02:00
e845e216bd Added support for WMS multi-layer maps 2018-04-02 19:59:52 +02:00
60cc869ade The "default" style does not to be set wxplicitly 2018-04-02 18:30:57 +02:00
e3e8fdbacf Fixed WMS 1.1.x support
Added support for HTTP basic authorization
2018-04-01 20:01:25 +02:00
16f2d7ad34 Added support for WMS 1.1.x versions 2018-03-31 11:27:01 +02:00
aecda0e517 Version++ 2018-03-30 10:48:57 +02:00
bf3589812a Initial WMS support (no multi-layer support for now) 2018-03-30 10:25:05 +02:00
8821536419 Fixed most clazy warnings 2018-03-29 00:29:08 +02:00
bda24d9091 Use $HOME as the default open directory (on all platforms) 2018-03-28 02:01:27 +02:00
820e614921 Fixed broken data size copy 2018-03-26 01:02:31 +02:00
35703e3363 Refactoring 2018-03-22 20:00:30 +01:00
a54821863f Includes cleanup 2018-03-21 19:23:17 +01:00
5bc3b2ad05 Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-03-21 19:10:42 +01:00
992fd2c5cd Code cleanup 2018-03-21 19:09:37 +01:00
4b4a1902ef Indent cleanup 2018-03-21 18:52:57 +01:00
7d3bc2112a Update gpxsee.desktop (#85)
Add Swedish translation
2018-03-20 21:29:45 +01:00
4ea2f0752a Do not display negative zeros.
Fixes #86
2018-03-20 21:17:20 +01:00
0bb3b3812c Fixed broken release builds 2018-03-19 22:40:49 +01:00
b23639bef2 Version++ 2018-03-19 20:11:12 +01:00
2d8bf2dbb9 Added missing Swiss grid map file support 2018-03-19 19:56:31 +01:00
29efa84075 Do not depend on the initializing ellipsoid 2018-03-19 19:13:48 +01:00
3d06fe8831 Also clear the error URLs when clearing the tile cache.
Code cleanup.
2018-03-15 18:46:34 +01:00
fe1f6c80b4 Use the correct units for azimuths 2018-03-15 00:27:44 +01:00
35d1e69d7f Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-03-14 07:25:28 +01:00
3043128565 Added finite HTTP response timeout 2018-03-14 07:23:07 +01:00
e56a9e33f3 Added ETRS-TM35FIN (#82) 2018-03-13 09:17:59 +01:00
07aca435d8 Update gpxsee_sv.ts (#81)
Latest strings translated
2018-03-12 20:54:10 +01:00
4e4a3d042a Translations update (#80) 2018-03-12 20:53:15 +01:00
bf5ae22f0d Handle the WGS84 ellipsoid only definitions like the GRS80 ellipsoid only definitions 2018-03-12 20:05:53 +01:00
309fdb675c Removed unused definitions 2018-03-11 20:53:16 +01:00
e0daf367fb Added support for WGS84 GeoTIFF images with the GCS defined using the ellipsoid only 2018-03-11 20:11:42 +01:00
32d8672698 REST variables (dimensions) are apparently case-insensitive 2018-03-11 19:23:40 +01:00
0ef89e200d Translations update 2018-03-11 16:28:30 +01:00
6d6c232dba Version++ 2018-03-11 10:49:02 +01:00
8132ff722d Added support for WMTS dimensions 2018-03-11 10:31:41 +01:00
49792064d7 Fixed error handling 2018-03-11 09:24:04 +01:00
7aef81d823 Added support for EPSG 21781 PCS (Swiss grid)
Fixed swapped LCC1 and LCC2 GeoTIFF coordinate transformation codes
2018-03-11 01:10:24 +01:00
1d3d1aa5b7 Fixed broken zoom rectangle computation 2018-03-10 21:04:14 +01:00
bcd14726f3 Added pace info 2018-03-10 20:25:13 +01:00
fd15799114 Includes cleanup 2018-03-10 09:25:52 +01:00
a8bc2ae4c4 Fixed wrong data type 2018-03-10 08:40:55 +01:00
67aba4703b Some more code cleanup 2018-03-09 23:24:08 +01:00
a64e5e13c3 Remove the 1px offset workaround as it does not work properly anyway... 2018-03-09 21:53:06 +01:00
60fcff7658 Code cleanup 2018-03-09 18:57:23 +01:00
bc881836ac Improved map index caching 2018-03-09 18:56:54 +01:00
de05f5e64b Some more offline map code cleanup 2018-03-08 19:08:39 +01:00
16476dbf74 Offline map code cleanup/refactoring 2018-03-08 02:24:10 +01:00
a21464d98d Added missing virtual destructors 2018-03-08 00:57:09 +01:00
d6746bc444 Code cleanup 2018-03-06 19:28:07 +01:00
e4d8af2040 Update README.md 2018-03-01 20:30:02 +01:00
b40e0d3bbf Fixed accessing of un-initialized variable 2018-03-01 19:06:55 +01:00
9300d671a1 Fixed invalid memory access 2018-03-01 19:06:34 +01:00
b9ed0c3933 Improved scale computation on offline & WMTS maps 2018-02-28 22:19:46 +01:00
46cefada94 Code cleanup 2018-02-27 21:50:29 +01:00
e1e49b32e6 Added some more map definition checking 2018-02-27 01:02:22 +01:00
fa99d01a77 Extended error checking 2018-02-26 22:35:58 +01:00
688e309ef7 Update gpxsee_sv.ts (#79)
Change shortcut letter for "Data"
2018-02-26 19:22:34 +01:00
ae4723acb1 Added GCS 4178 and related PCSs 2018-02-26 19:21:00 +01:00
8c6f70d837 Code cleanup 2018-02-26 19:13:57 +01:00
d1b0e2ef73 Improved error reporting 2018-02-26 19:05:53 +01:00
962310df7d Fixed single point zoom fit on WMTS maps 2018-02-25 19:33:12 +01:00
f8c031e931 Translation update/cleanup 2018-02-25 09:31:19 +01:00
8022a9efbe Update gpxsee_sv.ts (#78) 2018-02-25 09:18:10 +01:00
fbab4b0097 Made the axis order an attribute of the set rather than a separate element 2018-02-25 08:58:40 +01:00
5e5ff6d96f Added support for REST WMTS maps 2018-02-25 02:31:01 +01:00
55e967673c Use image/png as the default image format 2018-02-24 22:31:37 +01:00
757ba6a566 Fixed QT4 build 2018-02-24 16:48:38 +01:00
ee80260e46 Improved capabilities xml parsing
Improved bounds handling
2018-02-24 16:44:30 +01:00
fa3e6d8550 Added error checking 2018-02-24 11:40:54 +01:00
6e95d484cd Added support for OGC:CRS84 CRS to WMTS maps 2018-02-24 11:20:29 +01:00
376587202b Properly handling non-integer tile matrix ids 2018-02-24 10:34:27 +01:00
d11ffc9ea4 Added tile matrix set limits handling
Added axis order setting
2018-02-24 01:59:03 +01:00
bf6ebdc088 Translations update (#77) 2018-02-23 00:13:49 +01:00
619df591e2 Added support for geographic2d "projected" WMTS maps 2018-02-22 21:02:56 +01:00
10aa7d3945 Code cleanup 2018-02-22 18:12:47 +01:00
12319fd8fd Cleanup 2018-02-22 18:07:51 +01:00
ccb7336e3f Added menu accelerator keys 2018-02-22 08:18:10 +01:00
a7fea3878c Version++ 2018-02-22 00:56:49 +01:00
a6cf88aa92 Fixed visual artefacts on transparent tiles 2018-02-22 00:50:45 +01:00
b054cf9046 Using the correct projection for Lambert azimuthal equal area 2018-02-22 00:46:05 +01:00
9c5153f89a Fixed QT4 build 2018-02-21 00:13:11 +01:00
2ebcdeeeff Added ETRS89 data 2018-02-20 23:38:29 +01:00
1bc4833a81 Added initial WMTS support 2018-02-20 23:37:19 +01:00
3202fc4c15 Version++ 2018-02-17 14:23:00 +01:00
5852a9dc09 Removed copy&paste junk 2018-02-17 14:20:23 +01:00
c587d8cd9a Added AppData file 2018-02-17 14:18:40 +01:00
586f30a337 Improved time sequence checking 2018-02-17 13:40:25 +01:00
da06c032bc Added map copyrights info 2018-02-16 22:55:35 +01:00
3def9f95b0 Fixed broken GeoTIFF Mercator coordinates transformation 2018-02-16 19:37:04 +01:00
dc25290637 Added time missing sequence check 2018-02-15 23:03:20 +01:00
9fd5b1b80a Fixed broken map show setting
Code cleanup
2018-02-15 01:44:03 +01:00
94ee5b6e67 Fixed crash on tracks with less than window size points 2018-02-15 01:43:04 +01:00
9556476f1b Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-02-13 23:03:52 +01:00
b6e798f5c3 Removed debug stuff from release builds 2018-02-13 23:03:18 +01:00
e82f2a02c2 Updated Finnish translations (#67) 2018-02-12 23:24:16 +01:00
361ffacc35 Updated Russian translations (#65) 2018-02-12 23:23:38 +01:00
18fc6cc3e2 Fixed nmi conversion issues 2018-02-12 08:23:38 +01:00
9815f0bff2 Version++ 2018-02-12 07:46:20 +01:00
805cbe921c Updated Czech translations 2018-02-12 07:44:00 +01:00
d529055ea3 Update gpxsee_sv.ts (#64)
Latest strings translated
2018-02-12 07:37:58 +01:00
5d590b7c86 Fixed object init loop issue 2018-02-12 01:20:21 +01:00
1003c7b56f ts files update 2018-02-11 23:54:17 +01:00
820f967bd6 Added support for nautical units 2018-02-11 23:51:57 +01:00
27632bf07e Code cleanup 2018-02-11 20:49:26 +01:00
ee5b8fa333 Merge branch 'master' of https://github.com/tumic0/GPXSee 2018-02-11 20:41:21 +01:00
7e42b57d73 Added coordinates format settings
+ Fixed units settings issues
2018-02-11 20:39:39 +01:00
292fc9b433 Added GeoTIFF support info 2018-02-10 23:15:22 +01:00
202 changed files with 13762 additions and 6066 deletions

View File

@ -1,4 +1,4 @@
version: 5.0.{build}
version: 5.13.{build}
configuration: Release
platform: Any CPU
environment:

View File

@ -1,17 +1,17 @@
# GPXSee
GPXSee is a Qt-based GPS log file viewer and analyzer that supports GPX, TCX,
KML, FIT, IGC and NMEA files.
KML, FIT, IGC, NMEA and OziExplorer files.
## Features
* User-definable online maps.
* Offline maps (OziExplorer maps and TrekBuddy maps/atlases).
* User-definable online maps (OSM/Google tiles, WMTS, WMS).
* Offline maps (OziExplorer maps, TrekBuddy maps/atlases, Garmin JNX maps, GeoTIFF images).
* Elevation, speed, heart rate, cadence, power and temperature graphs.
* Support for multiple tracks in one view.
* Support for POI files.
* Print/export to PDF.
* Full-screen mode.
* Native GUI for Windows, Mac OS X and Linux.
* Opens GPX, TCX, FIT, KML, IGC, NMEA and Garmin CSV files.
* Opens GPX, TCX, FIT, KML, IGC, NMEA, OziExplorer (PLT, RTE, WPT) and Garmin CSV files.
![GPXSee - Linux](https://a.fsdn.com/con/app/proj/gpxsee/screenshots/linux2.png)

View File

@ -1,5 +1,5 @@
TARGET = GPXSee
VERSION = 5.0
VERSION = 5.13
QT += core \
gui \
network
@ -15,6 +15,7 @@ HEADERS += src/config.h \
src/common/rectc.h \
src/common/wgs84.h \
src/common/str2int.h \
src/common/rtree.h \
src/GUI/app.h \
src/GUI/icons.h \
src/GUI/gui.h \
@ -69,7 +70,7 @@ HEADERS += src/config.h \
src/map/projection.h \
src/map/ellipsoid.h \
src/map/datum.h \
src/map/mercator.h \
src/map/webmercator.h \
src/map/transversemercator.h \
src/map/latlon.h \
src/map/utm.h \
@ -92,6 +93,20 @@ HEADERS += src/config.h \
src/map/transform.h \
src/map/mapfile.h \
src/map/tifffile.h \
src/map/gcs.h \
src/map/angularunits.h \
src/map/primemeridian.h \
src/map/linearunits.h \
src/map/ct.h \
src/map/mapsource.h \
src/map/tileloader.h \
src/map/wmtsmap.h \
src/map/wmts.h \
src/map/wmsmap.h \
src/map/wms.h \
src/map/crs.h \
src/map/coordinatesystem.h \
src/map/pointd.h \
src/data/graph.h \
src/data/poi.h \
src/data/waypoint.h \
@ -103,7 +118,6 @@ HEADERS += src/config.h \
src/data/trackdata.h \
src/data/routedata.h \
src/data/path.h \
src/data/rtree.h \
src/data/gpxparser.h \
src/data/tcxparser.h \
src/data/csvparser.h \
@ -111,12 +125,12 @@ HEADERS += src/config.h \
src/data/fitparser.h \
src/data/igcparser.h \
src/data/nmeaparser.h \
src/map/gcs.h \
src/map/angularunits.h \
src/map/primemeridian.h \
src/map/linearunits.h \
src/map/ct.h \
src/map/mapsource.h
src/data/oziparsers.h \
src/map/rectd.h \
src/map/geocentric.h \
src/map/mercator.h \
src/map/jnxmap.h \
src/map/krovak.h
SOURCES += src/main.cpp \
src/common/coordinates.cpp \
src/common/rectc.cpp \
@ -174,7 +188,7 @@ SOURCES += src/main.cpp \
src/map/matrix.cpp \
src/map/ellipsoid.cpp \
src/map/datum.cpp \
src/map/mercator.cpp \
src/map/webmercator.cpp \
src/map/transversemercator.cpp \
src/map/utm.cpp \
src/map/lambertconic.cpp \
@ -185,6 +199,19 @@ SOURCES += src/main.cpp \
src/map/transform.cpp \
src/map/mapfile.cpp \
src/map/tifffile.cpp \
src/map/projection.cpp \
src/map/gcs.cpp \
src/map/angularunits.cpp \
src/map/primemeridian.cpp \
src/map/linearunits.cpp \
src/map/mapsource.cpp \
src/map/tileloader.cpp \
src/map/wmtsmap.cpp \
src/map/wmts.cpp \
src/map/wmsmap.cpp \
src/map/wms.cpp \
src/map/crs.cpp \
src/map/coordinatesystem.cpp \
src/data/data.cpp \
src/data/poi.cpp \
src/data/track.cpp \
@ -197,19 +224,19 @@ SOURCES += src/main.cpp \
src/data/fitparser.cpp \
src/data/igcparser.cpp \
src/data/nmeaparser.cpp \
src/map/projection.cpp \
src/map/gcs.cpp \
src/map/angularunits.cpp \
src/map/primemeridian.cpp \
src/map/linearunits.cpp \
src/map/mapsource.cpp
src/data/oziparsers.cpp \
src/map/geocentric.cpp \
src/map/mercator.cpp \
src/map/jnxmap.cpp \
src/map/krovak.cpp
RESOURCES += gpxsee.qrc
TRANSLATIONS = lang/gpxsee_cs.ts \
lang/gpxsee_sv.ts \
lang/gpxsee_de.ts \
lang/gpxsee_ru.ts \
lang/gpxsee_fi.ts \
lang/gpxsee_fr.ts
lang/gpxsee_fr.ts \
lang/gpxsee_pl.ts
macx {
ICON = icons/gpxsee.icns
QMAKE_INFO_PLIST = pkg/Info.plist
@ -219,17 +246,22 @@ macx {
lang/gpxsee_fi.qm \
lang/gpxsee_fr.qm \
lang/gpxsee_ru.qm \
lang/gpxsee_sv.qm
lang/gpxsee_sv.qm \
lang/gpxsee_pl.qm
CSV.path = Contents/Resources
CSV.files = pkg/csv
MAPS.path = Contents/Resources
MAPS.files = pkg/maps
ICONS.path = Contents/Resources/icons
ICONS.files = icons/tcx.icns \
ICONS.files = icons/gpx.icns \
icons/tcx.icns \
icons/kml.icns \
icons/fit.icns \
icons/igc.icns \
icons/nmea.icns
icons/nmea.icns \
icons/plt.icns \
icons/rte.icns \
icons/wpt.icns
QMAKE_BUNDLE_DATA += LOCALE MAPS ICONS CSV
}
win32 {
@ -239,6 +271,10 @@ win32 {
icons/kml.ico \
icons/fit.ico \
icons/igc.ico \
icons/nmea.ico
icons/nmea.ico \
icons/plt.ico \
icons/rte.ico \
icons/wpt.ico
DEFINES += _USE_MATH_DEFINES
}
DEFINES += APP_VERSION=\\\"$$VERSION\\\"

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 302 KiB

View File

@ -1,171 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg3390"
height="185"
width="185"
inkscape:version="0.91 r13725"
sodipodi:docname="fit.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1440"
inkscape:window-height="815"
id="namedview3427"
showgrid="false"
inkscape:zoom="3.1351351"
inkscape:cx="92.5"
inkscape:cy="92.5"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3390" />
<metadata
id="metadata3404">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3402" />
<path
style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867"
id="path3392"
d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0" />
<rect
y="124.9782"
x="16.573463"
height="49.84631"
width="120.3215"
id="rect3426"
style="fill:#006600;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g3828"
transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)">
<g
id="g3715">
<circle
style="fill:#000000"
cx="113"
cy="90.875"
id="ellipse3717"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2;stroke-linejoin:round"
cx="113"
cy="90.875"
id="ellipse3719"
r="7.0209999" />
</g>
<polyline
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4"
points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "
id="polyline3721" />
<g
id="g3723">
<circle
style="fill:#000000"
cx="73.5"
cy="125.854"
id="ellipse3725"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="73.5"
cy="125.854"
id="ellipse3727"
r="7.0209999" />
</g>
<g
id="g3729">
<circle
style="fill:#000000"
cx="136.5"
cy="172.375"
id="ellipse3731"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="136.5"
cy="172.375"
id="ellipse3733"
r="7.0209999" />
</g>
<g
id="g3735">
<circle
style="fill:#000000"
cx="60.700001"
cy="186.39999"
id="ellipse3737"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="60.700001"
cy="186.39999"
id="ellipse3739"
r="7.0209999" />
</g>
<g
id="g3741">
<circle
style="fill:#000000"
cx="154.5"
cy="154.354"
id="ellipse3743"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="154.5"
cy="154.354"
id="ellipse3745"
r="7.0209999" />
</g>
<g
id="g3747">
<circle
style="fill:#000000"
cx="96"
cy="151.875"
id="ellipse3749"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="96"
cy="151.875"
id="ellipse3751"
r="7.0209999" />
</g>
</g>
<text
transform="scale(0.9437456,1.0596076)"
id="text3921"
y="155.86783"
x="44.388157"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
sodipodi:linespacing="100%"><tspan
sodipodi:role="line"
id="tspan3429"
x="44.388157"
y="155.86783">FIT</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 305 KiB

View File

@ -1,146 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg3390"
height="185"
width="185">
<metadata
id="metadata3404">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3402" />
<path
style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867"
id="path3392"
d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0" />
<rect
y="124.9782"
x="16.573463"
height="49.84631"
width="120.3215"
id="rect3426"
style="fill:#003399;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g3828"
transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)">
<g
id="g3715">
<circle
style="fill:#000000"
cx="113"
cy="90.875"
id="ellipse3717"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2;stroke-linejoin:round"
cx="113"
cy="90.875"
id="ellipse3719"
r="7.0209999" />
</g>
<polyline
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4"
points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "
id="polyline3721" />
<g
id="g3723">
<circle
style="fill:#000000"
cx="73.5"
cy="125.854"
id="ellipse3725"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="73.5"
cy="125.854"
id="ellipse3727"
r="7.0209999" />
</g>
<g
id="g3729">
<circle
style="fill:#000000"
cx="136.5"
cy="172.375"
id="ellipse3731"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="136.5"
cy="172.375"
id="ellipse3733"
r="7.0209999" />
</g>
<g
id="g3735">
<circle
style="fill:#000000"
cx="60.700001"
cy="186.39999"
id="ellipse3737"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="60.700001"
cy="186.39999"
id="ellipse3739"
r="7.0209999" />
</g>
<g
id="g3741">
<circle
style="fill:#000000"
cx="154.5"
cy="154.354"
id="ellipse3743"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="154.5"
cy="154.354"
id="ellipse3745"
r="7.0209999" />
</g>
<g
id="g3747">
<circle
style="fill:#000000"
cx="96"
cy="151.875"
id="ellipse3749"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="96"
cy="151.875"
id="ellipse3751"
r="7.0209999" />
</g>
</g>
<text
transform="scale(0.9437456,1.0596076)"
id="text3921"
y="155.86783"
x="31.672857"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="155.86783"
x="31.672857"
id="tspan3923"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">GPX</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 304 KiB

View File

@ -1,145 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="185"
height="185"
id="svg3390"
version="1.1">
<metadata
id="metadata3404">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3402" />
<path
d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0"
id="path3392"
style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867" />
<rect
style="fill:#ff3300;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3426"
width="120.3215"
height="49.84631"
x="16.573463"
y="124.9782" />
<g
transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)"
id="g3828">
<g
id="g3715">
<circle
r="7.0209999"
id="ellipse3717"
cy="90.875"
cx="113"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3719"
cy="90.875"
cx="113"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2;stroke-linejoin:round" />
</g>
<polyline
id="polyline3721"
points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4" />
<g
id="g3723">
<circle
r="7.0209999"
id="ellipse3725"
cy="125.854"
cx="73.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3727"
cy="125.854"
cx="73.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3729">
<circle
r="7.0209999"
id="ellipse3731"
cy="172.375"
cx="136.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3733"
cy="172.375"
cx="136.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3735">
<circle
r="7.0209999"
id="ellipse3737"
cy="186.39999"
cx="60.700001"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3739"
cy="186.39999"
cx="60.700001"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3741">
<circle
r="7.0209999"
id="ellipse3743"
cy="154.354"
cx="154.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3745"
cy="154.354"
cx="154.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3747">
<circle
r="7.0209999"
id="ellipse3749"
cy="151.875"
cx="96"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3751"
cy="151.875"
cx="96"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="40.149723"
y="155.86783"
id="text3921"
transform="scale(0.9437456,1.0596076)"><tspan
y="155.86783"
x="40.149723"
id="tspan3448">IGC</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 304 KiB

View File

@ -1,143 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="185"
height="185"
id="svg3390"
version="1.1">
<metadata
id="metadata3404">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3402" />
<path
d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0"
id="path3392"
style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867" />
<rect
style="fill:#990000;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3426"
width="120.3215"
height="49.84631"
x="16.573463"
y="124.9782" />
<g
transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)"
id="g3828">
<g
id="g3715">
<circle
r="7.0209999"
id="ellipse3717"
cy="90.875"
cx="113"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3719"
cy="90.875"
cx="113"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2;stroke-linejoin:round" />
</g>
<polyline
id="polyline3721"
points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4" />
<g
id="g3723">
<circle
r="7.0209999"
id="ellipse3725"
cy="125.854"
cx="73.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3727"
cy="125.854"
cx="73.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3729">
<circle
r="7.0209999"
id="ellipse3731"
cy="172.375"
cx="136.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3733"
cy="172.375"
cx="136.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3735">
<circle
r="7.0209999"
id="ellipse3737"
cy="186.39999"
cx="60.700001"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3739"
cy="186.39999"
cx="60.700001"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3741">
<circle
r="7.0209999"
id="ellipse3743"
cy="154.354"
cx="154.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3745"
cy="154.354"
cx="154.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3747">
<circle
r="7.0209999"
id="ellipse3749"
cy="151.875"
cx="96"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3751"
cy="151.875"
cx="96"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
x="31.672857"
y="155.86783"
id="text3921"
transform="scale(0.9437456,1.0596076)"><tspan
id="tspan3429">KML</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 304 KiB

View File

@ -1,145 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg3390"
height="185"
width="185">
<metadata
id="metadata3404">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3402" />
<path
style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867"
id="path3392"
d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0" />
<rect
y="124.9782"
x="16.573463"
height="49.84631"
width="131.6837"
id="rect3426"
style="fill:#0083d7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g3828"
transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)">
<g
id="g3715">
<circle
style="fill:#000000"
cx="113"
cy="90.875"
id="ellipse3717"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2;stroke-linejoin:round"
cx="113"
cy="90.875"
id="ellipse3719"
r="7.0209999" />
</g>
<polyline
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4"
points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "
id="polyline3721" />
<g
id="g3723">
<circle
style="fill:#000000"
cx="73.5"
cy="125.854"
id="ellipse3725"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="73.5"
cy="125.854"
id="ellipse3727"
r="7.0209999" />
</g>
<g
id="g3729">
<circle
style="fill:#000000"
cx="136.5"
cy="172.375"
id="ellipse3731"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="136.5"
cy="172.375"
id="ellipse3733"
r="7.0209999" />
</g>
<g
id="g3735">
<circle
style="fill:#000000"
cx="60.700001"
cy="186.39999"
id="ellipse3737"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="60.700001"
cy="186.39999"
id="ellipse3739"
r="7.0209999" />
</g>
<g
id="g3741">
<circle
style="fill:#000000"
cx="154.5"
cy="154.354"
id="ellipse3743"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="154.5"
cy="154.354"
id="ellipse3745"
r="7.0209999" />
</g>
<g
id="g3747">
<circle
style="fill:#000000"
cx="96"
cy="151.875"
id="ellipse3749"
r="7.0209999" />
<circle
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2"
cx="96"
cy="151.875"
id="ellipse3751"
r="7.0209999" />
</g>
</g>
<text
transform="scale(0.9437456,1.0596076)"
id="text3921"
y="155.86783"
x="21.076782"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="155.86783"
x="21.076782"
id="tspan3429">NMEA</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

BIN
icons/plt.icns Normal file

Binary file not shown.

BIN
icons/plt.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

BIN
icons/rte.icns Normal file

Binary file not shown.

BIN
icons/rte.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

28
icons/scripts/icns.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/bash
EXTENSIONS="fit:#006600 gpx:#003399 igc:#ff3300 kml:#990000 nmea:#0083d7 \
plt:#66ff00 rte:#66ff00 tcx:#ffcc00 wpt:#66ff00"
for e in $EXTENSIONS; do
IFS=":"; set $e
EXT=`echo $1 | tr /a-z/ /A-Z/`
sed -e "s/\$EXTENSION/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > $1.svg
ICONSET=$1.iconset
mkdir $ICONSET
convert -density 400 -background none -resize '16x16' "$1.svg" "$ICONSET/icon_16x16.png"
convert -density 400 -background none -resize '32x32' "$1.svg" "$ICONSET/icon_16x16@2x.png"
cp "$ICONSET/icon_16x16@2x.png" "$ICONSET/icon_32x32.png"
convert -density 400 -background none -resize '64x64' "$1.svg" "$ICONSET/icon_32x32@2x.png"
convert -density 400 -background none -resize '128x128' "$1.svg" "$ICONSET/icon_128x128.png"
convert -density 400 -background none -resize '256x256' "$1.svg" "$ICONSET/icon_128x128@2x.png"
cp "$ICONSET/icon_128x128@2x.png" "$ICONSET/icon_256x256.png"
convert -density 400 -background none -resize '512x512' "$1.svg" "$ICONSET/icon_256x256@2x.png"
cp "$ICONSET/icon_256x256@2x.png" "$ICONSET/icon_512x512.png"
convert -density 400 -background none -resize '1024x1024' "$1.svg" "$ICONSET/icon_512x512@2x.png"
iconutil -c icns -o $1.icns "$ICONSET"
rm -R "$ICONSET" $1.svg
done

13
icons/scripts/ico.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/bash
EXTENSIONS="fit:#006600 gpx:#003399 igc:#ff3300 kml:#990000 nmea:#0083d7 \
plt:#66ff00 rte:#66ff00 tcx:#ffcc00 wpt:#66ff00"
for e in $EXTENSIONS; do
IFS=":"; set $e
EXT=`echo $1 | tr /a-z/ /A-Z/`
sed -e "s/\$EXTENSION/$EXT/" -e "s/\$COLOR/$2/" icon-template.svg > $1.svg
convert -density 400 $1.svg -define icon:auto-resize $1.ico
rm $1.svg
done

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" height="185" width="185">
<path id="envelope" style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867" d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0" />
<g id="logo" transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)">
<polyline style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4" points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "/>
<circle style="fill:#000000" cx="113" cy="90.875" r="8"/>
<circle style="fill:#000000" cx="73.5" cy="125.854" r="8"/>
<circle style="fill:#000000" cx="136.5" cy="172.375" r="8"/>
<circle style="fill:#000000" cx="60.700001" cy="186.39999" r="8"/>
<circle style="fill:#000000" cx="154.5" cy="154.354" r="8"/>
<circle style="fill:#000000" cx="96" cy="151.875" r="8"/>
</g>
<g transform="translate(16.573463,124.9782)">
<rect y="0" x="0" id="textrect" height="50" width="120" style="fill:$COLOR;fill-opacity:1;stroke:none;"/>
<text y="28" x="60" dominant-baseline="central" text-anchor="middle" style="fill:#FFFFFF;font-size:39px;font-family:sans-serif;font-weight:bold;">$EXTENSION</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 304 KiB

View File

@ -1,145 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
width="185"
height="185"
id="svg3390"
version="1.1">
<metadata
id="metadata3404">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3402" />
<path
d="m 128.23996,2.2548915 -95.377018,0 0,181.0580085 134.394868,0 0,-141.313567 z m 0,0 0,39.7444415 39.01785,0"
id="path3392"
style="fill:#ffffff;stroke:#999999;stroke-width:2.18774867" />
<rect
style="fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3426"
width="120.3215"
height="49.84631"
x="16.573463"
y="124.9782" />
<g
transform="matrix(0.89093793,0,0,0.84489692,3.5017807,-51.565424)"
id="g3828">
<g
id="g3715">
<circle
r="7.0209999"
id="ellipse3717"
cy="90.875"
cx="113"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3719"
cy="90.875"
cx="113"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2;stroke-linejoin:round" />
</g>
<polyline
id="polyline3721"
points="62.3563,178.566 73.5,125.854 96,151.875 113,90.875 136.5,172.375 148.831,160.03 "
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:4" />
<g
id="g3723">
<circle
r="7.0209999"
id="ellipse3725"
cy="125.854"
cx="73.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3727"
cy="125.854"
cx="73.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3729">
<circle
r="7.0209999"
id="ellipse3731"
cy="172.375"
cx="136.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3733"
cy="172.375"
cx="136.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3735">
<circle
r="7.0209999"
id="ellipse3737"
cy="186.39999"
cx="60.700001"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3739"
cy="186.39999"
cx="60.700001"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3741">
<circle
r="7.0209999"
id="ellipse3743"
cy="154.354"
cx="154.5"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3745"
cy="154.354"
cx="154.5"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
<g
id="g3747">
<circle
r="7.0209999"
id="ellipse3749"
cy="151.875"
cx="96"
style="fill:#000000" />
<circle
r="7.0209999"
id="ellipse3751"
cy="151.875"
cx="96"
style="fill:none;fill-opacity:0;stroke:#000000;stroke-width:2" />
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="35.911289"
y="155.86783"
id="text3921"
transform="scale(0.9437456,1.0596076)"><tspan
y="155.86783"
x="35.911289"
id="tspan3429">TCX</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

BIN
icons/wpt.icns Normal file

Binary file not shown.

BIN
icons/wpt.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1625
lang/gpxsee_pl.ts Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -115,6 +115,54 @@
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>plt</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.oziexplorer.plt</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/plt.icns</string>
<key>CFBundleTypeName</key>
<string>OziExplorer Track Point File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>rte</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.oziexplorer.rte</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/rte.icns</string>
<key>CFBundleTypeName</key>
<string>OziExplorer Route File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>wpt</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>application/vnd.oziexplorer.wpt</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>icons/wpt.icns</string>
<key>CFBundleTypeName</key>
<string>OziExplorer Waypoint File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
</dict>
</array>
<key>UTImportedTypeDeclarations</key>
@ -245,6 +293,69 @@
<string>application/vnd.nmea.nmea</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.oziexplorer3.plt</string>
<key>UTTypeReferenceURL</key>
<string>http://www.oziexplorer3.com/eng/help/fileformats.html</string>
<key>UTTypeDescription</key>
<string>OziExplorer Track Point File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>plt</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.oziexplorer.plt</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.oziexplorer3.plt</string>
<key>UTTypeReferenceURL</key>
<string>http://www.oziexplorer3.com/eng/help/fileformats.html</string>
<key>UTTypeDescription</key>
<string>OziExplorer Route File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>rte</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.oziexplorer.rte</string>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>com.oziexplorer3.plt</string>
<key>UTTypeReferenceURL</key>
<string>http://www.oziexplorer3.com/eng/help/fileformats.html</string>
<key>UTTypeDescription</key>
<string>OziExplorer Waypoint File</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>wpt</string>
</array>
<key>public.mime-type</key>
<string>application/vnd.oziexplorer.wpt</string>
</dict>
</dict>
</array>
</dict>

62
pkg/appdata.xml Normal file
View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<id>gpxsee.desktop</id>
<metadata_license>MIT</metadata_license>
<project_license>GPL-3.0</project_license>
<name>GPXSee</name>
<summary>GPS log file viewer and analyzer</summary>
<description>
<p>GPXSee is a GPS log file viewer and analyzer that supports GPX, TCX,
KML, FIT, IGC, NMEA and OziExplorer files.</p>
<p>Features:</p>
<ul>
<li>User-definable online maps (OSM/Google tiles, WMTS, WMS).</li>
<li>Offline maps (OziExplorer maps, TrekBuddy maps/atlases, GeoTIFF
images).</li>
<li>Elevation, speed, heart rate, cadence, power and temperature
graphs.</li>
<li>Support for multiple tracks in one view.</li>
<li>Support for POI files.</li>
<li>Print/export to PDF.</li>
<li>Full-screen mode.</li>
<li>Opens GPX, TCX, FIT, KML, IGC, NMEA, OziExplorer (PLT, WPT, RTE)
and Garmin CSV files.</li>
</ul>
</description>
<screenshots>
<screenshot type="default">
<image>http://www.gpxsee.org/gallery/lin1.png</image>
</screenshot>
<screenshot>
<image>http://www.gpxsee.org/gallery/lin2.png</image>
</screenshot>
</screenshots>
<categories>
<category>Graphics</category>
<category>Viewer</category>
</categories>
<url type="homepage">http://www.gpxsee.org</url>
<launchable type="desktop-id">gpxsee.desktop</launchable>
<provides>
<binary>gpxsee</binary>
</provides>
<mimetypes>
<mimetype>application/gpx+xml</mimetype>
<mimetype>application/tcx+xml</mimetype>
<mimetype>application/vnd.ant.fit</mimetype>
<mimetype>application/vnd.google-earth.kml+xml</mimetype>
<mimetype>application/vnd.fai.igc</mimetype>
<mimetype>application/vnd.nmea.nmea</mimetype>
<mimetype>application/vnd.oziexplorer.plt</mimetype>
<mimetype>application/vnd.oziexplorer.rte</mimetype>
<mimetype>application/vnd.oziexplorer.wpt</mimetype>
</mimetypes>
</component>

View File

@ -3,6 +3,7 @@ Modified Airy,7002,6377340.189,299.3249646
Australian National,7003,6378160.0,298.25
Bessel 1841,7004,6377397.155,299.1528128
Bessel 1841 (Norway),7005,6377492.0176,299.1528
Clarke 1858,7007,6378293.645,294.26
Clarke 1866,7008,6378206.4,294.9786982
Clarke 1880 (Palestine),7010,6378300.789,293.466
Clarke 1880 (IGN),7011,6378249.2,293.466021
@ -11,9 +12,17 @@ Everest 1830 (1937 Adjustment),7015,6377276.345,300.8017
Everest 1830 Modified,7018,6377304.063,300.8017
GRS 80,7019,6378137.0,298.257222101
Helmert 1906,7020,6378200.0,298.3
Indonesian National Spheroid,7021,6378160.0,298.247
International 1924,7022,6378388.0,297.0
Krassovsky 1940,7024,6378245.0,298.3
War Office,7029,6378300.0,296.0
South American 1969,7036,6378160.0,298.25
WGS 72,7043,6378135.0,298.26
Everest 1830 (1962 Definition),7044,6377301.243,300.8017255
Everest 1830 (1975 Definition),7045,6377299.151,300.8017255
Bessel 1841 (Namibia),7046,6377483.865,299.1528128
GRS 1967 Modified,7050,6378160.0,298.25
Danish 1876,7051,6377019.27,300.0
Hough 1960,7053,6378270.0,297.0
Clarke 1880 (international foot),7055,6378306.370,293.4663077
PZ-90,7054,6378136.0,298.257839303

1 Airy 1830 7001 6377563.396 299.3249646
3 Australian National 7003 6378160.0 298.25
4 Bessel 1841 7004 6377397.155 299.1528128
5 Bessel 1841 (Norway) 7005 6377492.0176 299.1528
6 Clarke 1858 7007 6378293.645 294.26
7 Clarke 1866 7008 6378206.4 294.9786982
8 Clarke 1880 (Palestine) 7010 6378300.789 293.466
9 Clarke 1880 (IGN) 7011 6378249.2 293.466021
12 Everest 1830 Modified 7018 6377304.063 300.8017
13 GRS 80 7019 6378137.0 298.257222101
14 Helmert 1906 7020 6378200.0 298.3
15 Indonesian National Spheroid 7021 6378160.0 298.247
16 International 1924 7022 6378388.0 297.0
17 Krassovsky 1940 7024 6378245.0 298.3
18 War Office 7029 6378300.0 296.0
19 South American 1969 7036 6378160.0 298.25
20 WGS 72 7043 6378135.0 298.26
21 Everest 1830 (1962 Definition) 7044 6377301.243 300.8017255
22 Everest 1830 (1975 Definition) 7045 6377299.151 300.8017255
23 Bessel 1841 (Namibia) 7046 6377483.865 299.1528128
24 GRS 1967 Modified 7050 6378160.0 298.25
25 Danish 1876 7051 6377019.27 300.0
26 Hough 1960 7053 6378270.0 297.0
27 Clarke 1880 (international foot) 7055 6378306.370 293.4663077
28 PZ-90 7054 6378136.0 298.257839303

View File

@ -1,121 +1,374 @@
Adindan,4201,6201,9122,7012,8901,9603,-162,-12,206
Afgooye,4205,6205,9122,7024,8901,9603,-43,-163,45
Ain el Abd 1970,4204,6204,9122,7022,8901,9603,-150,-251,-2
Anna 1 Astro 1965,4708,6708,9122,7003,8901,9603,-491,-22,435
Arc 1950,4209,6209,9122,7012,8901,9603,-143,-90,-294
Arc 1960,4210,6210,9122,7012,8901,9603,-160,-8,-300
Ascension Island 1958,4712,6712,9122,7022,8901,9603,-207,107,52
Astro B4 Sorol Atoll,4707,6707,9122,7022,8901,9603,114,-116,-333
Astro Beacon 1945,4709,6709,9122,7022,8901,9603,145,75,-272
Astro DOS 71/4,4710,6710,9122,7022,8901,9603,-320,550,-494
Astronomic Stn 1952,4711,6711,9122,7022,8901,9603,124,-234,-25
Australian Geodetic 1966,4202,6202,9122,7003,8901,9603,-133,-48,148
Australian Geodetic 1984,4203,6203,9122,7003,8901,9603,-134,-48,149
Australian Geocentric 1994 (GDA94),4283,6283,9122,7019,8901,9603,0,0,0
Austrian,4312,6312,9122,7004,8901,9603,594,84,471
Bellevue (IGN),4714,6714,9122,7022,8901,9603,-127,-769,472
Bermuda 1957,4216,6216,9122,7008,8901,9603,-73,213,296
Bogota Observatory,4218,6218,9122,7022,8901,9603,307,304,-318
Campo Inchauspe,4221,6221,9122,7022,8901,9603,-148,136,90
Canton Astro 1966,4716,6716,9122,7022,8901,9603,298,-304,-375
Cape,4222,6222,9122,7012,8901,9603,-136,-108,-292
Cape Canaveral,4717,6717,9122,7008,8901,9603,-2,150,181
Carthage,4223,6223,9122,7012,8901,9603,-263,6,431
CH-1903,4149,6149,9122,7004,8901,9603,674,15,405
Chatham 1971,4672,6672,9122,7022,8901,9603,175,-38,113
Chua Astro,4224,6224,9122,7022,8901,9603,-134,229,-29
Corrego Alegre,4225,6225,9122,7022,8901,9603,-206,172,-6
Djakarta (Batavia),4211,6211,9122,7004,8901,9603,-377,681,-50
DOS 1968,,,9122,7022,8901,9603,230,-199,-752
Easter Island 1967,4719,6719,9122,7022,8901,9603,211,147,111
Egypt,4199,6199,9122,7022,8901,9603,-130,-117,-151
European 1950,4230,6230,9122,7022,8901,9603,-87,-98,-121
European 1950 (Mean France),,,9122,7022,8901,9603,-87,-96,-120
European 1950 (Spain and Portugal),,,9122,7022,8901,9603,-84,-107,-120
European 1979,4668,6668,9122,7022,8901,9603,-86,-98,-119
Finland Hayford,4123,6123,9122,7022,8901,9603,-78,-231,-97
Gandajika Base,4233,6233,9122,7022,8901,9603,-133,-321,50
Geodetic Datum 1949,4272,6272,9122,7022,8901,9603,84,-22,209
GGRS 87,4121,6121,9122,7019,8901,9603,-199.87,74.79,246.62
Guam 1963,4675,6675,9122,7008,8901,9603,-100,-248,259
GUX 1 Astro,4718,6718,9122,7022,8901,9603,252,-209,-751
Hartebeeshoek94,4148,6148,9122,7030,8901,9603,0,0,0
Hermannskogel,3906,1031,9122,7004,8901,9603,653,-212,449
Hjorsey 1955,4658,6658,9122,7022,8901,9603,-73,46,-86
Hong Kong 1963,4739,6739,9122,7022,8901,9603,-156,-271,-189
Hu-Tzu-Shan,4236,6236,9122,7022,8901,9603,-634,-549,-201
Indian Bangladesh,4682,6682,9122,7015,8901,9603,289,734,257
Indian Thailand,4240,6240,9122,7015,8901,9603,214,836,303
Israeli,4281,6281,9122,7010,8901,9603,-235,-85,264
Ireland 1965,4299,6299,9122,7002,8901,9603,506,-122,611
ISTS 073 Astro 1969,4724,6724,9122,7022,8901,9603,208,-435,-229
Johnston Island,4725,6725,9122,7022,8901,9603,191,-77,-204
Kandawala,4244,6244,9122,7015,8901,9603,-97,787,86
Kerguelen Island,4698,6698,9122,7022,8901,9603,145,-187,103
Kertau 1948,4245,6245,9122,7018,8901,9603,-11,851,5
L.C. 5 Astro,4726,6726,9122,7008,8901,9603,42,124,147
Liberia 1964,4251,6251,9122,7012,8901,9603,-90,40,88
Luzon Mindanao,,,9122,7008,8901,9603,-133,-79,-72
Luzon Philippines,4253,6253,9122,7008,8901,9603,-133,-77,-51
Mahe 1971,4256,6256,9122,7012,8901,9603,41,-220,-134
Marco Astro,4616,6616,9122,7022,8901,9603,-289,-124,60
Massawa,4262,6262,9122,7004,8901,9603,639,405,60
Merchich,4261,6261,9122,7012,8901,9603,31,146,47
Midway Astro 1961,4727,6727,9122,7022,8901,9603,912,-58,1227
Minna,4263,6263,9122,7012,8901,9603,-92,-93,122
NAD27 Alaska,,,9122,7008,8901,9603,-5,135,172
NAD27 Bahamas,,,9122,7008,8901,9603,-4,154,178
NAD27 Canada,,,9122,7008,8901,9603,-10,158,187
NAD27 Canal Zone,,,9122,7008,8901,9603,0,125,201
NAD27 Caribbean,,,9122,7008,8901,9603,-3,142,183
NAD27 Central,,,9122,7008,8901,9603,0,125,194
NAD27 CONUS,4267,6267,9122,7008,8901,9603,-8,160,176
NAD27 Cuba,,,9122,7008,8901,9603,-9,152,178
NAD27 Greenland,,,9122,7008,8901,9603,11,114,195
NAD27 Mexico,,,9122,7008,8901,9603,-12,130,190
NAD27 San Salvador,,,9122,7008,8901,9603,1,140,165
NAD83,4269,6269,9122,7019,8901,9603,0,0,0
Nahrwn Masirah Ilnd,,,9122,7012,8901,9603,-247,-148,369
Nahrwn Saudi Arbia,,,9122,7012,8901,9603,-231,-196,482
Nahrwn United Arab,4270,6270,9122,7012,8901,9603,-249,-156,381
Naparima BWI,4271,6271,9122,7022,8901,9603,-2,374,172
NGO1948,4273,6273,9122,7005,8901,9603,315,-217,528
NTF France,4275,6275,9122,7011,8901,9603,-168,-60,320
Norsk,4817,6817,9122,7005,8913,9603,278,93,474
NZGD1949,4272,6272,9122,7022,8901,9603,84,-22,209
NZGD2000,4167,6167,9122,7030,8901,9603,0,0,0
Observatorio 1966,4182,6182,9122,7022,8901,9603,-425,-169,81
Old Egyptian,4229,6229,9122,7020,8901,9603,-130,110,-13
Old Hawaiian,4135,6135,9122,7008,8901,9603,61,-285,-181
Oman,4232,6232,9122,7012,8901,9603,-346,-1,224
Ord Srvy Grt Britn,4277,6277,9122,7001,8901,9603,375,-111,431
Pico De Las Nieves,4728,6728,9122,7022,8901,9603,-307,-92,127
Pitcairn Astro 1967,4729,6729,9122,7022,8901,9603,185,165,42
Potsdam Rauenberg DHDN,4314,6314,9122,7004,8901,9603,606,23,413
Prov So Amrican 1956,4248,6248,9122,7022,8901,9603,-288,175,-376
Prov So Chilean 1963,4254,6254,9122,7022,8901,9603,16,196,93
Puerto Rico,4139,6139,9122,7008,8901,9603,11,72,-101
Pulkovo 1942 (1),4284,6284,9122,7024,8901,9603,28,-130,-95
Pulkovo 1942 (2),,,9122,7024,8901,9603,28,-130,-95
Qatar National,4285,6285,9122,7022,8901,9603,-128,-283,22
Qornoq,4287,6287,9108,7022,8901,9603,164,138,-189
Reunion,4626,6626,9122,7022,8901,9603,94,-948,-1262
Rijksdriehoeksmeting,4289,6289,9122,7004,8901,9603,593,26,478
Rome 1940,4806,6806,9122,7022,8906,9603,-225,-65,9
RT 90,4124,6124,9122,7004,8901,9603,498,-36,568
S42,4179,6179,9122,7024,8901,9603,28,-121,-77
Santo (DOS),4730,6730,9122,7022,8901,9603,170,42,84
Sao Braz,4184,6184,9122,7022,8901,9603,-203,141,53
Sapper Hill 1943,4292,6292,9122,7022,8901,9603,-355,16,74
Schwarzeck,4293,6293,9122,7046,8901,9603,616,97,-251
South American 1969,4291,6291,9108,7036,8901,9603,-57,1,-41
Southeast Base,4615,6615,9122,7022,8901,9603,-499,-249,314
Southwest Base,4183,6183,9122,7022,8901,9603,-104,167,-38
Timbalai 1948,4298,6298,9122,7015,8901,9603,-689,691,-46
Tokyo,4301,6301,9122,7004,8901,9603,-128,481,664
Tristan Astro 1968,4734,6734,9122,7022,8901,9603,-632,438,-609
Viti Levu 1916,4731,6731,9122,7012,8901,9603,51,391,-36
Wake-Eniwetok 1960,4732,6732,9122,7053,8901,9603,101,52,-39
WGS 72,4322,6322,9122,7043,8901,9603,0,0,5
Yacare,4309,6309,9122,7022,8901,9603,-155,171,37
Zanderij,4311,6311,9122,7022,8901,9603,-265,120,-358
HD1909,3819,1024,9122,7004,8901,9607,595.48,121.69,515.35,-4.115,2.9383,-0.853,-3.408
TWD97,3824,1026,9122,7019,8901,9603,0,0,0,,,,
IGRS,3889,1029,9122,7019,8901,9603,0,0,0,,,,
Hermannskogel,3906,1031,9122,7004,8901,9603,653,-212,449,,,,
MOLDREF99,4023,1032,9122,7019,8901,9603,0,0,0,,,,
RGRDC 2005,4046,1033,9122,7019,8901,9603,0,0,0,,,,
SREF98,4075,1034,9122,7019,8901,9603,0,0,0,,,,
REGCAN95,4081,1035,9122,7019,8901,9603,0,0,0,,,,
GGRS 87,4121,6121,9122,7019,8901,9603,-199.87,74.79,246.62,,,,
Finland Hayford,4123,6123,9122,7022,8901,9603,-78,-231,-97,,,,
RT 90,4124,6124,9122,7004,8901,9603,498,-36,568,,,,
Samboja,4125,6125,9108,7004,8901,9603,-404.78,685.68,45.47,,,,
Tete,4127,6127,9122,7008,8901,9603,-80,-100,-228,,,,
Observatario,4129,6129,9122,7008,8901,9603,-132,-110,-335,,,,
Moznet,4130,6130,9122,7030,8901,9607,0,0,0,0,0,0,0
Indian 1960,4131,6131,9122,7015,8901,9603,198,881,317,,,,
FD58,4132,6132,9122,7012,8901,9603,-241.54,-163.64,396.06,,,,
EST92,4133,6133,9122,7019,8901,9607,0.055,-0.541,-0.185,-0.0183,0.0003,0.007,-0.014
PSD93,4134,6134,9122,7012,8901,9606,-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006
Old Hawaiian,4135,6135,9122,7008,8901,9603,61,-285,-181,,,,
Puerto Rico,4139,6139,9122,7008,8901,9603,11,72,-101,,,,
NAD83(CSRS98),4140,6140,9108,7019,8901,9603,0,0,0,,,,
Israel 1993,4141,6141,9122,7019,8901,9603,-48,55,52,,,,
Locodjo 1965,4142,6142,9122,7012,8901,9603,-125,53,467,,,,
Abidjan 1987,4143,6143,9122,7012,8901,9603,-124.76,53,466.79,,,,
Kalianpur 1937,4144,6144,9122,7015,8901,9603,214,804,268,,,,
Kalianpur 1962,4145,6145,9122,7044,8901,9603,283,682,231,,,,
Kalianpur 1975,4146,6146,9122,7045,8901,9603,295,736,257,,,,
Hanoi 1972,4147,6147,9122,7024,8901,9603,-17.51,-108.32,-62.39,,,,
Hartebeeshoek94,4148,6148,9122,7030,8901,9603,0,0,0,,,,
CH-1903,4149,6149,9122,7004,8901,9603,674.374,15.056,405.343,,,,
CH1903+,4150,6150,9122,7004,8901,9603,674.374,15.056,405.346,,,,
CHTRF95,4151,6151,9122,7019,8901,9603,0,0,0,,,,
NAD83(HARN),4152,6152,9122,7019,8901,9603,0,0,0,,,,
Rassadiran,4153,6153,9122,7022,8901,9603,-133.63,-157.5,-158.62,,,,
ED50(ED77),4154,6154,9122,7022,8901,9603,-117,-132,-164,,,,
Dabola 1981,4155,6155,9122,7011,8901,9603,-83,37,124,,,,
S-JTSK,4156,6156,9122,7004,8901,9603,589,76,480,,,,
Naparima 1955,4158,6158,9122,7022,8901,9603,-0.465,372.095,171.736,,,,
ELD79,4159,6159,9122,7022,8901,9603,-115.8543,-99.0583,-152.4616,,,,
Pampa del Castillo,4161,6161,9122,7022,8901,9603,27.5,14,186.4,,,,
Yemen NGN96,4163,6163,9122,7030,8901,9603,0,0,0,,,,
South Yemen,4164,6164,9122,7024,8901,9603,-76,-138,67,,,,
Bissau,4165,6165,9122,7022,8901,9603,-173,253,27,,,,
Korean 1995,4166,6166,9122,7030,8901,9603,0,0,0,,,,
NZGD2000,4167,6167,9122,7030,8901,9603,0,0,0,,,,
Accra,4168,6168,9122,7029,8901,9603,-199,32,322,,,,
American Samoa 1962,4169,6169,9122,7008,8901,9603,-115,118,426,,,,
SIRGAS 1995,4170,6170,9122,7019,8901,9603,0,0,0,,,,
RGF93,4171,6171,9122,7019,8901,9603,0,0,0,,,,
POSGAR,4172,6172,9108,7019,8901,9603,0,0,0,,,,
IRENET95,4173,6173,9122,7019,8901,9603,0,0,0,,,,
Sierra Leone 1968,4175,6175,9122,7012,8901,9603,-88,4,101,,,,
Australian Antarctic,4176,6176,9122,7019,8901,9603,0,0,0,,,,
S42 (83),4178,6178,9122,7024,8901,9603,26,-121,-78,,,,
S42,4179,6179,9122,7024,8901,9603,28,-121,-77,,,,
EST97,4180,6180,9122,7019,8901,9603,0,0,0,,,,
Luxembourg 1930,4181,6181,9122,7022,8901,9607,-189.6806,18.3463,-42.7695,0.33746,3.09264,-2.53861,0.4598
Observatorio 1966,4182,6182,9122,7022,8901,9603,-425,-169,81,,,,
Southwest Base,4183,6183,9122,7022,8901,9603,-104,167,-38,,,,
Sao Braz,4184,6184,9122,7022,8901,9603,-203,141,53,,,,
OSNI 1952,4188,6188,9122,7001,8901,9606,482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15
REGVEN,4189,6189,9122,7019,8901,9603,0,0,0,,,,
POSGAR 98,4190,6190,9122,7019,8901,9603,0,0,0,,,,
Albanian 1987,4191,6191,9122,7024,8901,9607,-44.183,-0.58,-38.489,-2.3867,-2.7072,3.5196,-8.2703
Douala 1948,4192,6192,9122,7022,8901,9603,-206.1,-174.7,-87.7,,,,
Manoca 1962,4193,6193,9122,7011,8901,9603,-70.9,-151.8,-41.4,,,,
Qornoq 1927,4194,6194,9122,7022,8901,9603,164,138,-189,,,,
Scoresbysund 1952,4195,6195,9122,7022,8901,9606,105,326,-102.5,0,0,0.814,-0.6
Ammassalik 1958,4196,6196,9122,7022,8901,9606,-45,417,-3.5,0,0,0.814,-0.6
Egypt,4199,6199,9122,7022,8901,9603,-130,-117,-151,,,,
Pulkovo 1995,4200,6200,9122,7024,8901,9607,24.47,-130.89,-81.56,0,0,-0.13,-0.22
Adindan,4201,6201,9122,7012,8901,9603,-162,-12,206,,,,
Australian Geodetic 1966,4202,6202,9122,7003,8901,9603,-133,-48,148,,,,
Australian Geodetic 1984,4203,6203,9122,7003,8901,9603,-134,-48,149,,,,
Ain el Abd 1970,4204,6204,9122,7022,8901,9603,-150,-251,-2,,,,
Afgooye,4205,6205,9122,7024,8901,9603,-43,-163,45,,,,
Lisbon,4207,6207,9122,7022,8901,9603,-304.046,-60.576,103.64,,,,
Aratu,4208,6208,9122,7022,8901,9603,-151.99,287.04,-147.45,,,,
Arc 1950,4209,6209,9122,7012,8901,9603,-143,-90,-294,,,,
Arc 1960,4210,6210,9122,7012,8901,9603,-160,-8,-300,,,,
Djakarta (Batavia),4211,6211,9122,7004,8901,9603,-377,681,-50,,,,
Barbados 1938,4212,6212,9122,7012,8901,9603,31.95,300.99,419.19,,,,
Beduaram,4213,6213,9122,7011,8901,9603,-106,-87,188,,,,
Beijing 1954,4214,6214,9122,7024,8901,9603,15.8,-154.4,-82.3,,,,
Bermuda 1957,4216,6216,9122,7008,8901,9603,-73,213,296,,,,
Bogota Observatory,4218,6218,9122,7022,8901,9603,307,304,-318,,,,
Bukit Rimpah,4219,6219,9122,7004,8901,9603,-384,664,-48,,,,
Camacupa,4220,6220,9122,7012,8901,9603,-50.9,-347.6,-231,,,,
Campo Inchauspe,4221,6221,9122,7022,8901,9603,-148,136,90,,,,
Cape,4222,6222,9122,7012,8901,9603,-136,-108,-292,,,,
Carthage,4223,6223,9122,7012,8901,9603,-263,6,431,,,,
Chua Astro,4224,6224,9122,7022,8901,9603,-134,229,-29,,,,
Corrego Alegre,4225,6225,9122,7022,8901,9603,-206,172,-6,,,,
Deir ez Zor,4227,6227,9122,7011,8901,9603,-190.421,8.532,238.69,,,,
Old Egyptian,4229,6229,9122,7020,8901,9603,-130,110,-13,,,,
European 1950,4230,6230,9122,7022,8901,9603,-87,-98,-121,,,,
ED87,4231,6231,9122,7022,8901,9606,-83.11,-97.38,-117.22,0.005693,-0.044698,0.044285,0.1218
Oman,4232,6232,9122,7012,8901,9603,-346,-1,224,,,,
Gandajika Base,4233,6233,9122,7022,8901,9603,-133,-321,50,,,,
Hu-Tzu-Shan,4236,6236,9122,7022,8901,9603,-634,-549,-201,,,,
HD72,4237,6237,9122,7036,8901,9603,52.17,-71.82,-14.9,,,,
ID74,4238,6238,9122,7021,8901,9603,-24,-15,5,,,,
Indian 1954,4239,6239,9122,7015,8901,9603,217,823,299,,,,
Indian Thailand,4240,6240,9122,7015,8901,9603,214,836,303,,,,
JAD69,4242,6242,9122,7008,8901,9603,70,207,389.5,,,,
Kandawala,4244,6244,9122,7015,8901,9603,-97,787,86,,,,
Kertau 1948,4245,6245,9122,7018,8901,9603,-11,851,5,,,,
KOC,4246,6246,9122,7012,8901,9603,-294.7,-200.1,525.5,,,,
La Canoa,4247,6247,9122,7022,8901,9603,-273.5,110.6,-357.9,,,,
Prov So Amrican 1956,4248,6248,9122,7022,8901,9603,-288,175,-376,,,,
Leigon,4250,6250,9122,7012,8901,9603,-130,29,364,,,,
Liberia 1964,4251,6251,9122,7012,8901,9603,-90,40,88,,,,
Luzon Philippines,4253,6253,9122,7008,8901,9603,-133,-77,-51,,,,
Prov So Chilean 1963,4254,6254,9122,7022,8901,9603,16,196,93,,,,
Herat North,4255,6255,9122,7022,8901,9603,-333,-222,114,,,,
Mahe 1971,4256,6256,9122,7012,8901,9603,41,-220,-134,,,,
Makassar,4257,6257,9122,7004,8901,9603,-587.8,519.75,145.76,,,,
ETRS 89,4258,6258,9122,7019,8901,9603,0,0,0,,,,
Malongo 1987,4259,6259,9122,7022,8901,9603,-254.1,-5.36,-100.29,,,,
Manoca,4260,6260,9108,7012,8901,9603,-70.9,-151.8,-41.4,,,,
Merchich,4261,6261,9122,7012,8901,9603,31,146,47,,,,
Massawa,4262,6262,9122,7004,8901,9603,639,405,60,,,,
Minna,4263,6263,9122,7012,8901,9603,-92,-93,122,,,,
Mhast,4264,6264,9122,7022,8901,9603,-252.95,-4.11,-96.38,,,,
Monte Mario,4265,6265,9122,7022,8901,9606,-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68
M'poraloko,4266,6266,9122,7011,8901,9603,-74,-130,42,,,,
NAD27 CONUS,4267,6267,9122,7008,8901,9603,-8,160,176,,,,
NAD83,4269,6269,9122,7019,8901,9603,0,0,0,,,,
Nahrwn United Arab,4270,6270,9122,7012,8901,9603,-249,-156,381,,,,
Naparima BWI,4271,6271,9122,7022,8901,9603,-2,374,172,,,,
Geodetic Datum 1949,4272,6272,9122,7022,8901,9603,84,-22,209,,,,
NZGD1949,4272,6272,9122,7022,8901,9603,84,-22,209,,,,
NGO1948,4273,6273,9122,7005,8901,9603,315,-217,528,,,,
Datum 73,4274,6274,9122,7022,8901,9603,-223.237,110.193,36.649,,,,
NTF France,4275,6275,9122,7011,8901,9603,-168,-60,320,,,,
Ord Srvy Grt Britn,4277,6277,9122,7001,8901,9603,375,-111,431,,,,
Israeli,4281,6281,9122,7010,8901,9603,-235,-85,264,,,,
Pointe Noire,4282,6282,9122,7011,8901,9603,-148,51,-291,,,,
Australian Geocentric 1994 (GDA94),4283,6283,9122,7019,8901,9603,0,0,0,,,,
Pulkovo 1942 (1),4284,6284,9122,7024,8901,9603,28,-130,-95,,,,
Qatar National,4285,6285,9122,7022,8901,9603,-128,-283,22,,,,
Qornoq,4287,6287,9108,7022,8901,9603,164,138,-189,,,,
Rijksdriehoeksmeting,4289,6289,9122,7004,8901,9603,593,26,478,,,,
South American 1969,4291,6291,9108,7036,8901,9603,-57,1,-41,,,,
Sapper Hill 1943,4292,6292,9122,7022,8901,9603,-355,16,74,,,,
Schwarzeck,4293,6293,9122,7046,8901,9603,616,97,-251,,,,
Segora,4294,6294,9108,7004,8901,9603,-403,684,41,,,,
Tananarive,4297,6297,9122,7022,8901,9603,-189,-242,-91,,,,
Timbalai 1948,4298,6298,9122,7015,8901,9603,-689,691,-46,,,,
Ireland 1965,4299,6299,9122,7002,8901,9603,506,-122,611,,,,
TM75,4300,6300,9122,7002,8901,9606,482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15
Tokyo,4301,6301,9122,7004,8901,9603,-128,481,664,,,,
Trinidad 1903,4302,6302,9122,7007,8901,9603,-61.702,284.488,472.052,,,,
Voirol 1875,4304,6304,9122,7011,8901,9603,-73,-247,227,,,,
Nord Sahara 1959,4307,6307,9122,7012,8901,9606,-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547
Yacare,4309,6309,9122,7022,8901,9603,-155,171,37,,,,
Yoff,4310,6310,9122,7011,8901,9603,-30,190,89,,,,
Zanderij,4311,6311,9122,7022,8901,9603,-265,120,-358,,,,
Austrian,4312,6312,9122,7004,8901,9603,594,84,471,,,,
Belge 1972,4313,6313,9122,7022,8901,9607,-106.8686,52.2978,-103.7239,-0.3366,0.457,-1.8422,-1.2747
Potsdam Rauenberg DHDN,4314,6314,9122,7004,8901,9603,606,23,413,,,,
Conakry 1905,4315,6315,9122,7011,8901,9603,-23,259,-9,,,,
Dealul Piscului 1930,4316,6316,9122,7022,8901,9603,103.25,-100.4,-307.19,,,,
Dealul Piscului 1970,4317,6317,9122,7024,8901,9603,28,-121,-77,,,,
NGN,4318,6318,9122,7030,8901,9603,-3.2,-5.7,2.8,,,,
KUDAMS,4319,6319,9122,7019,8901,9603,-20.8,11.3,2.4,,,,
WGS 72,4322,6322,9122,7043,8901,9603,0,0,5,,,,
WGS 72BE,4324,6324,9122,7043,8901,9606,0,0,1.9,0,0,0.814,-0.38
RGSPM06,4463,1038,9122,7019,8901,9603,0,0,0,,,,
RGM04,4470,1036,9122,7019,8901,9603,0,0,0,,,,
Cadastre 1997,4475,1037,9122,7022,8901,9603,-381.788,-57.501,-256.673,,,,
Mexico ITRF92,4483,1042,9122,7019,8901,9603,0,0,0,,,,
RRAF 1991,4558,1047,9122,7019,8901,9603,0,0,0,,,,
Antigua 1943,4601,6601,9122,7012,8901,9603,-255,-15,71,,,,
Dominica 1945,4602,6602,9122,7012,8901,9603,725,685,536,,,,
Grenada 1953,4603,6603,9122,7012,8901,9603,72,213.7,93,,,,
Montserrat 1958,4604,6604,9122,7012,8901,9603,174,359,365,,,,
St. Kitts 1955,4605,6605,9122,7012,8901,9603,9,183,236,,,,
St. Lucia 1955,4606,6606,9122,7012,8901,9603,-149,128,296,,,,
St. Vincent 1945,4607,6607,9122,7012,8901,9603,195.671,332.517,274.607,,,,
Hong Kong 1980,4611,6611,9122,7022,8901,9606,-162.619,-276.959,-161.764,0.067753,-2.243649,-1.158827,-1.094246
JGD2000,4612,6612,9122,7019,8901,9603,0,0,0,,,,
Segara,4613,6613,9122,7004,8901,9603,-403,684,41,,,,
QND95,4614,6614,9122,7022,8901,9606,-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,3.657065
Southeast Base,4615,6615,9122,7022,8901,9603,-499,-249,314,,,,
Marco Astro,4616,6616,9122,7022,8901,9603,-289,-124,60,,,,
NAD83(CSRS),4617,6140,9122,7019,8901,9603,0,0,0,,,,
SAD69,4618,6618,9122,7050,8901,9603,-66.87,4.37,-38.52,,,,
SWEREF99,4619,6619,9122,7019,8901,9603,0,0,0,,,,
Point 58,4620,6620,9122,7012,8901,9603,-106,-129,165,,,,
Fort Marigot,4621,6621,9122,7022,8901,9603,137,248,-430,,,,
Guadeloupe 1948,4622,6622,9122,7022,8901,9603,-467,-16,-300,,,,
CSG67,4623,6623,9122,7022,8901,9603,-186,230,110,,,,
RGFG95,4624,6624,9122,7019,8901,9603,0,0,0,,,,
Martinique 1938,4625,6625,9122,7022,8901,9603,186,482,151,,,,
Reunion,4626,6626,9122,7022,8901,9603,94,-948,-1262,,,,
RGR92,4627,6627,9122,7019,8901,9603,0,0,0,,,,
Tahiti 52,4628,6628,9122,7022,8901,9603,162,117,154,,,,
Tahaa 54,4629,6629,9122,7022,8901,9607,72.438,345.918,79.486,-1.6045,-0.8823,-0.5565,1.3746
IGN72 Nuku Hiva,4630,6630,9122,7022,8901,9603,84,274,65,,,,
K0 1949,4631,6631,9122,7022,8901,9603,145,-187,103,,,,
Combani 1950,4632,6632,9122,7022,8901,9603,-382,-59,-262,,,,
IGN56 Lifou,4633,6633,9122,7022,8901,9603,335.47,222.58,-230.94,,,,
IGN72 Grand Terre,4634,6634,9108,7022,8901,9603,-13,-348,292,,,,
ST87 Ouvea,4635,6635,9122,7022,8901,9606,-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798
Petrels 1972,4636,6636,9122,7022,8901,9603,365,194,166,,,,
Perroud 1950,4637,6637,9122,7022,8901,9603,325,154,172,,,,
Saint Pierre et Miquelon 1950,4638,6638,9122,7008,8901,9603,30,430,368,,,,
MOP78,4639,6639,9122,7022,8901,9603,253,-132,-127,,,,
RRAF 1991,4640,6640,9122,7030,8901,9603,0,0,0,,,,
IGN53 Mare,4641,6641,9122,7022,8901,9603,287.58,177.78,-135.41,,,,
ST84 Ile des Pins,4642,6642,9122,7022,8901,9603,-13,-348,292,,,,
ST71 Belep,4643,6643,9122,7022,8901,9606,-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7002
NEA74 Noumea,4644,6644,9122,7022,8901,9603,-10.18,-350.43,291.37,,,,
RGNC 1991,4645,6645,9122,7022,8901,9603,0,0,0,,,,
Grand Comoros,4646,6646,9122,7022,8901,9603,-963,510,-359,,,,
Reykjavik 1900,4657,6657,9122,7051,8901,9603,-28,199,5,,,,
Hjorsey 1955,4658,6658,9122,7022,8901,9603,-73,46,-86,,,,
ISN93,4659,6659,9122,7019,8901,9603,0,0,0,,,,
Helle 1954,4660,6660,9122,7022,8901,9606,982.6087,552.753,-540.873,6.6816266,-31.6114924,-19.84816,16.805
LKS92,4661,6661,9122,7019,8901,9603,0,0,0,,,,
IGN72 Grande Terre,4662,6634,9122,7022,8901,9603,-11.64,-348.6,291.98,,,,
Porto Santo 1995,4663,6663,9122,7022,8901,9603,-502.862,-247.438,312.724,,,,
Azores Oriental 1995,4664,6664,9122,7022,8901,9603,-204.619,140.176,55.226,,,,
Azores Central 1995,4665,6665,9122,7022,8901,9603,-106.226,166.366,-37.893,,,,
Lisbon 1890,4666,6666,9122,7004,8901,9603,508.088,-191.042,565.223,,,,
IKBD-92,4667,6667,9122,7030,8901,9603,0,0,0,,,,
European 1979,4668,6668,9122,7022,8901,9603,-86,-98,-119,,,,
LKS94,4669,6126,9122,7019,8901,9603,0,0,0,,,,
IGM95,4670,6670,9122,7030,8901,9603,0,0,0,,,,
Chatham 1971,4672,6672,9122,7022,8901,9603,175,-38,113,,,,
Chatham Islands 1979,4673,6673,9122,7022,8901,9607,174.05,-25.49,112.57,0,0,-0.554,0.2263
SIRGAS 2000,4674,6674,9122,7019,8901,9603,0,0,0,,,,
Guam 1963,4675,6675,9122,7008,8901,9603,-100,-248,259,,,,
Lao 1997,4678,6678,9122,7024,8901,9603,44.585,-131.212,-39.544,,,,
Jouik 1961,4679,6679,9122,7012,8901,9603,-80.01,253.26,291.19,,,,
Nouakchott 1965,4680,6680,9122,7012,8901,9603,124.5,-63.5,-281,,,,
Indian Bangladesh,4682,6682,9122,7015,8901,9603,289,734,257,,,,
PRS92,4683,6683,9122,7008,8901,9607,-127.62,-67.24,-47.04,3.068,-4.903,-1.578,-1.06
Gan 1970,4684,6684,9122,7022,8901,9603,-133,-321,50,,,,
MAGNA-SIRGAS,4686,6686,9122,7019,8901,9603,0,0,0,,,,
RGPF,4687,6687,9122,7019,8901,9607,0.072,-0.507,-0.245,0.0183,-0.0003,0.007,-0.0093
Fatu Iva 72,4688,6688,9122,7022,8901,9607,347.103,1078.125,2623.922,33.8875,-70.6773,9.3943,186.074
IGN63 Hiva Oa,4689,6689,9122,7022,8901,9607,410.721,55.049,80.746,-2.5779,-2.3514,-0.6664,17.3311
Tahiti 79,4690,6690,9122,7022,8901,9607,221.525,152.948,176.768,2.3847,1.3896,0.877,11.4741
Moorea 87,4691,6691,9122,7022,8901,9607,215.525,149.593,176.229,3.2624,1.692,1.1571,10.4773
Maupiti 83,4692,6692,9122,7022,8901,9603,217.037,86.959,23.956,,,,
Nakhl-e Ghanem,4693,6693,9122,7030,8901,9603,0,-0.15,0.68,,,,
POSGAR 94,4694,6694,9122,7030,8901,9603,0,0,0,,,,
Katanga 1955,4695,6695,9122,7008,8901,9603,-103.746,-9.614,-255.95,,,,
Kerguelen Island,4698,6698,9122,7022,8901,9603,145,-187,103,,,,
Le Pouce 1934,4699,6699,9122,7012,8901,9603,-770.1,158.4,-498.2,,,,
IGCB 1955,4701,6701,9122,7012,8901,9603,-79.9,-158,-168.9,,,,
Mauritania 1999,4702,6702,9122,7019,8901,9603,0,0,0,,,,
Egypt Gulf of Suez S-650 TL,4706,6706,9122,7020,8901,9603,-146.21,112.63,4.05,,,,
Astro B4 Sorol Atoll,4707,6707,9122,7022,8901,9603,114,-116,-333,,,,
Anna 1 Astro 1965,4708,6708,9122,7003,8901,9603,-491,-22,435,,,,
Astro Beacon 1945,4709,6709,9122,7022,8901,9603,145,75,-272,,,,
Astro DOS 71/4,4710,6710,9122,7022,8901,9603,-320,550,-494,,,,
Astronomic Stn 1952,4711,6711,9122,7022,8901,9603,124,-234,-25,,,,
Ascension Island 1958,4712,6712,9122,7022,8901,9603,-207,107,52,,,,
Ayabelle Lighthouse,4713,6713,9122,7012,8901,9603,-77,-128,142,,,,
Bellevue (IGN),4714,6714,9122,7022,8901,9603,-127,-769,472,,,,
Camp Area Astro,4715,6715,9122,7022,8901,9603,-104,-129,239,,,,
Canton Astro 1966,4716,6716,9122,7022,8901,9603,298,-304,-375,,,,
Cape Canaveral,4717,6717,9122,7008,8901,9603,-2,150,181,,,,
GUX 1 Astro,4718,6718,9122,7022,8901,9603,252,-209,-751,,,,
Easter Island 1967,4719,6719,9122,7022,8901,9603,211,147,111,,,,
Fiji 1986,4720,6720,9122,7043,8901,9606,0,0,4.5,0,0,0.554,0.2263
Fiji 1956,4721,6721,9122,7022,8901,9603,265.025,384.929,-194.046,,,,
South Georgia 1968,4722,6722,9122,7022,8901,9603,-794,119,-298,,,,
GCGD59,4723,6723,9122,7008,8901,9607,-179.483,-69.379,-27.584,7.862,-8.163,-6.042,-13.925
ISTS 073 Astro 1969,4724,6724,9122,7022,8901,9603,208,-435,-229,,,,
Johnston Island,4725,6725,9122,7022,8901,9603,191,-77,-204,,,,
L.C. 5 Astro,4726,6726,9122,7008,8901,9603,42,124,147,,,,
Midway Astro 1961,4727,6727,9122,7022,8901,9603,912,-58,1227,,,,
Pico De Las Nieves,4728,6728,9122,7022,8901,9603,-307,-92,127,,,,
Pitcairn Astro 1967,4729,6729,9122,7022,8901,9603,185,165,42,,,,
Santo (DOS),4730,6730,9122,7022,8901,9603,170,42,84,,,,
Viti Levu 1916,4731,6731,9122,7012,8901,9603,51,391,-36,,,,
Wake-Eniwetok 1960,4732,6732,9122,7053,8901,9603,101,52,-39,,,,
Wake Island 1952,4733,6733,9122,7022,8901,9603,276,-57,149,,,,
Tristan Astro 1968,4734,6734,9122,7022,8901,9603,-632,438,-609,,,,
Kusaie 1951,4735,6735,9122,7022,8901,9603,647,1777,-1124,,,,
Deception Island,4736,6736,9122,7012,8901,9603,260,12,-147,,,,
Korea 2000,4737,6737,9122,7019,8901,9603,0,0,0,,,,
Hong Kong 1963,4739,6739,9122,7022,8901,9603,-156,-271,-189,,,,
PZ-90,4740,6740,9122,7054,8901,9607,0,0,1.5,0,0,-0.076,0
Karbala 1979,4743,6743,9122,7012,8901,9603,70.995,-335.916,262.898,,,,
Nahrwan 1934,4744,6744,9122,7012,8901,9603,-242.2,-144.9,370.3,,,,
GR96,4747,6747,9122,7019,8901,9603,0,0,0,,,,
Vanua Levu 1915,4748,6748,9122,7055,8901,9603,51,391,-36,,,,
RGNC91-93,4749,6749,9122,7019,8901,9603,0,0,0,,,,
ST87 Ouvea,4750,6750,9122,7030,8901,9603,-56.263,16.136,-22.856,,,,
Viti Levu 1912,4752,6752,9122,7055,8901,9603,98,390,-22,,,,
LGD2006,4754,6754,9122,7022,8901,9603,-208.4058,-109.8777,-2.5764,,,,
DGN95,4755,6755,9122,7030,8901,9603,0,0,0,,,,
VN-2000,4756,6756,9122,7030,8901,9607,-191.90441429,-39.30318279,-111.45032835,-0.00928836,0.01975479,-0.00427372,0.252906278
JAD2001,4758,6758,9122,7030,8901,9603,0,0,0,,,,
NAD83(NSRS2007),4759,6759,9122,7019,8901,9603,0,0,0,,,,
HTRS96,4761,6761,9122,7019,8901,9603,0,0,0,,,,
BDA2000,4762,6762,9122,7030,8901,9603,0,0,0,,,,
Pitcairn 2006,4763,6763,9122,7030,8901,9603,0,0,0,,,,
RSRGD2000,4764,6764,9122,7019,8901,9603,0,0,0,,,,
Slovenia 1996,4765,6765,9122,7019,8901,9603,0,0,0,,,,
Bern 1898 (Bern),4801,6801,9122,7004,8907,9603,674.374,15.056,405.346,,,,
Bogota 1975 (Bogota),4802,6802,9122,7022,8904,9603,307,304,-318,,,,
Lisbon (Lisbon),4803,6803,9122,7022,8902,9603,-304.046,-60.576,103.64,,,,
Makassar (Jakarta),4804,6804,9122,7004,8908,9603,-587.8,519.75,145.76,,,,
MGI (Ferro),4805,6805,9122,7004,8909,9603,682,-203,480,,,,
Rome 1940,4806,6806,9122,7022,8906,9603,-225,-65,9,,,,
NTF (Paris),4807,6807,9105,7011,8903,9603,-168,-60,320,,,,
Tananarive (Paris),4810,6810,9105,7022,8903,9603,-189,-242,-91,,,,
Voirol 1875 (Paris),4811,6811,9105,7011,8903,9603,-73,-247,227,,,,
Batavia (Jakarta),4813,6813,9122,7004,8908,9603,-377,681,-50,,,,
Carthage (Paris),4816,6816,9105,7011,8903,9603,-263,6,431,,,,
Norsk,4817,6817,9122,7005,8913,9603,278,93,474,,,,
S-JTSK (Ferro),4818,6818,9122,7004,8909,9603,589,76,480,,,,
Nord Sahara 1959 (Paris),4819,6819,9105,7012,8903,9606,-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547
Segara (Jakarta),4820,6820,9122,7004,8908,9603,-403,684,41,,,,
Lisbon 1890 (Lisbon),4904,6904,9122,7004,8902,9603,508.088,-191.042,565.223,,,,
PTRA08,5013,1041,9122,7019,8901,9603,0,0,0,,,,
S-JTSK/05,5228,1052,9122,7004,8901,9607,572.213,85.334,461.94,-4.9732,-1.529,-5.2484,3.5378
S-JTSK/05 (Ferro),5229,1055,9122,7004,8909,9607,572.213,85.334,461.94,-4.9732,-1.529,-5.2484,3.5378
SLD99,5233,1053,9122,7015,8901,9607,-0.293,766.95,87.713,-0.195704,-1.695068,-3.473016,-0.039338
GDBD2009,5246,1056,9122,7019,8901,9603,0,0,0,,,,
TUREF,5252,1057,9122,7019,8901,9603,0,0,0,,,,
DRUKREF 03,5264,1058,9122,7019,8901,9603,0,0,0,,,,
ISN2004,5324,1060,9122,7019,8901,9603,0,0,0,,,,
POSGAR 2007,5340,1062,9122,7019,8901,9603,0,0,0,,,,
MARGEN,5354,1063,9122,7019,8901,9603,0,0,0,,,,
SIRGAS-Chile,5360,1064,9122,7019,8901,9603,0,0,0,,,,
CR05,5365,1065,9122,7030,8901,9603,0,0,0,,,,
MACARIO SOLIS,5371,1066,9122,7019,8901,9603,0,0,0,,,,
Peru96,5373,1067,9122,7019,8901,9603,0,0,0,,,,
SIRGAS-ROU98,5381,1068,9122,7030,8901,9603,0,0,0,,,,
SIRGAS_ES2007.8,5393,1069,9122,7019,8901,9603,0,0,0,,,,
Ocotepeque 1935,5451,1070,9122,7008,8901,9603,205,96,-98,,,,
RGAF09,5489,1073,9122,7019,8901,9603,0,0,0,,,,
SAD69(96),5527,1075,9122,7050,8901,9603,-67.35,3.88,-38.22,,,,
PNG94,5546,1076,9122,7019,8901,9603,0,0,0,,,,
UCS-2000,5561,1077,9122,7024,8901,9607,25,-141,-78.5,0,-0.35,-0.736,0
FEH2010,5593,1078,9122,7019,8901,9603,0,0,0,,,,
CIGD11,6135,1100,9122,7019,8901,9603,0,0,0,,,,
Nepal 1981,6207,1111,9122,7015,8901,9603,293.17,726.18,245.36,,,,
CGRS93,6311,1112,9122,7030,8901,9607,8.846,-4.394,-1.122,0.00237,0.146528,-0.130428,0.783926
Mexico ITRF2008,6365,1120,9122,7019,8901,9603,0,0,0,,,,
RDN2008,6706,1132,9122,7019,8901,9603,0,0,0,,,,
Aden 1925,6881,1135,9122,7012,8901,9603,-24,-203,268,,,,
Bekaa Valley 1920,6882,1137,9122,7012,8901,9603,-183,-15,273,,,,
Bioko,6883,1136,9122,7022,8901,9603,-235,-110,393,,,,
South East Island 1943,6892,1138,9122,7012,8901,9603,-43.685,-179.785,-267.721,,,,
Gambia,6894,1139,9122,7012,8901,9603,-63,176,185,,,,
ONGD14,7373,1147,9122,7019,8901,9603,0,0,0,,,,
St. Helena Tritan,7881,1173,9122,7030,8901,9603,-0.077,0.079,0.086,,,,
SHGD2015,7886,1174,9122,7019,8901,9603,0,0,0,,,,
DOS 1968,,,9122,7022,8901,9603,230,-199,-752,,,,
European 1950 (Mean France),,,9122,7022,8901,9603,-87,-96,-120,,,,
European 1950 (Spain and Portugal),,,9122,7022,8901,9603,-84,-107,-120,,,,
Luzon Mindanao,,,9122,7008,8901,9603,-133,-79,-72,,,,
NAD27 Alaska,,,9122,7008,8901,9603,-5,135,172,,,,
NAD27 Bahamas,,,9122,7008,8901,9603,-4,154,178,,,,
NAD27 Canada,,,9122,7008,8901,9603,-10,158,187,,,,
NAD27 Canal Zone,,,9122,7008,8901,9603,0,125,201,,,,
NAD27 Caribbean,,,9122,7008,8901,9603,-3,142,183,,,,
NAD27 Central,,,9122,7008,8901,9603,0,125,194,,,,
NAD27 Cuba,,,9122,7008,8901,9603,-9,152,178,,,,
NAD27 Greenland,,,9122,7008,8901,9603,11,114,195,,,,
NAD27 Mexico,,,9122,7008,8901,9603,-12,130,190,,,,
NAD27 San Salvador,,,9122,7008,8901,9603,1,140,165,,,,
Nahrwn Masirah Ilnd,,,9122,7012,8901,9603,-247,-148,369,,,,
Nahrwn Saudi Arbia,,,9122,7012,8901,9603,-231,-196,482,,,,
Pulkovo 1942 (2),,,9122,7024,8901,9603,28,-130,-95,,,,

1 Adindan HD1909 4201 3819 6201 1024 9122 7012 7004 8901 9603 9607 -162 595.48 -12 121.69 206 515.35 -4.115 2.9383 -0.853 -3.408
2 Afgooye TWD97 4205 3824 6205 1026 9122 7024 7019 8901 9603 -43 0 -163 0 45 0
3 Ain el Abd 1970 IGRS 4204 3889 6204 1029 9122 7022 7019 8901 9603 -150 0 -251 0 -2 0
4 Anna 1 Astro 1965 Hermannskogel 4708 3906 6708 1031 9122 7003 7004 8901 9603 -491 653 -22 -212 435 449
5 Arc 1950 MOLDREF99 4209 4023 6209 1032 9122 7012 7019 8901 9603 -143 0 -90 0 -294 0
6 Arc 1960 RGRDC 2005 4210 4046 6210 1033 9122 7012 7019 8901 9603 -160 0 -8 0 -300 0
7 Ascension Island 1958 SREF98 4712 4075 6712 1034 9122 7022 7019 8901 9603 -207 0 107 0 52 0
8 Astro B4 Sorol Atoll REGCAN95 4707 4081 6707 1035 9122 7022 7019 8901 9603 114 0 -116 0 -333 0
9 Astro Beacon 1945 GGRS 87 4709 4121 6709 6121 9122 7022 7019 8901 9603 145 -199.87 75 74.79 -272 246.62
10 Astro DOS 71/4 Finland Hayford 4710 4123 6710 6123 9122 7022 7022 8901 9603 -320 -78 550 -231 -494 -97
11 Astronomic Stn 1952 RT 90 4711 4124 6711 6124 9122 7022 7004 8901 9603 124 498 -234 -36 -25 568
12 Australian Geodetic 1966 Samboja 4202 4125 6202 6125 9122 9108 7003 7004 8901 9603 -133 -404.78 -48 685.68 148 45.47
13 Australian Geodetic 1984 Tete 4203 4127 6203 6127 9122 7003 7008 8901 9603 -134 -80 -48 -100 149 -228
14 Australian Geocentric 1994 (GDA94) Observatario 4283 4129 6283 6129 9122 7019 7008 8901 9603 0 -132 0 -110 0 -335
15 Austrian Moznet 4312 4130 6312 6130 9122 7004 7030 8901 9603 9607 594 0 84 0 471 0 0 0 0 0
16 Bellevue (IGN) Indian 1960 4714 4131 6714 6131 9122 7022 7015 8901 9603 -127 198 -769 881 472 317
17 Bermuda 1957 FD58 4216 4132 6216 6132 9122 7008 7012 8901 9603 -73 -241.54 213 -163.64 296 396.06
18 Bogota Observatory EST92 4218 4133 6218 6133 9122 7022 7019 8901 9603 9607 307 0.055 304 -0.541 -318 -0.185 -0.0183 0.0003 0.007 -0.014
19 Campo Inchauspe PSD93 4221 4134 6221 6134 9122 7022 7012 8901 9603 9606 -148 -180.624 136 -225.516 90 173.919 -0.81 -1.898 8.336 16.71006
20 Canton Astro 1966 Old Hawaiian 4716 4135 6716 6135 9122 7022 7008 8901 9603 298 61 -304 -285 -375 -181
21 Cape Puerto Rico 4222 4139 6222 6139 9122 7012 7008 8901 9603 -136 11 -108 72 -292 -101
22 Cape Canaveral NAD83(CSRS98) 4717 4140 6717 6140 9122 9108 7008 7019 8901 9603 -2 0 150 0 181 0
23 Carthage Israel 1993 4223 4141 6223 6141 9122 7012 7019 8901 9603 -263 -48 6 55 431 52
24 CH-1903 Locodjo 1965 4149 4142 6149 6142 9122 7004 7012 8901 9603 674 -125 15 53 405 467
25 Chatham 1971 Abidjan 1987 4672 4143 6672 6143 9122 7022 7012 8901 9603 175 -124.76 -38 53 113 466.79
26 Chua Astro Kalianpur 1937 4224 4144 6224 6144 9122 7022 7015 8901 9603 -134 214 229 804 -29 268
27 Corrego Alegre Kalianpur 1962 4225 4145 6225 6145 9122 7022 7044 8901 9603 -206 283 172 682 -6 231
28 Djakarta (Batavia) Kalianpur 1975 4211 4146 6211 6146 9122 7004 7045 8901 9603 -377 295 681 736 -50 257
29 DOS 1968 Hanoi 1972 4147 6147 9122 7022 7024 8901 9603 230 -17.51 -199 -108.32 -752 -62.39
30 Easter Island 1967 Hartebeeshoek94 4719 4148 6719 6148 9122 7022 7030 8901 9603 211 0 147 0 111 0
31 Egypt CH-1903 4199 4149 6199 6149 9122 7022 7004 8901 9603 -130 674.374 -117 15.056 -151 405.343
32 European 1950 CH1903+ 4230 4150 6230 6150 9122 7022 7004 8901 9603 -87 674.374 -98 15.056 -121 405.346
33 European 1950 (Mean France) CHTRF95 4151 6151 9122 7022 7019 8901 9603 -87 0 -96 0 -120 0
34 European 1950 (Spain and Portugal) NAD83(HARN) 4152 6152 9122 7022 7019 8901 9603 -84 0 -107 0 -120 0
35 European 1979 Rassadiran 4668 4153 6668 6153 9122 7022 7022 8901 9603 -86 -133.63 -98 -157.5 -119 -158.62
36 Finland Hayford ED50(ED77) 4123 4154 6123 6154 9122 7022 7022 8901 9603 -78 -117 -231 -132 -97 -164
37 Gandajika Base Dabola 1981 4233 4155 6233 6155 9122 7022 7011 8901 9603 -133 -83 -321 37 50 124
38 Geodetic Datum 1949 S-JTSK 4272 4156 6272 6156 9122 7022 7004 8901 9603 84 589 -22 76 209 480
39 GGRS 87 Naparima 1955 4121 4158 6121 6158 9122 7019 7022 8901 9603 -199.87 -0.465 74.79 372.095 246.62 171.736
40 Guam 1963 ELD79 4675 4159 6675 6159 9122 7008 7022 8901 9603 -100 -115.8543 -248 -99.0583 259 -152.4616
41 GUX 1 Astro Pampa del Castillo 4718 4161 6718 6161 9122 7022 7022 8901 9603 252 27.5 -209 14 -751 186.4
42 Hartebeeshoek94 Yemen NGN96 4148 4163 6148 6163 9122 7030 7030 8901 9603 0 0 0 0 0 0
43 Hermannskogel South Yemen 3906 4164 1031 6164 9122 7004 7024 8901 9603 653 -76 -212 -138 449 67
44 Hjorsey 1955 Bissau 4658 4165 6658 6165 9122 7022 7022 8901 9603 -73 -173 46 253 -86 27
45 Hong Kong 1963 Korean 1995 4739 4166 6739 6166 9122 7022 7030 8901 9603 -156 0 -271 0 -189 0
46 Hu-Tzu-Shan NZGD2000 4236 4167 6236 6167 9122 7022 7030 8901 9603 -634 0 -549 0 -201 0
47 Indian Bangladesh Accra 4682 4168 6682 6168 9122 7015 7029 8901 9603 289 -199 734 32 257 322
48 Indian Thailand American Samoa 1962 4240 4169 6240 6169 9122 7015 7008 8901 9603 214 -115 836 118 303 426
49 Israeli SIRGAS 1995 4281 4170 6281 6170 9122 7010 7019 8901 9603 -235 0 -85 0 264 0
50 Ireland 1965 RGF93 4299 4171 6299 6171 9122 7002 7019 8901 9603 506 0 -122 0 611 0
51 ISTS 073 Astro 1969 POSGAR 4724 4172 6724 6172 9122 9108 7022 7019 8901 9603 208 0 -435 0 -229 0
52 Johnston Island IRENET95 4725 4173 6725 6173 9122 7022 7019 8901 9603 191 0 -77 0 -204 0
53 Kandawala Sierra Leone 1968 4244 4175 6244 6175 9122 7015 7012 8901 9603 -97 -88 787 4 86 101
54 Kerguelen Island Australian Antarctic 4698 4176 6698 6176 9122 7022 7019 8901 9603 145 0 -187 0 103 0
55 Kertau 1948 S42 (83) 4245 4178 6245 6178 9122 7018 7024 8901 9603 -11 26 851 -121 5 -78
56 L.C. 5 Astro S42 4726 4179 6726 6179 9122 7008 7024 8901 9603 42 28 124 -121 147 -77
57 Liberia 1964 EST97 4251 4180 6251 6180 9122 7012 7019 8901 9603 -90 0 40 0 88 0
58 Luzon Mindanao Luxembourg 1930 4181 6181 9122 7008 7022 8901 9603 9607 -133 -189.6806 -79 18.3463 -72 -42.7695 0.33746 3.09264 -2.53861 0.4598
59 Luzon Philippines Observatorio 1966 4253 4182 6253 6182 9122 7008 7022 8901 9603 -133 -425 -77 -169 -51 81
60 Mahe 1971 Southwest Base 4256 4183 6256 6183 9122 7012 7022 8901 9603 41 -104 -220 167 -134 -38
61 Marco Astro Sao Braz 4616 4184 6616 6184 9122 7022 7022 8901 9603 -289 -203 -124 141 60 53
62 Massawa OSNI 1952 4262 4188 6262 6188 9122 7004 7001 8901 9603 9606 639 482.5 405 -130.6 60 564.6 -1.042 -0.214 -0.631 8.15
63 Merchich REGVEN 4261 4189 6261 6189 9122 7012 7019 8901 9603 31 0 146 0 47 0
64 Midway Astro 1961 POSGAR 98 4727 4190 6727 6190 9122 7022 7019 8901 9603 912 0 -58 0 1227 0
65 Minna Albanian 1987 4263 4191 6263 6191 9122 7012 7024 8901 9603 9607 -92 -44.183 -93 -0.58 122 -38.489 -2.3867 -2.7072 3.5196 -8.2703
66 NAD27 Alaska Douala 1948 4192 6192 9122 7008 7022 8901 9603 -5 -206.1 135 -174.7 172 -87.7
67 NAD27 Bahamas Manoca 1962 4193 6193 9122 7008 7011 8901 9603 -4 -70.9 154 -151.8 178 -41.4
68 NAD27 Canada Qornoq 1927 4194 6194 9122 7008 7022 8901 9603 -10 164 158 138 187 -189
69 NAD27 Canal Zone Scoresbysund 1952 4195 6195 9122 7008 7022 8901 9603 9606 0 105 125 326 201 -102.5 0 0 0.814 -0.6
70 NAD27 Caribbean Ammassalik 1958 4196 6196 9122 7008 7022 8901 9603 9606 -3 -45 142 417 183 -3.5 0 0 0.814 -0.6
71 NAD27 Central Egypt 4199 6199 9122 7008 7022 8901 9603 0 -130 125 -117 194 -151
72 NAD27 CONUS Pulkovo 1995 4267 4200 6267 6200 9122 7008 7024 8901 9603 9607 -8 24.47 160 -130.89 176 -81.56 0 0 -0.13 -0.22
73 NAD27 Cuba Adindan 4201 6201 9122 7008 7012 8901 9603 -9 -162 152 -12 178 206
74 NAD27 Greenland Australian Geodetic 1966 4202 6202 9122 7008 7003 8901 9603 11 -133 114 -48 195 148
75 NAD27 Mexico Australian Geodetic 1984 4203 6203 9122 7008 7003 8901 9603 -12 -134 130 -48 190 149
76 NAD27 San Salvador Ain el Abd 1970 4204 6204 9122 7008 7022 8901 9603 1 -150 140 -251 165 -2
77 NAD83 Afgooye 4269 4205 6269 6205 9122 7019 7024 8901 9603 0 -43 0 -163 0 45
78 Nahrwn Masirah Ilnd Lisbon 4207 6207 9122 7012 7022 8901 9603 -247 -304.046 -148 -60.576 369 103.64
79 Nahrwn Saudi Arbia Aratu 4208 6208 9122 7012 7022 8901 9603 -231 -151.99 -196 287.04 482 -147.45
80 Nahrwn United Arab Arc 1950 4270 4209 6270 6209 9122 7012 7012 8901 9603 -249 -143 -156 -90 381 -294
81 Naparima BWI Arc 1960 4271 4210 6271 6210 9122 7022 7012 8901 9603 -2 -160 374 -8 172 -300
82 NGO1948 Djakarta (Batavia) 4273 4211 6273 6211 9122 7005 7004 8901 9603 315 -377 -217 681 528 -50
83 NTF France Barbados 1938 4275 4212 6275 6212 9122 7011 7012 8901 9603 -168 31.95 -60 300.99 320 419.19
84 Norsk Beduaram 4817 4213 6817 6213 9122 7005 7011 8913 8901 9603 278 -106 93 -87 474 188
85 NZGD1949 Beijing 1954 4272 4214 6272 6214 9122 7022 7024 8901 9603 84 15.8 -22 -154.4 209 -82.3
86 NZGD2000 Bermuda 1957 4167 4216 6167 6216 9122 7030 7008 8901 9603 0 -73 0 213 0 296
87 Observatorio 1966 Bogota Observatory 4182 4218 6182 6218 9122 7022 7022 8901 9603 -425 307 -169 304 81 -318
88 Old Egyptian Bukit Rimpah 4229 4219 6229 6219 9122 7020 7004 8901 9603 -130 -384 110 664 -13 -48
89 Old Hawaiian Camacupa 4135 4220 6135 6220 9122 7008 7012 8901 9603 61 -50.9 -285 -347.6 -181 -231
90 Oman Campo Inchauspe 4232 4221 6232 6221 9122 7012 7022 8901 9603 -346 -148 -1 136 224 90
91 Ord Srvy Grt Britn Cape 4277 4222 6277 6222 9122 7001 7012 8901 9603 375 -136 -111 -108 431 -292
92 Pico De Las Nieves Carthage 4728 4223 6728 6223 9122 7022 7012 8901 9603 -307 -263 -92 6 127 431
93 Pitcairn Astro 1967 Chua Astro 4729 4224 6729 6224 9122 7022 7022 8901 9603 185 -134 165 229 42 -29
94 Potsdam Rauenberg DHDN Corrego Alegre 4314 4225 6314 6225 9122 7004 7022 8901 9603 606 -206 23 172 413 -6
95 Prov So Amrican 1956 Deir ez Zor 4248 4227 6248 6227 9122 7022 7011 8901 9603 -288 -190.421 175 8.532 -376 238.69
96 Prov So Chilean 1963 Old Egyptian 4254 4229 6254 6229 9122 7022 7020 8901 9603 16 -130 196 110 93 -13
97 Puerto Rico European 1950 4139 4230 6139 6230 9122 7008 7022 8901 9603 11 -87 72 -98 -101 -121
98 Pulkovo 1942 (1) ED87 4284 4231 6284 6231 9122 7024 7022 8901 9603 9606 28 -83.11 -130 -97.38 -95 -117.22 0.005693 -0.044698 0.044285 0.1218
99 Pulkovo 1942 (2) Oman 4232 6232 9122 7024 7012 8901 9603 28 -346 -130 -1 -95 224
100 Qatar National Gandajika Base 4285 4233 6285 6233 9122 7022 7022 8901 9603 -128 -133 -283 -321 22 50
101 Qornoq Hu-Tzu-Shan 4287 4236 6287 6236 9108 9122 7022 7022 8901 9603 164 -634 138 -549 -189 -201
102 Reunion HD72 4626 4237 6626 6237 9122 7022 7036 8901 9603 94 52.17 -948 -71.82 -1262 -14.9
103 Rijksdriehoeksmeting ID74 4289 4238 6289 6238 9122 7004 7021 8901 9603 593 -24 26 -15 478 5
104 Rome 1940 Indian 1954 4806 4239 6806 6239 9122 7022 7015 8906 8901 9603 -225 217 -65 823 9 299
105 RT 90 Indian Thailand 4124 4240 6124 6240 9122 7004 7015 8901 9603 498 214 -36 836 568 303
106 S42 JAD69 4179 4242 6179 6242 9122 7024 7008 8901 9603 28 70 -121 207 -77 389.5
107 Santo (DOS) Kandawala 4730 4244 6730 6244 9122 7022 7015 8901 9603 170 -97 42 787 84 86
108 Sao Braz Kertau 1948 4184 4245 6184 6245 9122 7022 7018 8901 9603 -203 -11 141 851 53 5
109 Sapper Hill 1943 KOC 4292 4246 6292 6246 9122 7022 7012 8901 9603 -355 -294.7 16 -200.1 74 525.5
110 Schwarzeck La Canoa 4293 4247 6293 6247 9122 7046 7022 8901 9603 616 -273.5 97 110.6 -251 -357.9
111 South American 1969 Prov So Amrican 1956 4291 4248 6291 6248 9108 9122 7036 7022 8901 9603 -57 -288 1 175 -41 -376
112 Southeast Base Leigon 4615 4250 6615 6250 9122 7022 7012 8901 9603 -499 -130 -249 29 314 364
113 Southwest Base Liberia 1964 4183 4251 6183 6251 9122 7022 7012 8901 9603 -104 -90 167 40 -38 88
114 Timbalai 1948 Luzon Philippines 4298 4253 6298 6253 9122 7015 7008 8901 9603 -689 -133 691 -77 -46 -51
115 Tokyo Prov So Chilean 1963 4301 4254 6301 6254 9122 7004 7022 8901 9603 -128 16 481 196 664 93
116 Tristan Astro 1968 Herat North 4734 4255 6734 6255 9122 7022 7022 8901 9603 -632 -333 438 -222 -609 114
117 Viti Levu 1916 Mahe 1971 4731 4256 6731 6256 9122 7012 7012 8901 9603 51 41 391 -220 -36 -134
118 Wake-Eniwetok 1960 Makassar 4732 4257 6732 6257 9122 7053 7004 8901 9603 101 -587.8 52 519.75 -39 145.76
119 WGS 72 ETRS 89 4322 4258 6322 6258 9122 7043 7019 8901 9603 0 0 0 0 5 0
120 Yacare Malongo 1987 4309 4259 6309 6259 9122 7022 7022 8901 9603 -155 -254.1 171 -5.36 37 -100.29
121 Zanderij Manoca 4311 4260 6311 6260 9122 9108 7022 7012 8901 9603 -265 -70.9 120 -151.8 -358 -41.4
122 Merchich 4261 6261 9122 7012 8901 9603 31 146 47
123 Massawa 4262 6262 9122 7004 8901 9603 639 405 60
124 Minna 4263 6263 9122 7012 8901 9603 -92 -93 122
125 Mhast 4264 6264 9122 7022 8901 9603 -252.95 -4.11 -96.38
126 Monte Mario 4265 6265 9122 7022 8901 9606 -104.1 -49.1 -9.9 0.971 -2.917 0.714 -11.68
127 M'poraloko 4266 6266 9122 7011 8901 9603 -74 -130 42
128 NAD27 CONUS 4267 6267 9122 7008 8901 9603 -8 160 176
129 NAD83 4269 6269 9122 7019 8901 9603 0 0 0
130 Nahrwn United Arab 4270 6270 9122 7012 8901 9603 -249 -156 381
131 Naparima BWI 4271 6271 9122 7022 8901 9603 -2 374 172
132 Geodetic Datum 1949 4272 6272 9122 7022 8901 9603 84 -22 209
133 NZGD1949 4272 6272 9122 7022 8901 9603 84 -22 209
134 NGO1948 4273 6273 9122 7005 8901 9603 315 -217 528
135 Datum 73 4274 6274 9122 7022 8901 9603 -223.237 110.193 36.649
136 NTF France 4275 6275 9122 7011 8901 9603 -168 -60 320
137 Ord Srvy Grt Britn 4277 6277 9122 7001 8901 9603 375 -111 431
138 Israeli 4281 6281 9122 7010 8901 9603 -235 -85 264
139 Pointe Noire 4282 6282 9122 7011 8901 9603 -148 51 -291
140 Australian Geocentric 1994 (GDA94) 4283 6283 9122 7019 8901 9603 0 0 0
141 Pulkovo 1942 (1) 4284 6284 9122 7024 8901 9603 28 -130 -95
142 Qatar National 4285 6285 9122 7022 8901 9603 -128 -283 22
143 Qornoq 4287 6287 9108 7022 8901 9603 164 138 -189
144 Rijksdriehoeksmeting 4289 6289 9122 7004 8901 9603 593 26 478
145 South American 1969 4291 6291 9108 7036 8901 9603 -57 1 -41
146 Sapper Hill 1943 4292 6292 9122 7022 8901 9603 -355 16 74
147 Schwarzeck 4293 6293 9122 7046 8901 9603 616 97 -251
148 Segora 4294 6294 9108 7004 8901 9603 -403 684 41
149 Tananarive 4297 6297 9122 7022 8901 9603 -189 -242 -91
150 Timbalai 1948 4298 6298 9122 7015 8901 9603 -689 691 -46
151 Ireland 1965 4299 6299 9122 7002 8901 9603 506 -122 611
152 TM75 4300 6300 9122 7002 8901 9606 482.5 -130.6 564.6 -1.042 -0.214 -0.631 8.15
153 Tokyo 4301 6301 9122 7004 8901 9603 -128 481 664
154 Trinidad 1903 4302 6302 9122 7007 8901 9603 -61.702 284.488 472.052
155 Voirol 1875 4304 6304 9122 7011 8901 9603 -73 -247 227
156 Nord Sahara 1959 4307 6307 9122 7012 8901 9606 -209.3622 -87.8162 404.6198 0.0046 3.4784 0.5805 -1.4547
157 Yacare 4309 6309 9122 7022 8901 9603 -155 171 37
158 Yoff 4310 6310 9122 7011 8901 9603 -30 190 89
159 Zanderij 4311 6311 9122 7022 8901 9603 -265 120 -358
160 Austrian 4312 6312 9122 7004 8901 9603 594 84 471
161 Belge 1972 4313 6313 9122 7022 8901 9607 -106.8686 52.2978 -103.7239 -0.3366 0.457 -1.8422 -1.2747
162 Potsdam Rauenberg DHDN 4314 6314 9122 7004 8901 9603 606 23 413
163 Conakry 1905 4315 6315 9122 7011 8901 9603 -23 259 -9
164 Dealul Piscului 1930 4316 6316 9122 7022 8901 9603 103.25 -100.4 -307.19
165 Dealul Piscului 1970 4317 6317 9122 7024 8901 9603 28 -121 -77
166 NGN 4318 6318 9122 7030 8901 9603 -3.2 -5.7 2.8
167 KUDAMS 4319 6319 9122 7019 8901 9603 -20.8 11.3 2.4
168 WGS 72 4322 6322 9122 7043 8901 9603 0 0 5
169 WGS 72BE 4324 6324 9122 7043 8901 9606 0 0 1.9 0 0 0.814 -0.38
170 RGSPM06 4463 1038 9122 7019 8901 9603 0 0 0
171 RGM04 4470 1036 9122 7019 8901 9603 0 0 0
172 Cadastre 1997 4475 1037 9122 7022 8901 9603 -381.788 -57.501 -256.673
173 Mexico ITRF92 4483 1042 9122 7019 8901 9603 0 0 0
174 RRAF 1991 4558 1047 9122 7019 8901 9603 0 0 0
175 Antigua 1943 4601 6601 9122 7012 8901 9603 -255 -15 71
176 Dominica 1945 4602 6602 9122 7012 8901 9603 725 685 536
177 Grenada 1953 4603 6603 9122 7012 8901 9603 72 213.7 93
178 Montserrat 1958 4604 6604 9122 7012 8901 9603 174 359 365
179 St. Kitts 1955 4605 6605 9122 7012 8901 9603 9 183 236
180 St. Lucia 1955 4606 6606 9122 7012 8901 9603 -149 128 296
181 St. Vincent 1945 4607 6607 9122 7012 8901 9603 195.671 332.517 274.607
182 Hong Kong 1980 4611 6611 9122 7022 8901 9606 -162.619 -276.959 -161.764 0.067753 -2.243649 -1.158827 -1.094246
183 JGD2000 4612 6612 9122 7019 8901 9603 0 0 0
184 Segara 4613 6613 9122 7004 8901 9603 -403 684 41
185 QND95 4614 6614 9122 7022 8901 9606 -119.4248 -303.65872 -11.00061 1.164298 0.174458 1.096259 3.657065
186 Southeast Base 4615 6615 9122 7022 8901 9603 -499 -249 314
187 Marco Astro 4616 6616 9122 7022 8901 9603 -289 -124 60
188 NAD83(CSRS) 4617 6140 9122 7019 8901 9603 0 0 0
189 SAD69 4618 6618 9122 7050 8901 9603 -66.87 4.37 -38.52
190 SWEREF99 4619 6619 9122 7019 8901 9603 0 0 0
191 Point 58 4620 6620 9122 7012 8901 9603 -106 -129 165
192 Fort Marigot 4621 6621 9122 7022 8901 9603 137 248 -430
193 Guadeloupe 1948 4622 6622 9122 7022 8901 9603 -467 -16 -300
194 CSG67 4623 6623 9122 7022 8901 9603 -186 230 110
195 RGFG95 4624 6624 9122 7019 8901 9603 0 0 0
196 Martinique 1938 4625 6625 9122 7022 8901 9603 186 482 151
197 Reunion 4626 6626 9122 7022 8901 9603 94 -948 -1262
198 RGR92 4627 6627 9122 7019 8901 9603 0 0 0
199 Tahiti 52 4628 6628 9122 7022 8901 9603 162 117 154
200 Tahaa 54 4629 6629 9122 7022 8901 9607 72.438 345.918 79.486 -1.6045 -0.8823 -0.5565 1.3746
201 IGN72 Nuku Hiva 4630 6630 9122 7022 8901 9603 84 274 65
202 K0 1949 4631 6631 9122 7022 8901 9603 145 -187 103
203 Combani 1950 4632 6632 9122 7022 8901 9603 -382 -59 -262
204 IGN56 Lifou 4633 6633 9122 7022 8901 9603 335.47 222.58 -230.94
205 IGN72 Grand Terre 4634 6634 9108 7022 8901 9603 -13 -348 292
206 ST87 Ouvea 4635 6635 9122 7022 8901 9606 -122.383 -188.696 103.344 3.5107 -4.9668 -5.7047 4.4798
207 Petrels 1972 4636 6636 9122 7022 8901 9603 365 194 166
208 Perroud 1950 4637 6637 9122 7022 8901 9603 325 154 172
209 Saint Pierre et Miquelon 1950 4638 6638 9122 7008 8901 9603 30 430 368
210 MOP78 4639 6639 9122 7022 8901 9603 253 -132 -127
211 RRAF 1991 4640 6640 9122 7030 8901 9603 0 0 0
212 IGN53 Mare 4641 6641 9122 7022 8901 9603 287.58 177.78 -135.41
213 ST84 Ile des Pins 4642 6642 9122 7022 8901 9603 -13 -348 292
214 ST71 Belep 4643 6643 9122 7022 8901 9606 -480.26 -438.32 -643.429 16.3119 20.1721 -4.0349 -111.7002
215 NEA74 Noumea 4644 6644 9122 7022 8901 9603 -10.18 -350.43 291.37
216 RGNC 1991 4645 6645 9122 7022 8901 9603 0 0 0
217 Grand Comoros 4646 6646 9122 7022 8901 9603 -963 510 -359
218 Reykjavik 1900 4657 6657 9122 7051 8901 9603 -28 199 5
219 Hjorsey 1955 4658 6658 9122 7022 8901 9603 -73 46 -86
220 ISN93 4659 6659 9122 7019 8901 9603 0 0 0
221 Helle 1954 4660 6660 9122 7022 8901 9606 982.6087 552.753 -540.873 6.6816266 -31.6114924 -19.84816 16.805
222 LKS92 4661 6661 9122 7019 8901 9603 0 0 0
223 IGN72 Grande Terre 4662 6634 9122 7022 8901 9603 -11.64 -348.6 291.98
224 Porto Santo 1995 4663 6663 9122 7022 8901 9603 -502.862 -247.438 312.724
225 Azores Oriental 1995 4664 6664 9122 7022 8901 9603 -204.619 140.176 55.226
226 Azores Central 1995 4665 6665 9122 7022 8901 9603 -106.226 166.366 -37.893
227 Lisbon 1890 4666 6666 9122 7004 8901 9603 508.088 -191.042 565.223
228 IKBD-92 4667 6667 9122 7030 8901 9603 0 0 0
229 European 1979 4668 6668 9122 7022 8901 9603 -86 -98 -119
230 LKS94 4669 6126 9122 7019 8901 9603 0 0 0
231 IGM95 4670 6670 9122 7030 8901 9603 0 0 0
232 Chatham 1971 4672 6672 9122 7022 8901 9603 175 -38 113
233 Chatham Islands 1979 4673 6673 9122 7022 8901 9607 174.05 -25.49 112.57 0 0 -0.554 0.2263
234 SIRGAS 2000 4674 6674 9122 7019 8901 9603 0 0 0
235 Guam 1963 4675 6675 9122 7008 8901 9603 -100 -248 259
236 Lao 1997 4678 6678 9122 7024 8901 9603 44.585 -131.212 -39.544
237 Jouik 1961 4679 6679 9122 7012 8901 9603 -80.01 253.26 291.19
238 Nouakchott 1965 4680 6680 9122 7012 8901 9603 124.5 -63.5 -281
239 Indian Bangladesh 4682 6682 9122 7015 8901 9603 289 734 257
240 PRS92 4683 6683 9122 7008 8901 9607 -127.62 -67.24 -47.04 3.068 -4.903 -1.578 -1.06
241 Gan 1970 4684 6684 9122 7022 8901 9603 -133 -321 50
242 MAGNA-SIRGAS 4686 6686 9122 7019 8901 9603 0 0 0
243 RGPF 4687 6687 9122 7019 8901 9607 0.072 -0.507 -0.245 0.0183 -0.0003 0.007 -0.0093
244 Fatu Iva 72 4688 6688 9122 7022 8901 9607 347.103 1078.125 2623.922 33.8875 -70.6773 9.3943 186.074
245 IGN63 Hiva Oa 4689 6689 9122 7022 8901 9607 410.721 55.049 80.746 -2.5779 -2.3514 -0.6664 17.3311
246 Tahiti 79 4690 6690 9122 7022 8901 9607 221.525 152.948 176.768 2.3847 1.3896 0.877 11.4741
247 Moorea 87 4691 6691 9122 7022 8901 9607 215.525 149.593 176.229 3.2624 1.692 1.1571 10.4773
248 Maupiti 83 4692 6692 9122 7022 8901 9603 217.037 86.959 23.956
249 Nakhl-e Ghanem 4693 6693 9122 7030 8901 9603 0 -0.15 0.68
250 POSGAR 94 4694 6694 9122 7030 8901 9603 0 0 0
251 Katanga 1955 4695 6695 9122 7008 8901 9603 -103.746 -9.614 -255.95
252 Kerguelen Island 4698 6698 9122 7022 8901 9603 145 -187 103
253 Le Pouce 1934 4699 6699 9122 7012 8901 9603 -770.1 158.4 -498.2
254 IGCB 1955 4701 6701 9122 7012 8901 9603 -79.9 -158 -168.9
255 Mauritania 1999 4702 6702 9122 7019 8901 9603 0 0 0
256 Egypt Gulf of Suez S-650 TL 4706 6706 9122 7020 8901 9603 -146.21 112.63 4.05
257 Astro B4 Sorol Atoll 4707 6707 9122 7022 8901 9603 114 -116 -333
258 Anna 1 Astro 1965 4708 6708 9122 7003 8901 9603 -491 -22 435
259 Astro Beacon 1945 4709 6709 9122 7022 8901 9603 145 75 -272
260 Astro DOS 71/4 4710 6710 9122 7022 8901 9603 -320 550 -494
261 Astronomic Stn 1952 4711 6711 9122 7022 8901 9603 124 -234 -25
262 Ascension Island 1958 4712 6712 9122 7022 8901 9603 -207 107 52
263 Ayabelle Lighthouse 4713 6713 9122 7012 8901 9603 -77 -128 142
264 Bellevue (IGN) 4714 6714 9122 7022 8901 9603 -127 -769 472
265 Camp Area Astro 4715 6715 9122 7022 8901 9603 -104 -129 239
266 Canton Astro 1966 4716 6716 9122 7022 8901 9603 298 -304 -375
267 Cape Canaveral 4717 6717 9122 7008 8901 9603 -2 150 181
268 GUX 1 Astro 4718 6718 9122 7022 8901 9603 252 -209 -751
269 Easter Island 1967 4719 6719 9122 7022 8901 9603 211 147 111
270 Fiji 1986 4720 6720 9122 7043 8901 9606 0 0 4.5 0 0 0.554 0.2263
271 Fiji 1956 4721 6721 9122 7022 8901 9603 265.025 384.929 -194.046
272 South Georgia 1968 4722 6722 9122 7022 8901 9603 -794 119 -298
273 GCGD59 4723 6723 9122 7008 8901 9607 -179.483 -69.379 -27.584 7.862 -8.163 -6.042 -13.925
274 ISTS 073 Astro 1969 4724 6724 9122 7022 8901 9603 208 -435 -229
275 Johnston Island 4725 6725 9122 7022 8901 9603 191 -77 -204
276 L.C. 5 Astro 4726 6726 9122 7008 8901 9603 42 124 147
277 Midway Astro 1961 4727 6727 9122 7022 8901 9603 912 -58 1227
278 Pico De Las Nieves 4728 6728 9122 7022 8901 9603 -307 -92 127
279 Pitcairn Astro 1967 4729 6729 9122 7022 8901 9603 185 165 42
280 Santo (DOS) 4730 6730 9122 7022 8901 9603 170 42 84
281 Viti Levu 1916 4731 6731 9122 7012 8901 9603 51 391 -36
282 Wake-Eniwetok 1960 4732 6732 9122 7053 8901 9603 101 52 -39
283 Wake Island 1952 4733 6733 9122 7022 8901 9603 276 -57 149
284 Tristan Astro 1968 4734 6734 9122 7022 8901 9603 -632 438 -609
285 Kusaie 1951 4735 6735 9122 7022 8901 9603 647 1777 -1124
286 Deception Island 4736 6736 9122 7012 8901 9603 260 12 -147
287 Korea 2000 4737 6737 9122 7019 8901 9603 0 0 0
288 Hong Kong 1963 4739 6739 9122 7022 8901 9603 -156 -271 -189
289 PZ-90 4740 6740 9122 7054 8901 9607 0 0 1.5 0 0 -0.076 0
290 Karbala 1979 4743 6743 9122 7012 8901 9603 70.995 -335.916 262.898
291 Nahrwan 1934 4744 6744 9122 7012 8901 9603 -242.2 -144.9 370.3
292 GR96 4747 6747 9122 7019 8901 9603 0 0 0
293 Vanua Levu 1915 4748 6748 9122 7055 8901 9603 51 391 -36
294 RGNC91-93 4749 6749 9122 7019 8901 9603 0 0 0
295 ST87 Ouvea 4750 6750 9122 7030 8901 9603 -56.263 16.136 -22.856
296 Viti Levu 1912 4752 6752 9122 7055 8901 9603 98 390 -22
297 LGD2006 4754 6754 9122 7022 8901 9603 -208.4058 -109.8777 -2.5764
298 DGN95 4755 6755 9122 7030 8901 9603 0 0 0
299 VN-2000 4756 6756 9122 7030 8901 9607 -191.90441429 -39.30318279 -111.45032835 -0.00928836 0.01975479 -0.00427372 0.252906278
300 JAD2001 4758 6758 9122 7030 8901 9603 0 0 0
301 NAD83(NSRS2007) 4759 6759 9122 7019 8901 9603 0 0 0
302 HTRS96 4761 6761 9122 7019 8901 9603 0 0 0
303 BDA2000 4762 6762 9122 7030 8901 9603 0 0 0
304 Pitcairn 2006 4763 6763 9122 7030 8901 9603 0 0 0
305 RSRGD2000 4764 6764 9122 7019 8901 9603 0 0 0
306 Slovenia 1996 4765 6765 9122 7019 8901 9603 0 0 0
307 Bern 1898 (Bern) 4801 6801 9122 7004 8907 9603 674.374 15.056 405.346
308 Bogota 1975 (Bogota) 4802 6802 9122 7022 8904 9603 307 304 -318
309 Lisbon (Lisbon) 4803 6803 9122 7022 8902 9603 -304.046 -60.576 103.64
310 Makassar (Jakarta) 4804 6804 9122 7004 8908 9603 -587.8 519.75 145.76
311 MGI (Ferro) 4805 6805 9122 7004 8909 9603 682 -203 480
312 Rome 1940 4806 6806 9122 7022 8906 9603 -225 -65 9
313 NTF (Paris) 4807 6807 9105 7011 8903 9603 -168 -60 320
314 Tananarive (Paris) 4810 6810 9105 7022 8903 9603 -189 -242 -91
315 Voirol 1875 (Paris) 4811 6811 9105 7011 8903 9603 -73 -247 227
316 Batavia (Jakarta) 4813 6813 9122 7004 8908 9603 -377 681 -50
317 Carthage (Paris) 4816 6816 9105 7011 8903 9603 -263 6 431
318 Norsk 4817 6817 9122 7005 8913 9603 278 93 474
319 S-JTSK (Ferro) 4818 6818 9122 7004 8909 9603 589 76 480
320 Nord Sahara 1959 (Paris) 4819 6819 9105 7012 8903 9606 -209.3622 -87.8162 404.6198 0.0046 3.4784 0.5805 -1.4547
321 Segara (Jakarta) 4820 6820 9122 7004 8908 9603 -403 684 41
322 Lisbon 1890 (Lisbon) 4904 6904 9122 7004 8902 9603 508.088 -191.042 565.223
323 PTRA08 5013 1041 9122 7019 8901 9603 0 0 0
324 S-JTSK/05 5228 1052 9122 7004 8901 9607 572.213 85.334 461.94 -4.9732 -1.529 -5.2484 3.5378
325 S-JTSK/05 (Ferro) 5229 1055 9122 7004 8909 9607 572.213 85.334 461.94 -4.9732 -1.529 -5.2484 3.5378
326 SLD99 5233 1053 9122 7015 8901 9607 -0.293 766.95 87.713 -0.195704 -1.695068 -3.473016 -0.039338
327 GDBD2009 5246 1056 9122 7019 8901 9603 0 0 0
328 TUREF 5252 1057 9122 7019 8901 9603 0 0 0
329 DRUKREF 03 5264 1058 9122 7019 8901 9603 0 0 0
330 ISN2004 5324 1060 9122 7019 8901 9603 0 0 0
331 POSGAR 2007 5340 1062 9122 7019 8901 9603 0 0 0
332 MARGEN 5354 1063 9122 7019 8901 9603 0 0 0
333 SIRGAS-Chile 5360 1064 9122 7019 8901 9603 0 0 0
334 CR05 5365 1065 9122 7030 8901 9603 0 0 0
335 MACARIO SOLIS 5371 1066 9122 7019 8901 9603 0 0 0
336 Peru96 5373 1067 9122 7019 8901 9603 0 0 0
337 SIRGAS-ROU98 5381 1068 9122 7030 8901 9603 0 0 0
338 SIRGAS_ES2007.8 5393 1069 9122 7019 8901 9603 0 0 0
339 Ocotepeque 1935 5451 1070 9122 7008 8901 9603 205 96 -98
340 RGAF09 5489 1073 9122 7019 8901 9603 0 0 0
341 SAD69(96) 5527 1075 9122 7050 8901 9603 -67.35 3.88 -38.22
342 PNG94 5546 1076 9122 7019 8901 9603 0 0 0
343 UCS-2000 5561 1077 9122 7024 8901 9607 25 -141 -78.5 0 -0.35 -0.736 0
344 FEH2010 5593 1078 9122 7019 8901 9603 0 0 0
345 CIGD11 6135 1100 9122 7019 8901 9603 0 0 0
346 Nepal 1981 6207 1111 9122 7015 8901 9603 293.17 726.18 245.36
347 CGRS93 6311 1112 9122 7030 8901 9607 8.846 -4.394 -1.122 0.00237 0.146528 -0.130428 0.783926
348 Mexico ITRF2008 6365 1120 9122 7019 8901 9603 0 0 0
349 RDN2008 6706 1132 9122 7019 8901 9603 0 0 0
350 Aden 1925 6881 1135 9122 7012 8901 9603 -24 -203 268
351 Bekaa Valley 1920 6882 1137 9122 7012 8901 9603 -183 -15 273
352 Bioko 6883 1136 9122 7022 8901 9603 -235 -110 393
353 South East Island 1943 6892 1138 9122 7012 8901 9603 -43.685 -179.785 -267.721
354 Gambia 6894 1139 9122 7012 8901 9603 -63 176 185
355 ONGD14 7373 1147 9122 7019 8901 9603 0 0 0
356 St. Helena Tritan 7881 1173 9122 7030 8901 9603 -0.077 0.079 0.086
357 SHGD2015 7886 1174 9122 7019 8901 9603 0 0 0
358 DOS 1968 9122 7022 8901 9603 230 -199 -752
359 European 1950 (Mean France) 9122 7022 8901 9603 -87 -96 -120
360 European 1950 (Spain and Portugal) 9122 7022 8901 9603 -84 -107 -120
361 Luzon Mindanao 9122 7008 8901 9603 -133 -79 -72
362 NAD27 Alaska 9122 7008 8901 9603 -5 135 172
363 NAD27 Bahamas 9122 7008 8901 9603 -4 154 178
364 NAD27 Canada 9122 7008 8901 9603 -10 158 187
365 NAD27 Canal Zone 9122 7008 8901 9603 0 125 201
366 NAD27 Caribbean 9122 7008 8901 9603 -3 142 183
367 NAD27 Central 9122 7008 8901 9603 0 125 194
368 NAD27 Cuba 9122 7008 8901 9603 -9 152 178
369 NAD27 Greenland 9122 7008 8901 9603 11 114 195
370 NAD27 Mexico 9122 7008 8901 9603 -12 130 190
371 NAD27 San Salvador 9122 7008 8901 9603 1 140 165
372 Nahrwn Masirah Ilnd 9122 7012 8901 9603 -247 -148 369
373 Nahrwn Saudi Arbia 9122 7012 8901 9603 -231 -196 482
374 Pulkovo 1942 (2) 9122 7024 8901 9603 28 -130 -95

File diff suppressed because it is too large Load Diff

View File

@ -3,10 +3,12 @@ Name=GPXSee
Comment=GPS log file viewer and analyzer
Comment[cz]=Prohlížeč a analyzátor GPS logů
Comment[fi]=Ohjelma GPS-lokien katseluun ja analysointiin
Comment[pl]=Przeglądarka i analizator plików dziennika GPS
Comment[ru]=Программа для просмотра и анализа GPS логов
Comment[sv]=GPS-loggfilsläsare och analysator
Exec=gpxsee %F
Icon=gpxsee
Terminal=false
Type=Application
Categories=Graphics;Viewer;Maps;Qt;
MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;
MimeType=application/gpx+xml;application/tcx+xml;application/vnd.ant.fit;application/vnd.google-earth.kml+xml;application/vnd.fai.igc;application/vnd.nmea.nmea;application/vnd.oziexplorer.plt;application/vnd.oziexplorer.rte;application/vnd.oziexplorer.wpt;

View File

@ -5,14 +5,14 @@
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "5.0"
!define VERSION "5.13"
; The file to write
OutFile "GPXSee-${VERSION}.exe"
; Compression method
SetCompressor /SOLID lzma
; Required execution level
; Required execution level
RequestExecutionLevel admin
; The default installation directory
@ -26,7 +26,7 @@ VIAddVersionKey "ProductName" "GPXSee"
VIAddVersionKey "LegalCopyright" "GPXSee project"
VIAddVersionKey "FileDescription" "GPXSee installer"
; Registry key to check for directory (so if you install again, it will
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\GPXSee" "Install_Dir"
@ -39,11 +39,14 @@ InstallDirRegKey HKLM "Software\GPXSee" "Install_Dir"
!define REGFIT "GPXSee.fit"
!define REGIGC "GPXSee.igc"
!define REGNMEA "GPXSee.nmea"
!define REGPLT "GPXSee.plt"
!define REGRTE "GPXSee.rte"
!define REGWPT "GPXSee.wpt"
; Start menu page configuration
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GPXSee"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "GPXSee"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GPXSee"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "GPXSee"
Var StartMenuFolder
@ -77,10 +80,10 @@ FunctionEnd
Section "GPXSee" SEC_APP
SectionIn RO
; Set output path to the installation directory.
; Set output path to the installation directory
SetOutPath $INSTDIR
; Put the files there
File "gpxsee.exe"
File /r "maps"
@ -88,14 +91,14 @@ Section "GPXSee" SEC_APP
; Create start menu entry and add links
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GPXSee.lnk" "$INSTDIR\gpxsee.exe"
!insertmacro MUI_STARTMENU_WRITE_END
; Create the uninstaller
WriteUninstaller "$INSTDIR\uninstall.exe"
WriteUninstaller "$INSTDIR\uninstall.exe"
; Write the installation path into the registry
DetailPrint "Registering application..."
@ -113,28 +116,40 @@ Section "GPXSee" SEC_APP
DetailPrint "Associating file types..."
WriteRegStr HKCR ".gpx" "" "${REGGPX}"
WriteRegStr HKCR "${REGGPX}" "" "GPS Exchange Format"
WriteRegStr HKCR "${REGGPX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,1"
WriteRegStr HKCR "${REGGPX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,2"
WriteRegStr HKCR "${REGGPX}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".tcx" "" "${REGTCX}"
WriteRegStr HKCR "${REGTCX}" "" "Training Center XML"
WriteRegStr HKCR "${REGTCX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,2"
WriteRegStr HKCR "${REGTCX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,3"
WriteRegStr HKCR "${REGTCX}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".kml" "" "${REGKML}"
WriteRegStr HKCR "${REGKML}" "" "Keyhole Markup Language"
WriteRegStr HKCR "${REGKML}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,3"
WriteRegStr HKCR "${REGKML}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,4"
WriteRegStr HKCR "${REGKML}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".fit" "" "${REGFIT}"
WriteRegStr HKCR "${REGFIT}" "" "Flexible and Interoperable Data Transfer"
WriteRegStr HKCR "${REGFIT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,4"
WriteRegStr HKCR "${REGFIT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,5"
WriteRegStr HKCR "${REGFIT}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".igc" "" "${REGIGC}"
WriteRegStr HKCR "${REGIGC}" "" "Flight Recorder Data Format"
WriteRegStr HKCR "${REGIGC}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,5"
WriteRegStr HKCR "${REGIGC}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,6"
WriteRegStr HKCR "${REGIGC}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".nmea" "" "${REGNMEA}"
WriteRegStr HKCR "${REGNMEA}" "" "NMEA 0183 data"
WriteRegStr HKCR "${REGNMEA}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,6"
WriteRegStr HKCR "${REGNMEA}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,7"
WriteRegStr HKCR "${REGNMEA}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".plt" "" "${REGPLT}"
WriteRegStr HKCR "${REGPLT}" "" "OziExplorer Track Point File"
WriteRegStr HKCR "${REGPLT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,8"
WriteRegStr HKCR "${REGPLT}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".rte" "" "${REGRTE}"
WriteRegStr HKCR "${REGRTE}" "" "OziExplorer Route File"
WriteRegStr HKCR "${REGRTE}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,9"
WriteRegStr HKCR "${REGRTE}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".wpt" "" "${REGWPT}"
WriteRegStr HKCR "${REGWPT}" "" "OziExplorer Waypoint File"
WriteRegStr HKCR "${REGWPT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,1"
WriteRegStr HKCR "${REGWPT}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -152,7 +167,7 @@ Section "QT framework" SEC_QT
File /r "platforms"
File /r "imageformats"
File /r "printsupport"
SectionEnd
Section "MSVC runtime" SEC_MSVC
@ -215,6 +230,11 @@ SectionGroup "Localization" SEC_LOCALIZATION
File /oname=translations\gpxsee_de.qm translations\gpxsee_de.qm
File /oname=translations\qt_de.qm translations\qt_de.qm
SectionEnd
Section "Polish"
CreateDirectory "$INSTDIR\translations"
File /oname=translations\gpxsee_pl.qm translations\gpxsee_pl.qm
File /oname=translations\qt_pl.qm translations\qt_pl.qm
SectionEnd
Section "Russian"
CreateDirectory "$INSTDIR\translations"
File /oname=translations\gpxsee_ru.qm translations\gpxsee_ru.qm
@ -231,7 +251,7 @@ SectionGroupEnd
; Uninstaller
Section "Uninstall"
; Remove registry keys
DeleteRegKey HKLM "${REGENTRY}"
DeleteRegKey HKLM SOFTWARE\GPXSee
@ -258,7 +278,13 @@ Section "Uninstall"
DeleteRegKey HKCR ".igc"
DeleteRegKey HKCR "${REGNMEA}"
DeleteRegKey HKCR ".nmea"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
DeleteRegKey HKCR "${REGPLT}"
DeleteRegKey HKCR ".plt"
DeleteRegKey HKCR "${REGRTE}"
DeleteRegKey HKCR ".rte"
DeleteRegKey HKCR "${REGWPT}"
DeleteRegKey HKCR ".wpt"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd

View File

@ -43,4 +43,24 @@
<glob pattern="*.nmea"/>
</mime-type>
<mime-type type="application/vnd.oziexplorer.plt">
<comment>OziExplorer Track Point File</comment>
<sub-class-of type="text/plain"/>
<generic-icon name="text-plain"/>
<glob pattern="*.plt"/>
</mime-type>
<mime-type type="application/vnd.oziexplorer.rte">
<comment>OziExplorer Route File</comment>
<sub-class-of type="text/plain"/>
<generic-icon name="text-plain"/>
<glob pattern="*.rte"/>
</mime-type>
<mime-type type="application/vnd.oziexplorer.wpt">
<comment>OziExplorer Waypoint File</comment>
<sub-class-of type="text/plain"/>
<generic-icon name="text-plain"/>
<glob pattern="*.wpt"/>
</mime-type>
</mime-info>

View File

@ -5,14 +5,14 @@
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "5.0"
!define VERSION "5.13"
; The file to write
OutFile "GPXSee-${VERSION}_x64.exe"
; Compression method
SetCompressor /SOLID lzma
; Required execution level
; Required execution level
RequestExecutionLevel admin
; The default installation directory
@ -26,7 +26,7 @@ VIAddVersionKey "ProductName" "GPXSee"
VIAddVersionKey "LegalCopyright" "GPXSee project"
VIAddVersionKey "FileDescription" "GPXSee installer (x64)"
; Registry key to check for directory (so if you install again, it will
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\GPXSee" "Install_Dir"
@ -39,11 +39,14 @@ InstallDirRegKey HKLM "Software\GPXSee" "Install_Dir"
!define REGFIT "GPXSee.fit"
!define REGIGC "GPXSee.igc"
!define REGNMEA "GPXSee.nmea"
!define REGPLT "GPXSee.plt"
!define REGRTE "GPXSee.rte"
!define REGWPT "GPXSee.wpt"
; Start menu page configuration
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GPXSee"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "GPXSee"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GPXSee"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "GPXSee"
Var StartMenuFolder
@ -71,31 +74,31 @@ Function .onInit
MessageBox MB_OK "GPXSee can only be installed on Windows 7 or later."
Abort
${EndIf}
${If} ${RunningX64}
SetRegView 64
${Else}
MessageBox MB_OK "The 64b version of GPXSee can not be run on 32b systems."
Abort
${Else}
MessageBox MB_OK "The 64b version of GPXSee can not be run on 32b systems."
Abort
${EndIf}
FunctionEnd
FunctionEnd
; The stuff to install
Section "GPXSee" SEC_APP
SectionIn RO
; Set output path to the installation directory.
; Set output path to the installation directory
SetOutPath $INSTDIR
; Put the files there
File "gpxsee.exe"
File /r "maps"
File /r "csv"
; Create start menu entry and add links
SetShellVarContext all
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
CreateDirectory "$SMPROGRAMS\$StartMenuFolder"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GPXSee.lnk" "$INSTDIR\gpxsee.exe"
@ -103,7 +106,7 @@ Section "GPXSee" SEC_APP
; Create the uninstaller
WriteUninstaller "$INSTDIR\uninstall.exe"
; Write the installation path into the registry
DetailPrint "Registering application..."
WriteRegStr HKLM SOFTWARE\GPXSee "Install_Dir" "$INSTDIR"
@ -120,29 +123,41 @@ Section "GPXSee" SEC_APP
DetailPrint "Associating file types..."
WriteRegStr HKCR ".gpx" "" "${REGGPX}"
WriteRegStr HKCR "${REGGPX}" "" "GPS Exchange Format"
WriteRegStr HKCR "${REGGPX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,1"
WriteRegStr HKCR "${REGGPX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,2"
WriteRegStr HKCR "${REGGPX}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".tcx" "" "${REGTCX}"
WriteRegStr HKCR "${REGTCX}" "" "Training Center XML"
WriteRegStr HKCR "${REGTCX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,2"
WriteRegStr HKCR "${REGTCX}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,3"
WriteRegStr HKCR "${REGTCX}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".kml" "" "${REGKML}"
WriteRegStr HKCR "${REGKML}" "" "Keyhole Markup Language"
WriteRegStr HKCR "${REGKML}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,3"
WriteRegStr HKCR "${REGKML}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,4"
WriteRegStr HKCR "${REGKML}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".fit" "" "${REGFIT}"
WriteRegStr HKCR "${REGFIT}" "" "Flexible and Interoperable Data Transfer"
WriteRegStr HKCR "${REGFIT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,4"
WriteRegStr HKCR "${REGFIT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,5"
WriteRegStr HKCR "${REGFIT}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".igc" "" "${REGIGC}"
WriteRegStr HKCR "${REGIGC}" "" "Flight Recorder Data Format"
WriteRegStr HKCR "${REGIGC}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,5"
WriteRegStr HKCR "${REGIGC}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,6"
WriteRegStr HKCR "${REGIGC}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".nmea" "" "${REGNMEA}"
WriteRegStr HKCR "${REGNMEA}" "" "NMEA 0183 data"
WriteRegStr HKCR "${REGNMEA}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,6"
WriteRegStr HKCR "${REGNMEA}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,7"
WriteRegStr HKCR "${REGNMEA}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".plt" "" "${REGPLT}"
WriteRegStr HKCR "${REGPLT}" "" "OziExplorer Track Point File"
WriteRegStr HKCR "${REGPLT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,8"
WriteRegStr HKCR "${REGPLT}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".rte" "" "${REGRTE}"
WriteRegStr HKCR "${REGRTE}" "" "OziExplorer Route File"
WriteRegStr HKCR "${REGRTE}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,9"
WriteRegStr HKCR "${REGRTE}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".wpt" "" "${REGWPT}"
WriteRegStr HKCR "${REGWPT}" "" "OziExplorer Waypoint File"
WriteRegStr HKCR "${REGWPT}\DefaultIcon" "" "$INSTDIR\GPXSee.exe,1"
WriteRegStr HKCR "${REGWPT}\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd
@ -159,7 +174,7 @@ Section "QT framework" SEC_QT
File /r "platforms"
File /r "imageformats"
File /r "printsupport"
SectionEnd
Section "MSVC runtime" SEC_MSVC
@ -217,6 +232,11 @@ SectionGroup "Localization" SEC_LOCALIZATION
File /oname=translations\gpxsee_de.qm translations\gpxsee_de.qm
File /oname=translations\qt_de.qm translations\qt_de.qm
SectionEnd
Section "Polish"
CreateDirectory "$INSTDIR\translations"
File /oname=translations\gpxsee_pl.qm translations\gpxsee_pl.qm
File /oname=translations\qt_pl.qm translations\qt_pl.qm
SectionEnd
Section "Russian"
CreateDirectory "$INSTDIR\translations"
File /oname=translations\gpxsee_ru.qm translations\gpxsee_ru.qm
@ -233,7 +253,7 @@ SectionGroupEnd
; Uninstaller
Section "Uninstall"
; Remove registry keys
SetRegView 64
DeleteRegKey HKLM "${REGENTRY}"
@ -247,7 +267,7 @@ Section "Uninstall"
!insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder
Delete "$SMPROGRAMS\$StartMenuFolder\*.*"
RMDir "$SMPROGRAMS\$StartMenuFolder"
; Remove File associations
DeleteRegKey HKCR "${REGGPX}"
DeleteRegKey HKCR ".gpx"
@ -261,6 +281,12 @@ Section "Uninstall"
DeleteRegKey HKCR ".igc"
DeleteRegKey HKCR "${REGNMEA}"
DeleteRegKey HKCR ".nmea"
DeleteRegKey HKCR "${REGPLT}"
DeleteRegKey HKCR ".plt"
DeleteRegKey HKCR "${REGRTE}"
DeleteRegKey HKCR ".rte"
DeleteRegKey HKCR "${REGWPT}"
DeleteRegKey HKCR ".wpt"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
SectionEnd

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<map>
<map xmlns="http://www.gpxsee.org/map/1">
<name>4UMaps</name>
<url>http://4umaps.eu/$z/$x/$y.png</url>
<copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © 4UMaps.eu</copyright>
<zoom min="2" max="15"/>
<bounds bottom="-65"/>
</map>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<map>
<map xmlns="http://www.gpxsee.org/map/1">
<name>Open Street Map</name>
<url>http://tile.openstreetmap.org/$z/$x/$y.png</url>
<copyright>Map data: © OpenStreetMap contributors (ODbL) | Rendering: © OpenStreetMap (CC-BY-SA)</copyright>
</map>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<map>
<map xmlns="http://www.gpxsee.org/map/1">
<name>Open Topo Map</name>
<url>https://a.tile.opentopomap.org/$z/$x/$y.png</url>
<copyright>Map data: © OpenStreetMap contributors (ODbL), SRTM | Rendering: © OpenTopoMap (CC-BY-SA)</copyright>
<zoom max="17"/>
</map>

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<map>
<map xmlns="http://www.gpxsee.org/map/1">
<name>USGS Imagery</name>
<url>https://navigator.er.usgs.gov/tiles/aerial_Imagery.cgi/$z/$x/$y</url>
<url>https://basemap.nationalmap.gov/ArcGIS/rest/services/USGSImageryOnly/MapServer/tile/$z/$y/$x</url>
<copyright>Map services and data available from U.S. Geological Survey, National Geospatial Program.</copyright>
<zoom min="2" max="15"/>
<bounds bottom="0" top="74"/>
</map>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<map>
<map xmlns="http://www.gpxsee.org/map/1">
<name>USGS Topo</name>
<url>https://navigator.er.usgs.gov/tiles/tcr.cgi/$z/$x/$y.png</url>
<url>https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/$z/$y/$x</url>
<copyright>Map services and data available from U.S. Geological Survey, National Geospatial Program.</copyright>
<zoom min="2" max="15"/>
</map>

View File

@ -3,8 +3,8 @@
#include <QLocale>
#include <QFileOpenEvent>
#include <QNetworkProxyFactory>
#include <QNetworkAccessManager>
#include <QLibraryInfo>
#include "map/onlinemap.h"
#include "map/downloader.h"
#include "map/ellipsoid.h"
#include "map/gcs.h"
@ -23,12 +23,12 @@ App::App(int &argc, char **argv) : QApplication(argc, argv),
installTranslator(gpxsee);
QTranslator *qt = new QTranslator(this);
#if defined(Q_OS_WINDOWS) || defined(Q_OS_MAC)
#if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
qt->load(QLocale::system(), "qt", "_", TRANSLATIONS_DIR);
#else // Q_OS_WINDOWS || Q_OS_MAC
#else // Q_OS_WIN32 || Q_OS_MAC
qt->load(QLocale::system(), "qt", "_", QLibraryInfo::location(
QLibraryInfo::TranslationsPath));
#endif // Q_OS_WINDOWS || Q_OS_MAC
#endif // Q_OS_WIN32 || Q_OS_MAC
installTranslator(qt);
#ifdef Q_OS_MAC
@ -36,7 +36,7 @@ App::App(int &argc, char **argv) : QApplication(argc, argv),
#endif // Q_OS_MAC
QNetworkProxyFactory::setUseSystemConfiguration(true);
OnlineMap::setDownloader(new Downloader(this));
Downloader::setNetworkAccessManager(new QNetworkAccessManager(this));
OPENGL_SET_SAMPLES(4);
loadDatums();
loadPCSs();

View File

@ -11,23 +11,28 @@
#define XTICKS 15
#define YTICKS 10
struct Label {
double min;
double max;
double d;
class Ticks
{
public:
Ticks(double minValue, double maxValue, int maxCount);
int count() const {return ((int)((_max - _min) / _d)) + 1;}
double val(int i) const {return _min + i * _d;}
double min() const {return _min;}
double max() const {return _max;}
private:
double _min;
double _max;
double _d;
};
static struct Label label(double min, double max, int ticks)
Ticks::Ticks(double minValue, double maxValue, int maxCount)
{
double range;
struct Label l;
range = niceNum(max - min, 0);
l.d = niceNum(range / ticks, 1);
l.min = ceil(min / l.d) * l.d;
l.max = floor(max / l.d) * l.d;
return l;
double range = niceNum(maxValue - minValue, 0);
_d = niceNum(range / maxCount, 1);
_min = ceil(minValue / _d) * _d;
_max = floor(maxValue / _d) * _d;
}
@ -36,6 +41,9 @@ AxisItem::AxisItem(Type type, QGraphicsItem *parent) : QGraphicsItem(parent)
_type = type;
_size = 0;
_font.setPixelSize(FONT_SIZE);
_font.setFamily(FONT_FAMILY);
#ifndef Q_OS_MAC
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
#endif // Q_OS_MAC
@ -45,6 +53,16 @@ void AxisItem::setRange(const RangeF &range)
{
prepareGeometryChange();
_range = range;
QFontMetrics fm(_font);
Ticks ticks(_range.min(), _range.max(), (_type == X) ? XTICKS : YTICKS);
_ticks = QVector<Tick>(ticks.count());
for (int i = 0; i < ticks.count(); i++) {
Tick &t = _ticks[i];
t.value = ticks.val(i);
t.boundingBox = fm.tightBoundingRect(QString::number(t.value));
}
updateBoundingRect();
update();
}
@ -60,42 +78,28 @@ void AxisItem::setSize(qreal size)
void AxisItem::setLabel(const QString& label)
{
prepareGeometryChange();
QFontMetrics fm(_font);
_label = label;
_labelBB = fm.tightBoundingRect(label);
updateBoundingRect();
update();
}
void AxisItem::updateBoundingRect()
{
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QRect ss, es, ls;
struct Label l;
l = label(_range.min(), _range.max(), (_type == X) ? XTICKS : YTICKS);
es = fm.tightBoundingRect(QString::number(l.max));
ss = fm.tightBoundingRect(QString::number(l.min));
ls = fm.tightBoundingRect(_label);
QFontMetrics fm(_font);
QRect es = _ticks.isEmpty() ? QRect() : _ticks.last().boundingBox;
QRect ss = _ticks.isEmpty() ? QRect() : _ticks.first().boundingBox;
QRect ls(_labelBB);
if (_type == X) {
_boundingRect = QRectF(-ss.width()/2, -TICK/2,
_size + es.width()/2 + ss.width()/2,
ls.height() + es.height() - fm.descent() + TICK + 2*PADDING + 1);
_boundingRect = QRectF(-ss.width()/2, -TICK/2, _size + es.width()/2
+ ss.width()/2, ls.height() + es.height() - fm.descent() + TICK
+ 2*PADDING + 1);
} else {
int mtw = 0;
QRect ts;
qreal val;
for (int i = 0; i < ((l.max - l.min) / l.d) + 1; i++) {
val = l.min + i * l.d;
QString str = QString::number(val);
ts = fm.tightBoundingRect(str);
mtw = qMax(ts.width(), mtw);
}
for (int i = 0; i < _ticks.count(); i++)
mtw = qMax(_ticks.at(i).boundingBox.width(), mtw);
_boundingRect = QRectF(-(ls.height() + mtw + 2*PADDING + TICK/2),
-(_size + es.height()/2 + fm.descent()), ls.height() + mtw + 2*PADDING
+ TICK, _size + es.height()/2 + fm.descent() + ss.height()/2);
@ -107,60 +111,50 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
{
Q_UNUSED(option);
Q_UNUSED(widget);
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QRect ts, ls;
struct Label l;
qreal range = _range.size();
qreal val;
QPen pen = QPen(Qt::black, AXIS_WIDTH);
QFontMetrics fm(_font);
QRect ts;
painter->setRenderHint(QPainter::Antialiasing, false);
painter->setFont(font);
painter->setPen(pen);
ls = fm.tightBoundingRect(_label);
painter->setFont(_font);
painter->setPen(QPen(Qt::black, AXIS_WIDTH));
if (_type == X) {
painter->drawLine(0, 0, _size, 0);
l = label(_range.min(), _range.max(), XTICKS);
for (int i = 0; i < ((l.max - l.min) / l.d) + 1; i++) {
val = l.min + i * l.d;
QString str = QString::number(val);
for (int i = 0; i < _ticks.count(); i++) {
qreal val = _ticks.at(i).value;
ts = _ticks.at(i).boundingBox;
painter->drawLine((_size/range) * (val - _range.min()), TICK/2,
(_size/range) * (val - _range.min()), -TICK/2);
ts = fm.tightBoundingRect(str);
painter->drawText(((_size/range) * (val - _range.min()))
- (ts.width()/2), ts.height() + TICK/2 + PADDING, str);
painter->drawLine((_size/_range.size()) * (val - _range.min()),
TICK/2, (_size/_range.size()) * (val - _range.min()), -TICK/2);
painter->drawText(((_size/_range.size()) * (val - _range.min()))
- (ts.width()/2), ts.height() + TICK/2 + PADDING,
QString::number(val));
}
painter->drawText(_size/2 - ls.width()/2, ls.height() + ts.height()
- 2*fm.descent() + TICK/2 + 2*PADDING, _label);
painter->drawText(_size/2 - _labelBB.width()/2, _labelBB.height()
+ ts.height() - 2*fm.descent() + TICK/2 + 2*PADDING, _label);
} else {
painter->drawLine(0, 0, 0, -_size);
l = label(_range.min(), _range.max(), YTICKS);
int mtw = 0;
for (int i = 0; i < ((l.max - l.min) / l.d) + 1; i++) {
val = l.min + i * l.d;
QString str = QString::number(val);
painter->drawLine(TICK/2, -((_size/range) * (val - _range.min())),
-TICK/2, -((_size/range) * (val - _range.min())));
ts = fm.tightBoundingRect(str);
for (int i = 0; i < _ticks.count(); i++) {
qreal val = _ticks.at(i).value;
ts = _ticks.at(i).boundingBox;
mtw = qMax(ts.width(), mtw);
painter->drawText(-(ts.width() + PADDING + TICK/2), -((_size/range)
* (val - _range.min())) + (ts.height()/2), str);
painter->drawLine(TICK/2, -((_size/_range.size())
* (val - _range.min())), -TICK/2, -((_size/_range.size())
* (val - _range.min())));
painter->drawText(-(ts.width() + PADDING + TICK/2),
-((_size/_range.size()) * (val - _range.min())) + (ts.height()/2),
QString::number(val));
}
painter->rotate(-90);
painter->drawText(_size/2 - ls.width()/2, -(mtw + 2*PADDING + TICK/2),
_label);
painter->drawText(_size/2 - _labelBB.width()/2, -(mtw + 2*PADDING
+ TICK/2), _label);
painter->rotate(90);
}
@ -172,46 +166,28 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QSizeF AxisItem::margin() const
{
QFont font;
font.setPixelSize(FONT_SIZE);
QFontMetrics fm(font);
QRect ss, es, ls;
struct Label l;
l = label(_range.min(), _range.max(), (_type == X) ? XTICKS : YTICKS);
es = fm.tightBoundingRect(QString::number(l.max));
ss = fm.tightBoundingRect(QString::number(l.min));
ls = fm.tightBoundingRect(_label);
QFontMetrics fm(_font);
QRect es = _ticks.isEmpty() ? QRect() : _ticks.last().boundingBox;
if (_type == X) {
return QSizeF(es.width()/2,
ls.height() + es.height() - fm.descent() + TICK/2 + 2*PADDING);
return QSizeF(es.width()/2, _labelBB.height() + es.height()
- fm.descent() + TICK/2 + 2*PADDING);
} else {
int mtw = 0;
QRect ts;
qreal val;
for (int i = 0; i < _ticks.count(); i++)
mtw = qMax(_ticks.at(i).boundingBox.width(), mtw);
for (int i = 0; i < ((l.max - l.min) / l.d) + 1; i++) {
val = l.min + i * l.d;
QString str = QString::number(val);
ts = fm.tightBoundingRect(str);
mtw = qMax(ts.width(), mtw);
}
return QSizeF(ls.height() -fm.descent() + mtw + 2*PADDING
return QSizeF(_labelBB.height() -fm.descent() + mtw + 2*PADDING
+ TICK/2, es.height()/2 + fm.descent());
}
}
QList<qreal> AxisItem::ticks() const
{
struct Label l;
QList<qreal> list;
l = label(_range.min(), _range.max(), (_type == X) ? XTICKS : YTICKS);
for (int i = 0; i < ((l.max - l.min) / l.d) + 1; i++)
list.append(((_size/_range.size()) * ((l.min + i * l.d)
for (int i = 0; i < _ticks.count(); i++)
list.append(((_size/_range.size()) * (_ticks.at(i).value
- _range.min())));
return list;

View File

@ -2,6 +2,7 @@
#define AXISITEM_H
#include <QGraphicsItem>
#include <QVector>
#include "common/range.h"
class AxisItem : public QGraphicsItem
@ -23,13 +24,21 @@ public:
QList<qreal> ticks() const;
private:
struct Tick {
double value;
QRect boundingBox;
};
void updateBoundingRect();
Type _type;
RangeF _range;
qreal _size;
QString _label;
QRect _labelBB;
QVector<Tick> _ticks;
QRectF _boundingRect;
QFont _font;
};
#endif // AXISITEM_H

View File

@ -24,28 +24,33 @@ void CadenceGraph::setInfo()
clearInfo();
}
void CadenceGraph::loadData(const Data &data, const QList<PathItem *> &paths)
QList<GraphItem*> CadenceGraph::loadData(const Data &data)
{
QList<GraphItem*> graphs;
for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->cadence();
if (graph.size() < 2) {
skipColor();
continue;
graphs.append(0);
} else {
CadenceGraphItem *gi = new CadenceGraphItem(graph, _graphType);
GraphView::addGraph(gi);
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
graphs.append(gi);
}
CadenceGraphItem *gi = new CadenceGraphItem(graph, _graphType);
GraphView::addGraph(gi, paths.at(i));
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
}
for (int i = 0; i < data.routes().count(); i++)
for (int i = 0; i < data.routes().count(); i++) {
skipColor();
graphs.append(0);
}
setInfo();
redraw();
return graphs;
}
qreal CadenceGraph::avg() const

View File

@ -11,7 +11,7 @@ public:
CadenceGraph(QWidget *parent = 0);
QString label() const {return tr("Cadence");}
void loadData(const Data &data, const QList<PathItem *> &paths);
QList<GraphItem*> loadData(const Data &data);
void clear();
void showTracks(bool show);
void showRoutes(bool show) {Q_UNUSED(show);}

View File

@ -65,15 +65,15 @@ void ElevationGraph::setInfo()
}
}
void ElevationGraph::loadGraph(const Graph &graph, Type type, PathItem *path)
GraphItem *ElevationGraph::loadGraph(const Graph &graph, Type type)
{
if (graph.size() < 2) {
skipColor();
return;
return 0;
}
ElevationGraphItem *gi = new ElevationGraphItem(graph, _graphType);
GraphView::addGraph(gi, path, type);
GraphView::addGraph(gi, type);
if (type == Track) {
_trackAscent += gi->ascent();
@ -86,20 +86,23 @@ void ElevationGraph::loadGraph(const Graph &graph, Type type, PathItem *path)
_routeMax = nMax(_routeMax, gi->max());
_routeMin = nMin(_routeMin, gi->min());
}
return gi;
}
void ElevationGraph::loadData(const Data &data, const QList<PathItem *> &paths)
QList<GraphItem*> ElevationGraph::loadData(const Data &data)
{
int p = 0;
QList<GraphItem*> graphs;
for (int i = 0; i < data.tracks().count(); i++)
loadGraph(data.tracks().at(i)->elevation(), Track, paths.at(p++));
graphs.append(loadGraph(data.tracks().at(i)->elevation(), Track));
for (int i = 0; i < data.routes().count(); i++)
loadGraph(data.routes().at(i)->elevation(), Route, paths.at(p++));
graphs.append(loadGraph(data.routes().at(i)->elevation(), Route));
setInfo();
redraw();
return graphs;
}
void ElevationGraph::clear()

View File

@ -11,7 +11,7 @@ public:
ElevationGraph(QWidget *parent = 0);
QString label() const {return tr("Elevation");}
void loadData(const Data &data, const QList<PathItem *> &paths);
QList<GraphItem*> loadData(const Data &data);
void clear();
void setUnits(enum Units units);
void showTracks(bool show);
@ -28,7 +28,7 @@ private:
void setYUnits(Units units);
void setInfo();
void loadGraph(const Graph &graph, Type type, PathItem *path);
GraphItem *loadGraph(const Graph &graph, Type type);
qreal _trackAscent, _trackDescent;
qreal _routeAscent, _routeDescent;

View File

@ -42,9 +42,9 @@ ExportDialog::ExportDialog(Export *exp, QWidget *parent)
_paperSize->setCurrentIndex(index);
_resolution = new QComboBox();
_resolution->addItem("150 DPI", 150);
_resolution->addItem("300 DPI", 300);
_resolution->addItem("600 DPI", 600);
_resolution->addItem("1200 DPI", 1200);
if ((index = _resolution->findData(_export->resolution)) >= 0)
_resolution->setCurrentIndex(index);
@ -62,12 +62,17 @@ ExportDialog::ExportDialog(Export *exp, QWidget *parent)
_bottomMargin = new QDoubleSpinBox();
_leftMargin = new QDoubleSpinBox();
_rightMargin = new QDoubleSpinBox();
QString us = (_export->units == Imperial) ? tr("in") : tr("mm");
QString us = (_export->units == Metric) ? tr("mm") : tr("in");
_topMargin->setSuffix(UNIT_SPACE + us);
_bottomMargin->setSuffix(UNIT_SPACE + us);
_leftMargin->setSuffix(UNIT_SPACE + us);
_rightMargin->setSuffix(UNIT_SPACE + us);
if (_export->units == Imperial) {
if (_export->units == Metric) {
_topMargin->setValue(_export->margins.top());
_bottomMargin->setValue(_export->margins.bottom());
_leftMargin->setValue(_export->margins.left());
_rightMargin->setValue(_export->margins.right());
} else {
_topMargin->setValue(_export->margins.top() * MM2IN);
_bottomMargin->setValue(_export->margins.bottom() * MM2IN);
_leftMargin->setValue(_export->margins.left() * MM2IN);
@ -76,11 +81,6 @@ ExportDialog::ExportDialog(Export *exp, QWidget *parent)
_bottomMargin->setSingleStep(0.1);
_leftMargin->setSingleStep(0.1);
_rightMargin->setSingleStep(0.1);
} else {
_topMargin->setValue(_export->margins.top());
_bottomMargin->setValue(_export->margins.bottom());
_leftMargin->setValue(_export->margins.left());
_rightMargin->setValue(_export->margins.right());
}
QGridLayout *marginsLayout = new QGridLayout();

View File

@ -2,6 +2,32 @@
#include "common/coordinates.h"
#include "format.h"
static QString deg2DMS(double val)
{
int deg = val;
double r1 = val - deg;
int min = r1 * 60.0;
double r2 = r1 - (min / 60.0);
double sec = r2 * 3600.0;
return QString("%1°%2'%3\"").arg(deg).arg(min, 2, 10, QChar('0'))
.arg(sec, 4, 'f', 1, QChar('0'));
}
static QString deg2DMM(double val)
{
int deg = val;
double r1 = val - deg;
double min = r1 * 60.0;
return QString("%1°%2'").arg(deg).arg(min, 6, 'f', 3, QChar('0'));
}
QString Format::timeSpan(qreal time, bool full)
{
unsigned h, m, s;
@ -27,6 +53,13 @@ QString Format::distance(qreal value, Units units)
else
return QString::number(value * M2MI, 'f', 1) + UNIT_SPACE
+ qApp->translate("Format", "mi");
} else if (units == Nautical) {
if (value < NMIINM)
return QString::number(value * M2FT, 'f', 0) + UNIT_SPACE
+ qApp->translate("Format", "ft");
else
return QString::number(value * M2NMI, 'f', 1) + UNIT_SPACE
+ qApp->translate("Format", "nmi");
} else {
if (value < KMINM)
return QString::number(value, 'f', 0) + UNIT_SPACE
@ -40,18 +73,29 @@ QString Format::distance(qreal value, Units units)
QString Format::elevation(qreal value, Units units)
{
if (units == Metric)
return QString::number(value, 'f', 0) + UNIT_SPACE
return QString::number(qRound(value)) + UNIT_SPACE
+ qApp->translate("Format", "m");
else
return QString::number(value * M2FT, 'f', 0) + UNIT_SPACE
return QString::number(qRound(value * M2FT)) + UNIT_SPACE
+ qApp->translate("Format", "ft");
}
QString Format::coordinates(const Coordinates &value)
QString Format::coordinates(const Coordinates &value, CoordinatesFormat type)
{
QChar yH = (value.lat() < 0) ? 'S' : 'N';
QChar xH = (value.lon() < 0) ? 'W' : 'E';
return QString::number(qAbs(value.lat()), 'f', 5) + yH + "," + QChar(0x00A0)
+ QString::number(qAbs(value.lon()), 'f', 5) + xH;
switch (type) {
case DegreesMinutes:
return deg2DMM(qAbs(value.lat())) + yH + "," + QChar(0x00A0)
+ deg2DMM(qAbs(value.lon())) + xH;
break;
case DMS:
return deg2DMS(qAbs(value.lat())) + yH + "," + QChar(0x00A0)
+ deg2DMS(qAbs(value.lon())) + xH;
break;
default:
return QString::number(qAbs(value.lat()), 'f', 5) + yH + ","
+ QChar(0x00A0) + QString::number(qAbs(value.lon()), 'f', 5) + xH;
}
}

View File

@ -6,12 +6,18 @@
class Coordinates;
enum CoordinatesFormat {
DecimalDegrees,
DegreesMinutes,
DMS
};
namespace Format
{
QString timeSpan(qreal time, bool full = true);
QString distance(qreal value, Units units);
QString elevation(qreal value, Units units);
QString coordinates(const Coordinates &value);
QString coordinates(const Coordinates &value, CoordinatesFormat type);
}
#endif // FORMAT_H

View File

@ -12,6 +12,7 @@ class GraphItem : public QGraphicsObject
public:
GraphItem(const Graph &graph, GraphType type, QGraphicsItem *parent = 0);
virtual ~GraphItem() {}
QPainterPath shape() const {return _shape;}
QRectF boundingRect() const {return _shape.boundingRect();}

View File

@ -7,7 +7,7 @@
#include "timetype.h"
class Data;
class PathItem;
class GraphItem;
class GraphTab : public GraphView
{
@ -16,9 +16,10 @@ class GraphTab : public GraphView
public:
GraphTab(QWidget *parent = 0) : GraphView(parent)
{setFrameShape(QFrame::NoFrame);}
virtual ~GraphTab() {}
virtual QString label() const = 0;
virtual void loadData(const Data &data, const QList<PathItem *> &paths) = 0;
virtual QList<GraphItem*> loadData(const Data &data) = 0;
virtual void clear() {GraphView::clear();}
virtual void setUnits(enum Units units) {GraphView::setUnits(units);}
virtual void setGraphType(GraphType type) {GraphView::setGraphType(type);}

View File

@ -81,12 +81,12 @@ GraphView::~GraphView()
void GraphView::createXLabel()
{
_xAxis->setLabel(QString("%1 [%2]").arg(_xLabel).arg(_xUnits));
_xAxis->setLabel(QString("%1 [%2]").arg(_xLabel, _xUnits));
}
void GraphView::createYLabel()
{
_yAxis->setLabel(QString("%1 [%2]").arg(_yLabel).arg(_yUnits));
_yAxis->setLabel(QString("%1 [%2]").arg(_yLabel, _yUnits));
}
void GraphView::setYLabel(const QString &label)
@ -104,15 +104,7 @@ void GraphView::setYUnits(const QString &units)
void GraphView::setXUnits()
{
if (_graphType == Distance) {
if (_units == Metric) {
if (bounds().width() < KMINM) {
_xUnits = tr("m");
_xScale = 1;
} else {
_xUnits = tr("km");
_xScale = M2KM;
}
} else {
if (_units == Imperial) {
if (bounds().width() < MIINM) {
_xUnits = tr("ft");
_xScale = M2FT;
@ -120,6 +112,22 @@ void GraphView::setXUnits()
_xUnits = tr("mi");
_xScale = M2MI;
}
} else if (_units == Nautical) {
if (bounds().width() < NMIINM) {
_xUnits = tr("ft");
_xScale = M2FT;
} else {
_xUnits = tr("nmi");
_xScale = M2NMI;
}
} else {
if (bounds().width() < KMINM) {
_xUnits = tr("m");
_xScale = 1;
} else {
_xUnits = tr("km");
_xScale = M2KM;
}
}
} else {
if (bounds().width() < MININS) {
@ -179,7 +187,7 @@ void GraphView::showSliderInfo(bool show)
_sliderInfo->setVisible(show);
}
void GraphView::addGraph(GraphItem *graph, PathItem *path, int id)
void GraphView::addGraph(GraphItem *graph, int id)
{
QColor color(_palette.nextColor());
color.setAlpha(255);
@ -191,10 +199,6 @@ void GraphView::addGraph(GraphItem *graph, PathItem *path, int id)
connect(this, SIGNAL(sliderPositionChanged(qreal)), graph,
SLOT(emitSliderPositionChanged(qreal)));
connect(graph, SIGNAL(sliderPositionChanged(qreal)), path,
SLOT(moveMarker(qreal)));
connect(path, SIGNAL(selected(bool)), graph, SLOT(hover(bool)));
connect(graph, SIGNAL(selected(bool)), path, SLOT(hover(bool)));
_graphs.append(graph);
@ -304,6 +308,7 @@ void GraphView::redraw(const QSizeF &size)
if (r.height() < _minYRange * sy)
r.adjust(0, -(_minYRange/2 * sy - r.height()/2), 0,
(_minYRange/2) * sy - r.height()/2);
r = r.toRect();
_xAxis->setSize(r.width());
_yAxis->setSize(r.height());

View File

@ -44,7 +44,7 @@ signals:
void sliderPositionChanged(qreal);
protected:
void addGraph(GraphItem *graph, PathItem *path, int id = 0);
void addGraph(GraphItem *graph, int id = 0);
void showGraph(bool show, int id = 0);
void setGraphType(GraphType type);

View File

@ -4,13 +4,6 @@
#define GRID_WIDTH 0
GridItem::GridItem(QGraphicsItem *parent) : QGraphicsItem(parent)
{
#ifndef Q_OS_MAC
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
#endif // Q_OS_MAC
}
void GridItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{

View File

@ -6,7 +6,7 @@
class GridItem : public QGraphicsItem
{
public:
GridItem(QGraphicsItem *parent = 0);
GridItem(QGraphicsItem *parent = 0): QGraphicsItem(parent) {}
QRectF boundingRect() const {return _boundingRect;}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,

View File

@ -25,6 +25,7 @@
#include "data/data.h"
#include "map/maplist.h"
#include "map/emptymap.h"
#include "map/downloader.h"
#include "config.h"
#include "icons.h"
#include "keys.h"
@ -40,7 +41,8 @@
#include "filebrowser.h"
#include "cpuarch.h"
#include "graphtab.h"
#include "format.h"
#include "graphitem.h"
#include "pathitem.h"
#include "gui.h"
@ -58,15 +60,15 @@ GUI::GUI()
createBrowser();
QSplitter *splitter = new QSplitter();
splitter->setOrientation(Qt::Vertical);
splitter->setChildrenCollapsible(false);
splitter->addWidget(_mapView);
splitter->addWidget(_graphTabWidget);
splitter->setContentsMargins(0, 0, 0, 0);
splitter->setStretchFactor(0, 255);
splitter->setStretchFactor(1, 1);
setCentralWidget(splitter);
_splitter = new QSplitter();
_splitter->setOrientation(Qt::Vertical);
_splitter->setChildrenCollapsible(false);
_splitter->addWidget(_mapView);
_splitter->addWidget(_graphTabWidget);
_splitter->setContentsMargins(0, 0, 0, 0);
_splitter->setStretchFactor(0, 255);
_splitter->setStretchFactor(1, 1);
setCentralWidget(_splitter);
setWindowIcon(QIcon(QPixmap(APP_ICON)));
setWindowTitle(APP_NAME);
@ -83,6 +85,10 @@ GUI::GUI()
_sliderPos = 0;
_dataDir = QDir::homePath();
_mapDir = QDir::homePath();
_poiDir = QDir::homePath();
readSettings();
updateGraphTabs();
@ -373,6 +379,28 @@ void GUI::createActions()
_imperialUnitsAction->setActionGroup(ag);
connect(_imperialUnitsAction, SIGNAL(triggered()), this,
SLOT(setImperialUnits()));
_nauticalUnitsAction = new QAction(tr("Nautical"), this);
_nauticalUnitsAction->setCheckable(true);
_nauticalUnitsAction->setActionGroup(ag);
connect(_nauticalUnitsAction, SIGNAL(triggered()), this,
SLOT(setNauticalUnits()));
ag = new QActionGroup(this);
ag->setExclusive(true);
_decimalDegreesAction = new QAction(tr("Decimal degrees (DD)"), this);
_decimalDegreesAction->setCheckable(true);
_decimalDegreesAction->setActionGroup(ag);
connect(_decimalDegreesAction, SIGNAL(triggered()), this,
SLOT(setDecimalDegrees()));
_degreesMinutesAction = new QAction(tr("Degrees and decimal minutes (DMM)"),
this);
_degreesMinutesAction->setCheckable(true);
_degreesMinutesAction->setActionGroup(ag);
connect(_degreesMinutesAction, SIGNAL(triggered()), this,
SLOT(setDegreesMinutes()));
_DMSAction = new QAction(tr("Degrees, minutes, seconds (DMS)"), this);
_DMSAction->setCheckable(true);
_DMSAction->setActionGroup(ag);
connect(_DMSAction, SIGNAL(triggered()), this, SLOT(setDMS()));
_fullscreenAction = new QAction(QIcon(QPixmap(FULLSCREEN_ICON)),
tr("Fullscreen mode"), this);
_fullscreenAction->setCheckable(true);
@ -404,7 +432,7 @@ void GUI::createActions()
void GUI::createMenus()
{
QMenu *fileMenu = menuBar()->addMenu(tr("File"));
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(_openFileAction);
fileMenu->addSeparator();
fileMenu->addAction(_printFileAction);
@ -418,7 +446,7 @@ void GUI::createMenus()
fileMenu->addAction(_exitAction);
#endif // Q_OS_MAC
_mapMenu = menuBar()->addMenu(tr("Map"));
_mapMenu = menuBar()->addMenu(tr("&Map"));
_mapMenu->addActions(_mapActions);
_mapsEnd = _mapMenu->addSeparator();
_mapMenu->addAction(_loadMapAction);
@ -426,7 +454,7 @@ void GUI::createMenus()
_mapMenu->addSeparator();
_mapMenu->addAction(_showMapAction);
QMenu *graphMenu = menuBar()->addMenu(tr("Graph"));
QMenu *graphMenu = menuBar()->addMenu(tr("&Graph"));
graphMenu->addAction(_distanceGraphAction);
graphMenu->addAction(_timeGraphAction);
graphMenu->addSeparator();
@ -435,7 +463,7 @@ void GUI::createMenus()
graphMenu->addSeparator();
graphMenu->addAction(_showGraphsAction);
QMenu *poiMenu = menuBar()->addMenu(tr("POI"));
QMenu *poiMenu = menuBar()->addMenu(tr("&POI"));
_poiFilesMenu = poiMenu->addMenu(tr("POI files"));
_poiFilesMenu->addActions(_poiFilesActions);
poiMenu->addSeparator();
@ -447,7 +475,7 @@ void GUI::createMenus()
poiMenu->addSeparator();
poiMenu->addAction(_showPOIAction);
QMenu *dataMenu = menuBar()->addMenu(tr("Data"));
QMenu *dataMenu = menuBar()->addMenu(tr("&Data"));
QMenu *displayMenu = dataMenu->addMenu(tr("Display"));
displayMenu->addAction(_showWaypointLabelsAction);
displayMenu->addAction(_showRouteWaypointsAction);
@ -456,20 +484,25 @@ void GUI::createMenus()
dataMenu->addAction(_showRoutesAction);
dataMenu->addAction(_showWaypointsAction);
QMenu *settingsMenu = menuBar()->addMenu(tr("Settings"));
QMenu *settingsMenu = menuBar()->addMenu(tr("&Settings"));
QMenu *timeMenu = settingsMenu->addMenu(tr("Time"));
timeMenu->addAction(_totalTimeAction);
timeMenu->addAction(_movingTimeAction);
QMenu *unitsMenu = settingsMenu->addMenu(tr("Units"));
unitsMenu->addAction(_metricUnitsAction);
unitsMenu->addAction(_imperialUnitsAction);
unitsMenu->addAction(_nauticalUnitsAction);
QMenu *coordinatesMenu = settingsMenu->addMenu(tr("Coordinates format"));
coordinatesMenu->addAction(_decimalDegreesAction);
coordinatesMenu->addAction(_degreesMinutesAction);
coordinatesMenu->addAction(_DMSAction);
settingsMenu->addSeparator();
settingsMenu->addAction(_showToolbarsAction);
settingsMenu->addAction(_fullscreenAction);
settingsMenu->addSeparator();
settingsMenu->addAction(_openOptionsAction);
QMenu *helpMenu = menuBar()->addMenu(tr("Help"));
QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
helpMenu->addAction(_pathsAction);
helpMenu->addAction(_keysAction);
helpMenu->addSeparator();
@ -634,11 +667,13 @@ void GUI::paths()
void GUI::openFile()
{
QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"),
QString(), Data::formats());
_dataDir, Data::formats());
QStringList list = files;
for (QStringList::Iterator it = list.begin(); it != list.end(); it++)
openFile(*it);
if (!list.isEmpty())
_dataDir = QFileInfo(list.first()).path();
}
bool GUI::openFile(const QString &fileName)
@ -655,8 +690,6 @@ bool GUI::openFile(const QString &fileName)
updateNavigationActions();
updateStatusBarInfo();
updateWindowTitle();
updateGraphTabs();
updateMapView();
return true;
} else {
@ -670,13 +703,10 @@ bool GUI::openFile(const QString &fileName)
bool GUI::loadFile(const QString &fileName)
{
Data data;
QList<QList<GraphItem*> > graphs;
QList<PathItem*> paths;
if (data.loadFile(fileName)) {
paths = _mapView->loadData(data);
for (int i = 0; i < _tabs.count(); i++)
_tabs.at(i)->loadData(data, paths);
for (int i = 0; i < data.tracks().count(); i++) {
_trackDistance += data.tracks().at(i)->distance();
_time += data.tracks().at(i)->time();
@ -703,6 +733,25 @@ bool GUI::loadFile(const QString &fileName)
} else
_pathName = QString();
for (int i = 0; i < _tabs.count(); i++)
graphs.append(_tabs.at(i)->loadData(data));
if (updateGraphTabs() | updateMapView())
_splitter->refresh();
paths = _mapView->loadData(data);
for (int i = 0; i < paths.count(); i++) {
const PathItem *pi = paths.at(i);
for (int j = 0; j < graphs.count(); j++) {
const GraphItem *gi = graphs.at(j).at(i);
if (!gi)
continue;
connect(gi, SIGNAL(sliderPositionChanged(qreal)), pi,
SLOT(moveMarker(qreal)));
connect(pi, SIGNAL(selected(bool)), gi, SLOT(hover(bool)));
connect(gi, SIGNAL(selected(bool)), pi, SLOT(hover(bool)));
}
}
return true;
} else {
updateNavigationActions();
@ -723,11 +772,13 @@ bool GUI::loadFile(const QString &fileName)
void GUI::openPOIFile()
{
QStringList files = QFileDialog::getOpenFileNames(this, tr("Open POI file"),
QString(), Data::formats());
_poiDir, Data::formats());
QStringList list = files;
for (QStringList::Iterator it = list.begin(); it != list.end(); it++)
openPOIFile(*it);
if (!list.isEmpty())
_poiDir = QFileInfo(list.first()).path();
}
bool GUI::openPOIFile(const QString &fileName)
@ -821,6 +872,8 @@ void GUI::openOptions()
_poi->setRadius(options.poiRadius);
if (options.pixmapCache != _options.pixmapCache)
QPixmapCache::setCacheLimit(options.pixmapCache * 1024);
if (options.connectionTimeout != _options.connectionTimeout)
Downloader::setTimeout(options.connectionTimeout);
if (reload)
reloadFile();
@ -973,8 +1026,6 @@ void GUI::reloadFile()
updateStatusBarInfo();
updateWindowTitle();
updateGraphTabs();
updateMapView();
if (_files.isEmpty())
_fileActionGroup->setEnabled(false);
else
@ -1099,11 +1150,13 @@ void GUI::showGraphSliderInfo(bool show)
void GUI::loadMap()
{
QStringList files = QFileDialog::getOpenFileNames(this, tr("Open map file"),
QString(), MapList::formats());
_mapDir, MapList::formats());
QStringList list = files;
for (QStringList::Iterator it = list.begin(); it != list.end(); it++)
loadMap(*it);
if (!list.isEmpty())
_mapDir = QFileInfo(list.first()).path();
}
bool GUI::loadMap(const QString &fileName)
@ -1121,7 +1174,7 @@ bool GUI::loadMap(const QString &fileName)
_mapMenu->insertAction(_mapsEnd, a);
_showMapAction->setEnabled(true);
_clearMapCacheAction->setEnabled(true);
_mapActions.last()->activate(QAction::Trigger);
_mapActions.last()->trigger();
return true;
} else {
@ -1237,10 +1290,11 @@ void GUI::updateNavigationActions()
}
}
void GUI::updateGraphTabs()
bool GUI::updateGraphTabs()
{
int index;
GraphTab *tab;
bool hidden = _graphTabWidget->isHidden();
for (int i = 0; i < _tabs.size(); i++) {
tab = _tabs.at(i);
@ -1264,14 +1318,20 @@ void GUI::updateGraphTabs()
_graphTabWidget->setHidden(true);
_showGraphsAction->setEnabled(false);
}
return (hidden != _graphTabWidget->isHidden());
}
void GUI::updateMapView()
bool GUI::updateMapView()
{
bool hidden = _mapView->isHidden();
if (_options.alwaysShowMap)
_mapView->setHidden(false);
else
_mapView->setHidden(!(_trackCount + _routeCount + _waypointCount));
return (hidden != _mapView->isHidden());
}
void GUI::setTimeType(TimeType type)
@ -1293,6 +1353,11 @@ void GUI::setUnits(Units units)
updateStatusBarInfo();
}
void GUI::setCoordinatesFormat(CoordinatesFormat format)
{
_mapView->setCoordinatesFormat(format);
}
void GUI::setGraphType(GraphType type)
{
_sliderPos = 0;
@ -1363,15 +1428,15 @@ void GUI::keyPressEvent(QKeyEvent *event)
case TOGGLE_GRAPH_TYPE_KEY:
if (_timeGraphAction->isChecked())
_distanceGraphAction->activate(QAction::Trigger);
_distanceGraphAction->trigger();
else
_timeGraphAction->activate(QAction::Trigger);
_timeGraphAction->trigger();
break;
case TOGGLE_TIME_TYPE_KEY:
if (_movingTimeAction->isChecked())
_totalTimeAction->activate(QAction::Trigger);
_totalTimeAction->trigger();
else
_movingTimeAction->activate(QAction::Trigger);
_movingTimeAction->trigger();
break;
case Qt::Key_Escape:
@ -1437,11 +1502,15 @@ void GUI::writeSettings()
if ((_movingTimeAction->isChecked() ? Moving : Total) !=
TIME_TYPE_DEFAULT)
settings.setValue(TIME_TYPE_SETTING, _movingTimeAction->isChecked()
? Moving : Total);
if ((_imperialUnitsAction->isChecked() ? Imperial : Metric) !=
UNITS_DEFAULT)
settings.setValue(UNITS_SETTING, _imperialUnitsAction->isChecked()
? Imperial : Metric);
? Moving : Total);
Units units = _imperialUnitsAction->isChecked() ? Imperial
: _nauticalUnitsAction->isChecked() ? Nautical : Metric;
if (units != UNITS_DEFAULT)
settings.setValue(UNITS_SETTING, units);
CoordinatesFormat format = _DMSAction->isChecked() ? DMS
: _degreesMinutesAction->isChecked() ? DegreesMinutes : DecimalDegrees;
if (format != COORDINATES_DEFAULT)
settings.setValue(COORDINATES_SETTING, format);
if (_showToolbarsAction->isChecked() != SHOW_TOOLBARS_DEFAULT)
settings.setValue(SHOW_TOOLBARS_SETTING,
_showToolbarsAction->isChecked());
@ -1575,6 +1644,8 @@ void GUI::writeSettings()
settings.setValue(USE_OPENGL_SETTING, _options.useOpenGL);
if (_options.pixmapCache != PIXMAP_CACHE_DEFAULT)
settings.setValue(PIXMAP_CACHE_SETTING, _options.pixmapCache);
if (_options.connectionTimeout != CONNECTION_TIMEOUT_DEFAULT)
settings.setValue(CONNECTION_TIMEOUT_SETTING, _options.connectionTimeout);
if (_options.hiresPrint != HIRES_PRINT_DEFAULT)
settings.setValue(HIRES_PRINT_SETTING, _options.hiresPrint);
if (_options.printName != PRINT_NAME_DEFAULT)
@ -1601,6 +1672,7 @@ void GUI::writeSettings()
void GUI::readSettings()
{
int value;
QSettings settings(APP_NAME, APP_NAME);
settings.beginGroup(WINDOW_SETTINGS_GROUP);
@ -1610,20 +1682,27 @@ void GUI::readSettings()
settings.beginGroup(SETTINGS_SETTINGS_GROUP);
if (settings.value(TIME_TYPE_SETTING, TIME_TYPE_DEFAULT).toInt()
== Moving) {
setTimeType(Moving);
_movingTimeAction->setChecked(true);
} else {
setTimeType(Total);
_totalTimeAction->setChecked(true);
}
if (settings.value(UNITS_SETTING, UNITS_DEFAULT).toInt() == Imperial) {
setUnits(Imperial);
_imperialUnitsAction->setChecked(true);
} else {
setUnits(Metric);
_metricUnitsAction->setChecked(true);
}
== Moving)
_movingTimeAction->trigger();
else
_totalTimeAction->trigger();
value = settings.value(UNITS_SETTING, UNITS_DEFAULT).toInt();
if (value == Imperial)
_imperialUnitsAction->trigger();
else if (value == Nautical)
_nauticalUnitsAction->trigger();
else
_metricUnitsAction->trigger();
value = settings.value(COORDINATES_SETTING, COORDINATES_DEFAULT).toInt();
if (value == DMS)
_DMSAction->trigger();
else if (value == DegreesMinutes)
_degreesMinutesAction->trigger();
else
_decimalDegreesAction->trigger();
if (!settings.value(SHOW_TOOLBARS_SETTING, SHOW_TOOLBARS_DEFAULT).toBool())
showToolbars(false);
else
@ -1633,6 +1712,8 @@ void GUI::readSettings()
settings.beginGroup(MAP_SETTINGS_GROUP);
if (settings.value(SHOW_MAP_SETTING, SHOW_MAP_DEFAULT).toBool())
_showMapAction->setChecked(true);
else
_mapView->showMap(false);
if (_ml->maps().count()) {
int index = mapIndex(settings.value(CURRENT_MAP_SETTING).toString());
_mapActions.at(index)->trigger();
@ -1793,6 +1874,8 @@ void GUI::readSettings()
.toBool();
_options.pixmapCache = settings.value(PIXMAP_CACHE_SETTING,
PIXMAP_CACHE_DEFAULT).toInt();
_options.connectionTimeout = settings.value(CONNECTION_TIMEOUT_SETTING,
CONNECTION_TIMEOUT_DEFAULT).toInt();
_options.hiresPrint = settings.value(HIRES_PRINT_SETTING,
HIRES_PRINT_DEFAULT).toBool();
_options.printName = settings.value(PRINT_NAME_SETTING, PRINT_NAME_DEFAULT)
@ -1852,6 +1935,7 @@ void GUI::readSettings()
_poi->setRadius(_options.poiRadius);
QPixmapCache::setCacheLimit(_options.pixmapCache * 1024);
Downloader::setTimeout(_options.connectionTimeout);
settings.endGroup();
}
@ -1867,7 +1951,8 @@ int GUI::mapIndex(const QString &name)
Units GUI::units() const
{
return _imperialUnitsAction->isChecked() ? Imperial : Metric;
return _imperialUnitsAction->isChecked() ? Imperial
: _nauticalUnitsAction->isChecked() ? Nautical : Metric;
}
qreal GUI::distance() const

View File

@ -10,6 +10,7 @@
#include "data/poi.h"
#include "units.h"
#include "timetype.h"
#include "format.h"
#include "exportdialog.h"
#include "optionsdialog.h"
@ -19,6 +20,7 @@ class QTabWidget;
class QActionGroup;
class QAction;
class QLabel;
class QSplitter;
class QSignalMapper;
class QPrinter;
class FileBrowser;
@ -73,8 +75,12 @@ private slots:
void setMovingTime() {setTimeType(Moving);}
void setMetricUnits() {setUnits(Metric);}
void setImperialUnits() {setUnits(Imperial);}
void setNauticalUnits() {setUnits(Nautical);}
void setDistanceGraph() {setGraphType(Distance);}
void setTimeGraph() {setGraphType(Time);}
void setDecimalDegrees() {setCoordinatesFormat(DecimalDegrees);}
void setDegreesMinutes() {setCoordinatesFormat(DegreesMinutes);}
void setDMS() {setCoordinatesFormat(DMS);}
void sliderPositionChanged(qreal pos);
@ -104,13 +110,14 @@ private:
void updateStatusBarInfo();
void updateWindowTitle();
void updateNavigationActions();
void updateGraphTabs();
void updateMapView();
bool updateGraphTabs();
bool updateMapView();
TimeType timeType() const;
Units units() const;
void setTimeType(TimeType type);
void setUnits(Units units);
void setCoordinatesFormat(CoordinatesFormat format);
void setGraphType(GraphType type);
qreal distance() const;
@ -165,6 +172,10 @@ private:
QAction *_firstAction;
QAction *_metricUnitsAction;
QAction *_imperialUnitsAction;
QAction *_nauticalUnitsAction;
QAction *_decimalDegreesAction;
QAction *_degreesMinutesAction;
QAction *_DMSAction;
QAction *_totalTimeAction;
QAction *_movingTimeAction;
QAction *_nextMapAction;
@ -186,6 +197,7 @@ private:
QLabel *_distanceLabel;
QLabel *_timeLabel;
QSplitter *_splitter;
MapView *_mapView;
QTabWidget *_graphTabWidget;
QList<GraphTab*> _tabs;
@ -214,6 +226,8 @@ private:
Export _export;
Options _options;
QString _dataDir, _mapDir, _poiDir;
};
#endif // GUI_H

View File

@ -24,28 +24,33 @@ void HeartRateGraph::setInfo()
clearInfo();
}
void HeartRateGraph::loadData(const Data &data, const QList<PathItem *> &paths)
QList<GraphItem*> HeartRateGraph::loadData(const Data &data)
{
QList<GraphItem*> graphs;
for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->heartRate();
if (graph.size() < 2) {
skipColor();
continue;
graphs.append(0);
} else {
HeartRateGraphItem *gi = new HeartRateGraphItem(graph, _graphType);
GraphView::addGraph(gi);
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
graphs.append(gi);
}
HeartRateGraphItem *gi = new HeartRateGraphItem(graph, _graphType);
GraphView::addGraph(gi, paths.at(i));
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
}
for (int i = 0; i < data.routes().count(); i++)
for (int i = 0; i < data.routes().count(); i++) {
skipColor();
graphs.append(0);
}
setInfo();
redraw();
return graphs;
}
qreal HeartRateGraph::avg() const

View File

@ -11,7 +11,7 @@ public:
HeartRateGraph(QWidget *parent = 0);
QString label() const {return tr("Heart rate");}
void loadData(const Data &data, const QList<PathItem *> &paths);
QList<GraphItem*> loadData(const Data &data);
void clear();
void showTracks(bool show);

View File

@ -7,6 +7,9 @@
InfoItem::InfoItem(QGraphicsItem *parent) : QGraphicsItem(parent)
{
_font.setPixelSize(FONT_SIZE);
_font.setFamily(FONT_FAMILY);
#ifndef Q_OS_MAC
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
#endif // Q_OS_MAC
@ -14,16 +17,14 @@ InfoItem::InfoItem(QGraphicsItem *parent) : QGraphicsItem(parent)
void InfoItem::updateBoundingRect()
{
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QList<KV>::const_iterator i;
QFontMetrics fm(_font);
qreal width = 0;
for (i = _list.constBegin(); i != _list.constEnd(); i++) {
for (QList<KV>::const_iterator i = _list.constBegin();
i != _list.constEnd(); i++) {
width += fm.width(i->key + ": ");
width += fm.width(i->value) + ((i == _list.end() - 1) ? 0 : PADDING);
width += fm.width(i->value) + ((i == _list.constEnd() - 1)
? 0 : PADDING);
}
_boundingRect = QRectF(0, 0, width, _list.isEmpty() ? 0 : fm.height());
@ -34,23 +35,20 @@ void InfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
{
Q_UNUSED(option);
Q_UNUSED(widget);
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
painter->setFont(font);
QFontMetrics fm(font);
QList<KV>::const_iterator i;
QFontMetrics fm(_font);
int width = 0;
painter->setFont(_font);
painter->setRenderHint(QPainter::Antialiasing, false);
for (i = _list.constBegin(); i != _list.constEnd(); i++) {
for (QList<KV>::const_iterator i = _list.constBegin();
i != _list.constEnd(); i++) {
painter->drawText(width, fm.height() - fm.descent(), i->key + ": ");
width += fm.width(i->key + ": ");
painter->drawText(width, fm.height() - fm.descent(), i->value);
width += fm.width(i->value) + ((i == _list.end() - 1) ? 0 : PADDING);
if (i != _list.end() - 1) {
width += fm.width(i->value) + ((i == _list.constEnd() - 1)
? 0 : PADDING);
if (i != _list.constEnd() - 1) {
painter->save();
painter->setPen(Qt::gray);
painter->drawLine(width - PADDING/2, fm.descent(),

View File

@ -33,6 +33,7 @@ private:
QList<KV> _list;
QRectF _boundingRect;
QFont _font;
};
#endif // INFOITEM_H

View File

@ -9,10 +9,8 @@
#define FIRST_KEY Qt::Key_Home
#define LAST_KEY Qt::Key_End
#define MODIFIER Qt::ShiftModifier
#define ZOOM_IN QKeySequence::ZoomIn
#define ZOOM_OUT QKeySequence::ZoomOut
#define ZOOM_IN Qt::Key_Plus
#define ZOOM_OUT Qt::Key_Minus
#define TOGGLE_GRAPH_TYPE_KEY Qt::Key_X
#define TOGGLE_TIME_TYPE_KEY Qt::Key_T

View File

@ -49,6 +49,7 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
connect(_poi, SIGNAL(pointsChanged()), this, SLOT(updatePOI()));
_units = Metric;
_coordinatesFormat = DecimalDegrees;
_opacity = 1.0;
_backgroundColor = Qt::white;
_markerColor = Qt::red;
@ -74,7 +75,7 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
_plot = false;
_digitalZoom = 0;
_map->setBackgroundColor(_backgroundColor);
_res = _map->resolution(_map->bounds());
_scene->setSceneRect(_map->bounds());
centerOn(_scene->sceneRect().center());
@ -83,18 +84,8 @@ MapView::MapView(Map *map, POI *poi, QWidget *parent)
void MapView::centerOn(const QPointF &pos)
{
QGraphicsView::centerOn(pos);
/* Fix the offset caused by QGraphicsView::centerOn() approximation */
QPointF center = mapToScene(viewport()->rect().center());
QPoint offset((int)(pos.x() - center.x()), (int)(pos.y() - center.y()));
if (qAbs(offset.x()) == 1)
horizontalScrollBar()->setValue(horizontalScrollBar()->value()
+ offset.x());
if (qAbs(offset.y()) == 1)
verticalScrollBar()->setValue(verticalScrollBar()->value()
+ offset.y());
_res = _map->resolution(pos);
QRectF vr(mapToScene(viewport()->rect()).boundingRect());
_res = _map->resolution(vr);
_mapScale->setResolution(_res);
}
@ -137,6 +128,7 @@ PathItem *MapView::addRoute(const Route &route)
ri->setWidth(_routeWidth);
ri->setStyle(_routeStyle);
ri->setUnits(_units);
ri->setCoordinatesFormat(_coordinatesFormat);
ri->setVisible(_showRoutes);
ri->showWaypoints(_showRouteWaypoints);
ri->showWaypointLabels(_showWaypointLabels);
@ -157,12 +149,12 @@ void MapView::addWaypoints(const QList<Waypoint> &waypoints)
WaypointItem *wi = new WaypointItem(w, _map);
_waypoints.append(wi);
_wr.unite(wi->waypoint().coordinates());
_wr = _wr.united(wi->waypoint().coordinates());
wi->setZValue(1);
wi->setSize(_waypointSize);
wi->setColor(_waypointColor);
wi->showLabel(_showWaypointLabels);
wi->setUnits(_units);
wi->setToolTipFormat(_units, _coordinatesFormat);
wi->setVisible(_showWaypoints);
wi->setDigitalZoom(_digitalZoom);
_scene->addItem(wi);
@ -175,7 +167,7 @@ void MapView::addWaypoints(const QList<Waypoint> &waypoints)
QList<PathItem *> MapView::loadData(const Data &data)
{
QList<PathItem *> paths;
qreal zoom = _map->zoom();
int zoom = _map->zoom();
for (int i = 0; i < data.tracks().count(); i++)
paths.append(addTrack(*(data.tracks().at(i))));
@ -186,7 +178,7 @@ QList<PathItem *> MapView::loadData(const Data &data)
if (_tracks.empty() && _routes.empty() && _waypoints.empty())
return paths;
if (mapZoom() != zoom)
if (fitMapZoom() != zoom)
rescale();
else
updatePOIVisibility();
@ -196,13 +188,13 @@ QList<PathItem *> MapView::loadData(const Data &data)
return paths;
}
qreal MapView::mapZoom() const
int MapView::fitMapZoom() const
{
RectC br = _tr | _rr | _wr;
return _map->zoomFit(viewport()->size() - QSize(2*MARGIN, 2*MARGIN),
br.isNull() ? RectC(_map->xy2ll(sceneRect().topLeft()),
_map->xy2ll(sceneRect().bottomRight())) : br);
br.isNull() ? RectC(_map->xy2ll(_map->bounds().topLeft()),
_map->xy2ll(_map->bounds().bottomRight())) : br);
}
QPointF MapView::contentCenter() const
@ -265,21 +257,20 @@ void MapView::setPalette(const Palette &palette)
void MapView::setMap(Map *map)
{
QPointF pos = mapToScene(viewport()->rect().center());
Coordinates center = _map->xy2ll(pos);
qreal resolution = _map->resolution(pos);
QRectF vr(mapToScene(viewport()->rect()).boundingRect()
.intersected(_map->bounds()));
RectC cr(_map->xy2ll(vr.topLeft()), _map->xy2ll(vr.bottomRight()));
_map->unload();
disconnect(_map, SIGNAL(loaded()), this, SLOT(reloadMap()));
_map = map;
_map->load();
_map->setBackgroundColor(_backgroundColor);
connect(_map, SIGNAL(loaded()), this, SLOT(reloadMap()));
digitalZoom(0);
_map->zoomFit(resolution, center);
_map->zoomFit(viewport()->rect().size(), cr);
_scene->setSceneRect(_map->bounds());
for (int i = 0; i < _tracks.size(); i++)
@ -294,7 +285,9 @@ void MapView::setMap(Map *map)
it.value()->setMap(_map);
updatePOIVisibility();
centerOn(_map->ll2xy(center));
QPointF nc = QRectF(_map->ll2xy(cr.topLeft()),
_map->ll2xy(cr.bottomRight())).center();
centerOn(nc);
resetCachedContent();
QPixmapCache::clear();
@ -348,34 +341,58 @@ void MapView::addPOI(const QList<Waypoint> &waypoints)
pi->showLabel(_showPOILabels);
pi->setVisible(_showPOI);
pi->setDigitalZoom(_digitalZoom);
pi->setToolTipFormat(_units, _coordinatesFormat);
_scene->addItem(pi);
_pois.insert(SearchPointer<Waypoint>(&(pi->waypoint())), pi);
}
}
void MapView::setUnits(enum Units units)
void MapView::setUnits(Units units)
{
if (_units == units)
return;
_units = units;
_mapScale->setUnits(units);
_mapScale->setUnits(_units);
for (int i = 0; i < _tracks.count(); i++)
_tracks[i]->setUnits(units);
_tracks[i]->setUnits(_units);
for (int i = 0; i < _routes.count(); i++)
_routes[i]->setUnits(units);
_routes[i]->setUnits(_units);
for (int i = 0; i < _waypoints.size(); i++)
_waypoints.at(i)->setUnits(units);
_waypoints.at(i)->setToolTipFormat(_units, _coordinatesFormat);
QHash<SearchPointer<Waypoint>, WaypointItem*>::const_iterator it;
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
it.value()->setUnits(units);
it.value()->setToolTipFormat(_units, _coordinatesFormat);
}
void MapView::setCoordinatesFormat(CoordinatesFormat format)
{
if (_coordinatesFormat == format)
return;
_coordinatesFormat = format;
for (int i = 0; i < _waypoints.count(); i++)
_waypoints.at(i)->setToolTipFormat(_units, _coordinatesFormat);
for (int i = 0; i < _routes.count(); i++)
_routes[i]->setCoordinatesFormat(_coordinatesFormat);
QHash<SearchPointer<Waypoint>, WaypointItem*>::const_iterator it;
for (it = _pois.constBegin(); it != _pois.constEnd(); it++)
it.value()->setToolTipFormat(_units, _coordinatesFormat);
}
void MapView::clearMapCache()
{
_map->clearCache();
resetCachedContent();
fitMapZoom();
rescale();
centerOn(contentCenter());
}
void MapView::digitalZoom(int zoom)
@ -402,7 +419,7 @@ void MapView::digitalZoom(int zoom)
_mapScale->setDigitalZoom(_digitalZoom);
}
void MapView::zoom(int zoom, const QPoint &pos, const Coordinates &c)
void MapView::zoom(int zoom, const QPoint &pos)
{
bool shift = QApplication::keyboardModifiers() & Qt::ShiftModifier;
@ -414,9 +431,9 @@ void MapView::zoom(int zoom, const QPoint &pos, const Coordinates &c)
digitalZoom(zoom);
} else {
qreal os, ns;
os = _map->zoom();
ns = (zoom > 0) ? _map->zoomIn() : _map->zoomOut();
Coordinates c = _map->xy2ll(mapToScene(pos));
qreal os = _map->zoom();
qreal ns = (zoom > 0) ? _map->zoomIn() : _map->zoomOut();
if (ns != os) {
rescale();
@ -437,8 +454,7 @@ void MapView::wheelEvent(QWheelEvent *event)
return;
deg = 0;
Coordinates c = _map->xy2ll(mapToScene(event->pos()));
zoom((event->delta() > 0) ? 1 : -1, event->pos(), c);
zoom((event->delta() > 0) ? 1 : -1, event->pos());
}
void MapView::mouseDoubleClickEvent(QMouseEvent *event)
@ -446,8 +462,7 @@ void MapView::mouseDoubleClickEvent(QMouseEvent *event)
if (event->button() != Qt::LeftButton && event->button() != Qt::RightButton)
return;
Coordinates c = _map->xy2ll(mapToScene(event->pos()));
zoom((event->button() == Qt::LeftButton) ? 1 : -1, event->pos(), c);
zoom((event->button() == Qt::LeftButton) ? 1 : -1, event->pos());
}
void MapView::keyPressEvent(QKeyEvent *event)
@ -455,11 +470,10 @@ void MapView::keyPressEvent(QKeyEvent *event)
int z;
QPoint pos = viewport()->rect().center();
Coordinates c = _map->xy2ll(mapToScene(pos));
if (event->matches(ZOOM_IN))
if (event->key() == ZOOM_IN)
z = 1;
else if (event->matches(ZOOM_OUT))
else if (event->key() == ZOOM_OUT)
z = -1;
else if (_digitalZoom && event->key() == Qt::Key_Escape) {
digitalZoom(0);
@ -469,22 +483,21 @@ void MapView::keyPressEvent(QKeyEvent *event)
return;
}
zoom(z, pos, c);
zoom(z, pos);
}
void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
bool hires)
{
QRect orig, adj;
qreal ratio, diff, origRes, q;
qreal ratio, diff, q;
QPointF origScene, origPos;
Coordinates origLL;
int zoom;
// Enter plot mode
setUpdatesEnabled(false);
_plot = true;
_map->setBlockingMode(true);
// Compute sizes & ratios
orig = viewport()->rect();
@ -503,9 +516,9 @@ void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
// Adjust the view for printing
if (hires) {
origScene = mapToScene(orig.center());
origLL = _map->xy2ll(origScene);
origRes = _map->resolution(origScene);
zoom = _map->zoom();
QRectF vr(mapToScene(orig).boundingRect());
origScene = vr.center();
QPointF s(painter->device()->logicalDpiX()
/ (qreal)metric(QPaintDevice::PdmDpiX),
@ -519,12 +532,12 @@ void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
centerOn(center);
adj.moveCenter(mapFromScene(center));
_mapScale->setDigitalZoom(-log2(s.x() / q));
_mapScale->setDigitalZoom(_digitalZoom - log2(s.x() / q));
_mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint(
-(SCALE_OFFSET + _mapScale->boundingRect().width()) * (s.x() / q),
-(SCALE_OFFSET + _mapScale->boundingRect().height()) * (s.x() / q)))));
} else {
_mapScale->setDigitalZoom(-log2(1.0 / q));
_mapScale->setDigitalZoom(_digitalZoom - log2(1.0 / q));
_mapScale->setPos(mapToScene(QPoint(adj.bottomRight() + QPoint(
-(SCALE_OFFSET + _mapScale->boundingRect().width()) / q ,
-(SCALE_OFFSET + _mapScale->boundingRect().height()) / q))));
@ -535,15 +548,14 @@ void MapView::plot(QPainter *painter, const QRectF &target, qreal scale,
// Revert view changes to display mode
if (hires) {
_map->zoomFit(origRes, origLL);
_map->setZoom(zoom);
rescale();
centerOn(origScene);
}
_mapScale->setDigitalZoom(0);
_mapScale->setDigitalZoom(_digitalZoom);
_mapScale->setPos(origPos);
// Exit plot mode
_map->setBlockingMode(false);
_plot = false;
setUpdatesEnabled(true);
}
@ -732,31 +744,27 @@ void MapView::setMapOpacity(int opacity)
void MapView::setBackgroundColor(const QColor &color)
{
_backgroundColor = color;
_map->setBackgroundColor(color);
resetCachedContent();
}
void MapView::drawBackground(QPainter *painter, const QRectF &rect)
{
painter->fillRect(rect, _backgroundColor);
if (_showMap) {
QRectF ir = rect.intersected(_map->bounds());
if (_opacity < 1.0 || ir != rect)
painter->fillRect(rect, _backgroundColor);
if (_opacity < 1.0)
painter->setOpacity(_opacity);
_map->draw(painter, ir);
} else
painter->fillRect(rect, _backgroundColor);
_map->draw(painter, ir, _plot);
}
}
void MapView::resizeEvent(QResizeEvent *event)
{
QGraphicsView::resizeEvent(event);
qreal zoom = _map->zoom();
if (mapZoom() != zoom)
int zoom = _map->zoom();
if (fitMapZoom() != zoom)
rescale();
centerOn(contentCenter());
@ -777,8 +785,8 @@ void MapView::scrollContentsBy(int dx, int dy)
{
QGraphicsView::scrollContentsBy(dx, dy);
QPointF center = mapToScene(viewport()->rect().center());
qreal res = _map->resolution(center);
QRectF sr(mapToScene(viewport()->rect()).boundingRect());
qreal res = _map->resolution(sr);
if (qMax(res, _res) / qMin(res, _res) > 1.1) {
_mapScale->setResolution(res);

View File

@ -9,6 +9,7 @@
#include "data/waypoint.h"
#include "searchpointer.h"
#include "units.h"
#include "format.h"
#include "palette.h"
class Data;
@ -21,6 +22,7 @@ class RouteItem;
class WaypointItem;
class ScaleItem;
class PathItem;
class GraphItem;
class MapView : public QGraphicsView
{
@ -29,17 +31,18 @@ class MapView : public QGraphicsView
public:
MapView(Map *map, POI *poi, QWidget *parent = 0);
QList<PathItem*> loadData(const Data &data);
QList<PathItem *> loadData(const Data &data);
void setPalette(const Palette &palette);
void setPOI(POI *poi);
void setMap(Map *map);
void setUnits(enum Units units);
void plot(QPainter *painter, const QRectF &target, qreal scale, bool hires);
void clear();
void setUnits(Units units);
void setMarkerColor(const QColor &color);
void setTrackWidth(int width);
void setRouteWidth(int width);
void setTrackStyle(Qt::PenStyle style);
@ -52,7 +55,6 @@ public:
void setBackgroundColor(const QColor &color);
void useOpenGL(bool use);
void useAntiAliasing(bool use);
void setMarkerColor(const QColor &color);
public slots:
void showMap(bool show);
@ -65,6 +67,7 @@ public slots:
void showWaypoints(bool show);
void showRouteWaypoints(bool show);
void clearMapCache();
void setCoordinatesFormat(CoordinatesFormat format);
private slots:
void updatePOI();
@ -78,11 +81,11 @@ private:
void loadPOI();
void clearPOI();
qreal mapZoom() const;
int fitMapZoom() const;
QPointF contentCenter() const;
void rescale();
void centerOn(const QPointF &pos);
void zoom(int zoom, const QPoint &pos, const Coordinates &c);
void zoom(int zoom, const QPoint &pos);
void digitalZoom(int zoom);
void updatePOIVisibility();
@ -108,6 +111,7 @@ private:
POI *_poi;
Palette _palette;
Units _units;
CoordinatesFormat _coordinatesFormat;
qreal _opacity;
QColor _backgroundColor;

View File

@ -25,11 +25,13 @@ private:
qreal _left, _top, _right, _bottom;
};
#ifndef QT_NO_DEBUG
inline QDebug operator<<(QDebug dbg, const MarginsF &margins)
{
dbg.nospace() << "MarginsF(" << margins.left() << ", " << margins.top()
<< ", " << margins.right() << margins.bottom() << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG
#endif // MARGINS_H

View File

@ -291,6 +291,9 @@ QWidget *OptionsDialog::createDataPage()
if (_options->units == Imperial) {
_pauseSpeed->setValue(_options->pauseSpeed * MS2MIH);
_pauseSpeed->setSuffix(UNIT_SPACE + tr("mi/h"));
} else if (_options->units == Nautical) {
_pauseSpeed->setValue(_options->pauseSpeed * MS2KN);
_pauseSpeed->setSuffix(UNIT_SPACE + tr("kn"));
} else {
_pauseSpeed->setValue(_options->pauseSpeed * MS2KMH);
_pauseSpeed->setSuffix(UNIT_SPACE + tr("km/h"));
@ -323,6 +326,9 @@ QWidget *OptionsDialog::createPOIPage()
if (_options->units == Imperial) {
_poiRadius->setValue(_options->poiRadius / MIINM);
_poiRadius->setSuffix(UNIT_SPACE + tr("mi"));
} else if (_options->units == Nautical) {
_poiRadius->setValue(_options->poiRadius / NMIINM);
_poiRadius->setSuffix(UNIT_SPACE + tr("nmi"));
} else {
_poiRadius->setValue(_options->poiRadius / KMINM);
_poiRadius->setSuffix(UNIT_SPACE + tr("km"));
@ -425,16 +431,23 @@ QWidget *OptionsDialog::createSystemPage()
_pixmapCache->setSuffix(UNIT_SPACE + tr("MB"));
_pixmapCache->setValue(_options->pixmapCache);
QFormLayout *cacheLayout = new QFormLayout();
cacheLayout->addRow(tr("Image cache size:"), _pixmapCache);
_connectionTimeout = new QSpinBox();
_connectionTimeout->setMinimum(30);
_connectionTimeout->setMaximum(120);
_connectionTimeout->setSuffix(UNIT_SPACE + tr("s"));
_connectionTimeout->setValue(_options->connectionTimeout);
QFormLayout *openGLLayout = new QFormLayout();
openGLLayout->addWidget(_useOpenGL);
QFormLayout *formLayout = new QFormLayout();
formLayout->addRow(tr("Image cache size:"), _pixmapCache);
formLayout->addRow(tr("Connection timeout:"), _connectionTimeout);
QFormLayout *checkboxLayout = new QFormLayout();
checkboxLayout->addWidget(_useOpenGL);
QWidget *systemTab = new QWidget();
QVBoxLayout *systemTabLayout = new QVBoxLayout();
systemTabLayout->addLayout(cacheLayout);
systemTabLayout->addLayout(openGLLayout);
systemTabLayout->addLayout(formLayout);
systemTabLayout->addLayout(checkboxLayout);
systemTabLayout->addStretch();
systemTab->setLayout(systemTabLayout);
@ -525,18 +538,21 @@ void OptionsDialog::accept()
_options->powerFilter = _powerFilter->value();
_options->outlierEliminate = _outlierEliminate->isChecked();
qreal pauseSpeed = (_options->units == Imperial)
? _pauseSpeed->value() / MS2MIH : _pauseSpeed->value() / MS2KMH;
? _pauseSpeed->value() / MS2MIH : (_options->units == Nautical)
? _pauseSpeed->value() / MS2KN : _pauseSpeed->value() / MS2KMH;
if (qAbs(pauseSpeed - _options->pauseSpeed) > 0.01)
_options->pauseSpeed = pauseSpeed;
_options->pauseInterval = _pauseInterval->value();
qreal poiRadius = (_options->units == Imperial)
? _poiRadius->value() * MIINM : _poiRadius->value() * KMINM;
? _poiRadius->value() * MIINM : (_options->units == Nautical)
? _poiRadius->value() * NMIINM : _poiRadius->value() * KMINM;
if (qAbs(poiRadius - _options->poiRadius) > 0.01)
_options->poiRadius = poiRadius;
_options->useOpenGL = _useOpenGL->isChecked();
_options->pixmapCache = _pixmapCache->value();
_options->connectionTimeout = _connectionTimeout->value();
_options->hiresPrint = _hires->isChecked();
_options->printName = _name->isChecked();

View File

@ -48,6 +48,7 @@ struct Options {
// System
bool useOpenGL;
int pixmapCache;
int connectionTimeout;
// Print/Export
bool hiresPrint;
bool printName;
@ -113,6 +114,7 @@ private:
QDoubleSpinBox *_poiRadius;
// System
QSpinBox *_pixmapCache;
QSpinBox *_connectionTimeout;
QCheckBox *_useOpenGL;
// Print/Export
QRadioButton *_wysiwyg;

View File

@ -37,9 +37,11 @@ void Palette::reset()
_state = _h;
}
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Palette &palette)
{
dbg.nospace() << "Palette(" << palette.color() << ", " << palette.shift()
<< ")";
return dbg.space();
}
#endif // QT_NO_DEBUG

View File

@ -28,6 +28,8 @@ private:
qreal _state;
};
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Palette &palette);
#endif // QT_NO_DEBUG
#endif // PALLETE_H

View File

@ -24,28 +24,33 @@ void PowerGraph::setInfo()
clearInfo();
}
void PowerGraph::loadData(const Data &data, const QList<PathItem *> &paths)
QList<GraphItem*> PowerGraph::loadData(const Data &data)
{
QList<GraphItem*> graphs;
for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->power();
if (graph.size() < 2) {
skipColor();
continue;
graphs.append(0);
} else {
PowerGraphItem *gi = new PowerGraphItem(graph, _graphType);
GraphView::addGraph(gi);
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
graphs.append(gi);
}
PowerGraphItem *gi = new PowerGraphItem(graph, _graphType);
GraphView::addGraph(gi, paths.at(i));
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
}
for (int i = 0; i < data.routes().count(); i++)
for (int i = 0; i < data.routes().count(); i++) {
skipColor();
graphs.append(0);
}
setInfo();
redraw();
return graphs;
}
qreal PowerGraph::avg() const

View File

@ -11,7 +11,7 @@ public:
PowerGraph(QWidget *parent = 0);
QString label() const {return tr("Power");}
void loadData(const Data &data, const QList<PathItem *> &paths);
QList<GraphItem*> loadData(const Data &data);
void clear();
void showTracks(bool show);

View File

@ -30,6 +30,8 @@ RouteItem::RouteItem(const Route &route, Map *map, QGraphicsItem *parent)
_name = route.name();
_desc = route.description();
_units = Metric;
_coordinatesFormat = DecimalDegrees;
setToolTip(toolTip(Metric));
}
@ -47,9 +49,38 @@ void RouteItem::setMap(Map *map)
PathItem::setMap(map);
}
void RouteItem::setUnits(enum Units units)
void RouteItem::setUnits(Units units)
{
setToolTip(toolTip(units));
if (_units == units)
return;
_units = units;
setToolTip(toolTip(_units));
QList<QGraphicsItem *> childs = childItems();
for (int i = 0; i < childs.count(); i++) {
if (childs.at(i) != _marker) {
WaypointItem *wi = static_cast<WaypointItem*>(childs.at(i));
wi->setToolTipFormat(_units, _coordinatesFormat);
}
}
}
void RouteItem::setCoordinatesFormat(CoordinatesFormat format)
{
if (_coordinatesFormat == format)
return;
_coordinatesFormat = format;
QList<QGraphicsItem *> childs = childItems();
for (int i = 0; i < childs.count(); i++) {
if (childs.at(i) != _marker) {
WaypointItem *wi = static_cast<WaypointItem*>(childs.at(i));
wi->setToolTipFormat(_units, _coordinatesFormat);
}
}
}
void RouteItem::showWaypoints(bool show)

View File

@ -4,6 +4,7 @@
#include "data/route.h"
#include "pathitem.h"
#include "units.h"
#include "format.h"
class Map;
@ -17,6 +18,7 @@ public:
void setMap(Map *map);
void setUnits(Units units);
void setCoordinatesFormat(CoordinatesFormat format);
void showWaypoints(bool show);
void showWaypointLabels(bool show);
@ -25,6 +27,8 @@ private:
QString _name;
QString _desc;
Units _units;
CoordinatesFormat _coordinatesFormat;
};
#endif // ROUTEITEM_H

View File

@ -18,52 +18,34 @@ ScaleItem::ScaleItem(QGraphicsItem *parent) : QGraphicsItem(parent)
_res = 1.0;
_digitalZoom = 0;
_font.setPixelSize(FONT_SIZE);
_font.setFamily(FONT_FAMILY);
#ifndef Q_OS_MAC
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
#endif // Q_OS_MAC
}
void ScaleItem::updateBoundingRect()
{
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QRect ss, es, us;
ss = fm.tightBoundingRect(QString::number(0));
es = fm.tightBoundingRect(QString::number(_length * SEGMENTS));
us = fm.tightBoundingRect(units());
_boundingRect = QRectF(-ss.width()/2, 0, _width * SEGMENTS + ss.width()/2
+ qMax(us.width() + PADDING, es.width()/2) + 1, SCALE_HEIGHT + PADDING
+ ss.height() + 2*fm.descent());
}
void ScaleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QFontMetrics fm(_font);
QRect br;
QPen pen = QPen(Qt::black, BORDER_WIDTH);
painter->setRenderHint(QPainter::Antialiasing, false);
painter->setFont(font);
painter->setPen(pen);
painter->setFont(_font);
painter->setPen(QPen(Qt::black, BORDER_WIDTH));
for (int i = 0; i <= SEGMENTS; i++) {
QString label = QString::number(_length * i);
br = fm.tightBoundingRect(label);
painter->drawText(_width * i - br.width()/2, br.height() + 1, label);
for (int i = 0; i < _ticks.size(); i++) {
br = _ticks.at(i).boundingBox;
painter->drawText(_width * i - br.width()/2, br.height() + 1,
QString::number(_ticks.at(i).value));
}
painter->drawText(_width * SEGMENTS + PADDING, SCALE_HEIGHT + PADDING
+ br.height() + fm.descent(), units());
+ br.height() + fm.descent(), _unitsStr);
painter->drawRect(QRectF(0, br.height() + PADDING, SEGMENTS * _width,
SCALE_HEIGHT));
@ -77,16 +59,6 @@ void ScaleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
*/
}
QString ScaleItem::units() const
{
if (_units == Imperial)
return _scale ? qApp->translate("ScaleItem", "mi")
: qApp->translate("ScaleItem", "ft");
else
return _scale ? qApp->translate("ScaleItem", "km")
: qApp->translate("ScaleItem", "m");
}
void ScaleItem::computeScale()
{
qreal res = _res * pow(2, -_digitalZoom);
@ -94,8 +66,18 @@ void ScaleItem::computeScale()
if (_units == Imperial) {
_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 * M2MI * SCALE_WIDTH) / SEGMENTS, 1);
_width = (_length / (res * M2MI));
_scale = true;
} else {
_width = (_length / (res * M2FT));
_scale = false;
}
} else if (_units == Nautical) {
_length = niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, 1);
if (_length >= NMIINFT) {
_length = niceNum((res * M2NMI * SCALE_WIDTH) / SEGMENTS, 1);
_width = (_length / (res * M2NMI));
_scale = true;
} else {
_width = (_length / (res * M2FT));
@ -114,21 +96,50 @@ void ScaleItem::computeScale()
}
}
void ScaleItem::updateCache()
{
QFontMetrics fm(_font);
_ticks = QVector<Tick>(SEGMENTS + 1);
for (int i = 0; i < _ticks.size(); i++) {
Tick &t = _ticks[i];
t.value = _length * i;
t.boundingBox = fm.tightBoundingRect(QString::number(t.value));
}
if (_units == Imperial)
_unitsStr = _scale ? qApp->translate("ScaleItem", "mi")
: qApp->translate("ScaleItem", "ft");
else if (_units == Nautical)
_unitsStr = _scale ? qApp->translate("ScaleItem", "nmi")
: qApp->translate("ScaleItem", "ft");
else
_unitsStr = _scale ? qApp->translate("ScaleItem", "km")
: qApp->translate("ScaleItem", "m");
_unitsBB = fm.tightBoundingRect(_unitsStr);
QRect ss = _ticks.isEmpty() ? QRect() : _ticks.first().boundingBox;
QRect es = _ticks.isEmpty() ? QRect() : _ticks.last().boundingBox;
_boundingRect = QRectF(-ss.width()/2, 0, _width * SEGMENTS + ss.width()/2
+ qMax(_unitsBB.width() + PADDING, es.width()/2) + 1, SCALE_HEIGHT
+ PADDING + ss.height() + 2*fm.descent());
}
void ScaleItem::setResolution(qreal res)
{
prepareGeometryChange();
_res = res;
computeScale();
updateBoundingRect();
updateCache();
update();
}
void ScaleItem::setUnits(enum Units units)
void ScaleItem::setUnits(Units units)
{
prepareGeometryChange();
_units = units;
computeScale();
updateBoundingRect();
updateCache();
update();
}
@ -137,7 +148,7 @@ void ScaleItem::setDigitalZoom(qreal zoom)
prepareGeometryChange();
_digitalZoom = zoom;
computeScale();
updateBoundingRect();
updateCache();
update();
setScale(pow(2, -_digitalZoom));

View File

@ -14,23 +14,29 @@ public:
QWidget *widget);
void setResolution(qreal res);
void setUnits(enum Units units);
void setUnits(Units units);
void setDigitalZoom(qreal zoom);
private:
void updateBoundingRect();
struct Tick {
double value;
QRect boundingBox;
};
void computeScale();
QString units() const;
void updateCache();
qreal _res;
qreal _width;
qreal _length;
Units _units;
bool _scale;
qreal _digitalZoom;
QRectF _boundingRect;
QFont _font;
QVector<Tick> _ticks;
QRect _unitsBB;
QString _unitsStr;
};
#endif // SCALEITEM_H

View File

@ -15,6 +15,8 @@
#define TIME_TYPE_DEFAULT Total
#define UNITS_SETTING "units"
#define UNITS_DEFAULT (IMPERIAL_UNITS() ? Imperial : Metric)
#define COORDINATES_SETTING "coordinates"
#define COORDINATES_DEFAULT DecimalDegrees
#define SHOW_TOOLBARS_SETTING "toolbar"
#define SHOW_TOOLBARS_DEFAULT true
@ -128,6 +130,8 @@
#define USE_OPENGL_DEFAULT false
#define PIXMAP_CACHE_SETTING "pixmapCache"
#define PIXMAP_CACHE_DEFAULT 64 /* MB */
#define CONNECTION_TIMEOUT_SETTING "connectionTimeout"
#define CONNECTION_TIMEOUT_DEFAULT 30 /* s */
#define HIRES_PRINT_SETTING "hiresPrint"
#define HIRES_PRINT_DEFAULT false
#define PRINT_NAME_SETTING "printName"

View File

@ -9,14 +9,14 @@ SliderInfoItem::SliderInfoItem(QGraphicsItem *parent) : QGraphicsItem(parent)
{
_side = Right;
_color = Qt::red;
_font.setPixelSize(FONT_SIZE);
_font.setFamily(FONT_FAMILY);
}
void SliderInfoItem::updateBoundingRect()
{
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QFontMetrics fm(_font);
qreal width = qMax(fm.width(_x), fm.width(_y));
qreal height = 2 * fm.height() - 2*fm.descent();
@ -31,10 +31,7 @@ void SliderInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
{
Q_UNUSED(option);
Q_UNUSED(widget);
QFont font;
font.setPixelSize(FONT_SIZE);
font.setFamily(FONT_FAMILY);
QFontMetrics fm(font);
QFontMetrics fm(_font);
QRectF rx, ry;
@ -57,7 +54,7 @@ void SliderInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
painter->drawRect(rx);
painter->setBrush(Qt::NoBrush);
painter->setFont(font);
painter->setFont(_font);
painter->setRenderHint(QPainter::Antialiasing, false);
painter->setPen(_color);

View File

@ -25,6 +25,7 @@ private:
QString _x, _y;
QRectF _boundingRect;
QColor _color;
QFont _font;
};
#endif // SLIDERINFOITEM_H

View File

@ -1,16 +1,18 @@
#include "data/data.h"
#include "config.h"
#include "tooltip.h"
#include "format.h"
#include "speedgraphitem.h"
#include "speedgraph.h"
SpeedGraph::SpeedGraph(QWidget *parent) : GraphTab(parent)
{
_units = Metric;
_timeType = Total;
_showTracks = true;
setYUnits(Metric);
setYUnits();
setYLabel(tr("Speed"));
setSliderPrecision(1);
@ -19,40 +21,50 @@ SpeedGraph::SpeedGraph(QWidget *parent) : GraphTab(parent)
void SpeedGraph::setInfo()
{
if (_showTracks) {
QString pace = Format::timeSpan((3600.0 / (avg() * yScale())), false);
QString pu = (_units == Metric) ? tr("min/km") : (_units == Imperial) ?
tr("min/mi") : tr("min/nmi");
GraphView::addInfo(tr("Average"), QString::number(avg() * yScale(), 'f',
1) + UNIT_SPACE + yUnits());
GraphView::addInfo(tr("Maximum"), QString::number(max() * yScale(), 'f',
1) + UNIT_SPACE + yUnits());
GraphView::addInfo(tr("Pace"), pace + UNIT_SPACE + pu);
} else
clearInfo();
}
void SpeedGraph::loadData(const Data &data, const QList<PathItem *> &paths)
QList<GraphItem*> SpeedGraph::loadData(const Data &data)
{
QList<GraphItem*> graphs;
for (int i = 0; i < data.tracks().count(); i++) {
const Track *track = data.tracks().at(i);
const Graph &graph = track->speed();
if (graph.size() < 2) {
skipColor();
continue;
graphs.append(0);
} else {
SpeedGraphItem *gi = new SpeedGraphItem(graph, _graphType,
track->movingTime());
gi->setTimeType(_timeType);
GraphView::addGraph(gi);
_avg.append(QPointF(track->distance(), gi->avg()));
_mavg.append(QPointF(track->distance(), gi->mavg()));
graphs.append(gi);
}
SpeedGraphItem *gi = new SpeedGraphItem(graph, _graphType,
track->movingTime());
gi->setTimeType(_timeType);
GraphView::addGraph(gi, paths.at(i));
_avg.append(QPointF(track->distance(), gi->avg()));
_mavg.append(QPointF(track->distance(), gi->mavg()));
}
for (int i = 0; i < data.routes().count(); i++)
for (int i = 0; i < data.routes().count(); i++) {
skipColor();
graphs.append(0);
}
setInfo();
redraw();
return graphs;
}
qreal SpeedGraph::avg() const
@ -77,20 +89,25 @@ void SpeedGraph::clear()
GraphView::clear();
}
void SpeedGraph::setYUnits(Units units)
void SpeedGraph::setYUnits()
{
if (units == Metric) {
GraphView::setYUnits(tr("km/h"));
setYScale(MS2KMH);
} else {
if (_units == Nautical) {
GraphView::setYUnits(tr("kn"));
setYScale(MS2KN);
} else if (_units == Imperial) {
GraphView::setYUnits(tr("mi/h"));
setYScale(MS2MIH);
} else {
GraphView::setYUnits(tr("km/h"));
setYScale(MS2KMH);
}
}
void SpeedGraph::setUnits(Units units)
{
setYUnits(units);
_units = units;
setYUnits();
setInfo();
GraphView::setUnits(units);

View File

@ -12,7 +12,7 @@ public:
SpeedGraph(QWidget *parent = 0);
QString label() const {return tr("Speed");}
void loadData(const Data &data, const QList<PathItem *> &paths);
QList<GraphItem*> loadData(const Data &data);
void clear();
void setUnits(Units units);
void setTimeType(TimeType type);
@ -21,13 +21,14 @@ public:
private:
qreal avg() const;
qreal max() const {return bounds().bottom();}
void setYUnits(Units units);
void setYUnits();
void setInfo();
QList<QPointF> _avg;
QList<QPointF> _mavg;
enum TimeType _timeType;
Units _units;
TimeType _timeType;
bool _showTracks;
};

View File

@ -1,4 +1,5 @@
#include "tooltip.h"
#include "format.h"
#include "speedgraphitem.h"
SpeedGraphItem::SpeedGraphItem(const Graph &graph, GraphType type,
@ -16,13 +17,20 @@ SpeedGraphItem::SpeedGraphItem(const Graph &graph, GraphType type,
QString SpeedGraphItem::toolTip() const
{
ToolTip tt;
qreal scale = (_units == Metric) ? MS2KMH : MS2MIH;
QString su = (_units == Metric) ? tr("km/h") : tr("mi/h");
qreal scale = (_units == Imperial) ? MS2MIH : (_units == Nautical)
? MS2KN : MS2KMH;
QString su = (_units == Imperial) ? tr("mi/h") : (_units == Nautical)
? tr("kn") : tr("km/h");
QString pace = Format::timeSpan((3600.0 / ((_timeType == Total)
? avg() * scale : mavg() * scale)), false);
QString pu = (_units == Metric) ? tr("min/km") : (_units == Imperial) ?
tr("min/mi") : tr("min/nmi");
tt.insert(tr("Maximum"), QString::number(max() * scale, 'f', 1)
+ UNIT_SPACE + su);
tt.insert(tr("Average"), QString::number((_timeType == Total)
? avg() * scale : mavg() * scale, 'f', 1) + UNIT_SPACE + su);
tt.insert(tr("Pace"), pace + UNIT_SPACE + pu);
return tt.toString();
}

View File

@ -26,28 +26,34 @@ void TemperatureGraph::setInfo()
clearInfo();
}
void TemperatureGraph::loadData(const Data &data, const QList<PathItem *> &paths)
QList<GraphItem*> TemperatureGraph::loadData(const Data &data)
{
QList<GraphItem*> graphs;
for (int i = 0; i < data.tracks().count(); i++) {
const Graph &graph = data.tracks().at(i)->temperature();
if (graph.size() < 2) {
skipColor();
continue;
graphs.append(0);
} else {
TemperatureGraphItem *gi = new TemperatureGraphItem(graph,
_graphType);
GraphView::addGraph(gi);
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
graphs.append(gi);
}
TemperatureGraphItem *gi = new TemperatureGraphItem(graph, _graphType);
GraphView::addGraph(gi, paths.at(i));
_avg.append(QPointF(data.tracks().at(i)->distance(), gi->avg()));
}
for (int i = 0; i < data.routes().count(); i++)
for (int i = 0; i < data.routes().count(); i++) {
skipColor();
graphs.append(0);
}
setInfo();
redraw();
return graphs;
}
qreal TemperatureGraph::avg() const

View File

@ -11,7 +11,7 @@ public:
TemperatureGraph(QWidget *parent = 0);
QString label() const {return tr("Temperature");}
void loadData(const Data &data, const QList<PathItem *> &paths);
QList<GraphItem*> loadData(const Data &data);
void clear();
void setUnits(enum Units units);
void showTracks(bool show);

View File

@ -3,24 +3,29 @@
enum Units {
Metric,
Imperial
Imperial,
Nautical
};
#define M2KM 0.001000000000 // m -> km
#define M2MI 0.000621371192 // m -> mi
#define M2NMI 0.000539956803 // m -> nmi
#define M2FT 3.280839900000 // m -> ft
#define MS2KMH 3.600000000000 // m/s -> km/h
#define MS2MIH 2.236936290000 // m/s -> mi/h
#define MS2KN 1.943844490000 // m/s -> kn
#define FT2MI 0.000189393939 // ft -> mi
#define MM2IN 0.039370100000 // mm -> in
#define H2S 0.000277777778 // h -> s
#define MIN2S 0.016666666667 // min -> s
#define KMINM 1000.0 // 1 km in m
#define MIINFT 5280.0 // 1 mi in ft
#define MIINM 1609.344 // 1 mi in m
#define MININS 60.0 // 1 min in s
#define HINS 3600.0 // 1 hins
#define KMINM 1000.0 // 1 km in m
#define MIINFT 5280.0 // 1 mi in ft
#define NMIINFT 6076.11549 // 1 nm in ft
#define MIINM 1609.344 // 1 mi in m
#define NMIINM 1852.0 // 1 nmi in m
#define MININS 60.0 // 1 min in s
#define HINS 3600.0 // 1 hins
#define C2FS 1.8 // Celsius to Farenheit - scale
#define C2FO 32.0 // Celsius to Farenheit - offset

View File

@ -1,7 +1,6 @@
#include <QApplication>
#include <QPainter>
#include "config.h"
#include "format.h"
#include "tooltip.h"
#include "waypointitem.h"
@ -11,14 +10,14 @@
#define FS(size) \
((int)((qreal)size * 1.41))
QString WaypointItem::toolTip(Units units)
QString WaypointItem::toolTip(Units units, CoordinatesFormat format)
{
ToolTip tt;
if (!_waypoint.name().isEmpty())
tt.insert(qApp->translate("WaypointItem", "Name"), _waypoint.name());
tt.insert(qApp->translate("WaypointItem", "Coordinates"),
Format::coordinates(_waypoint.coordinates()));
Format::coordinates(_waypoint.coordinates(), format));
if (!std::isnan(_waypoint.elevation()))
tt.insert(qApp->translate("WaypointItem", "Elevation"),
Format::elevation(_waypoint.elevation(), units));
@ -37,35 +36,32 @@ WaypointItem::WaypointItem(const Waypoint &waypoint, Map *map,
{
_waypoint = waypoint;
_showLabel = true;
_hover = false;
_size = 8;
_color = Qt::black;
updateShape();
_font.setPixelSize(FS(_size));
_font.setFamily(FONT_FAMILY);
updateCache();
setPos(map->ll2xy(waypoint.coordinates()));
setToolTip(toolTip(Metric));
setToolTip(toolTip(Metric, DecimalDegrees));
setCursor(Qt::ArrowCursor);
setAcceptHoverEvents(true);
}
void WaypointItem::updateShape()
void WaypointItem::updateCache()
{
QPainterPath p;
qreal pointSize = _hover ? HS(_size) : _size;
qreal pointSize = _font.bold() ? HS(_size) : _size;
if (_showLabel) {
QFont font;
font.setPixelSize(FS(_size));
font.setFamily(FONT_FAMILY);
if (_hover)
font.setBold(true);
QFontMetrics fm(font);
QRect ts = fm.tightBoundingRect(_waypoint.name());
QFontMetrics fm(_font);
_labelBB = fm.tightBoundingRect(_waypoint.name());
p.addRect(-pointSize/2, -pointSize/2, pointSize, pointSize);
p.addRect(pointSize/2, pointSize/2,
ts.width(), ts.height() + fm.descent());
p.addRect(pointSize/2, pointSize/2, _labelBB.width(), _labelBB.height()
+ fm.descent());
} else
p.addRect(-pointSize/2, -pointSize/2, pointSize, pointSize);
@ -77,23 +73,14 @@ void WaypointItem::paint(QPainter *painter,
{
Q_UNUSED(option);
Q_UNUSED(widget);
qreal pointSize = _hover ? HS(_size) : _size;
qreal pointSize = _font.bold() ? HS(_size) : _size;
painter->setPen(_color);
if (_showLabel) {
QFont font;
font.setPixelSize(FS(_size));
font.setFamily(FONT_FAMILY);
if (_hover)
font.setBold(true);
QFontMetrics fm(font);
QRect ts = fm.tightBoundingRect(_waypoint.name());
painter->setFont(font);
painter->drawText(pointSize/2 - qMax(ts.x(), 0), pointSize/2
+ ts.height(), _waypoint.name());
painter->setFont(_font);
painter->drawText(pointSize/2 - qMax(_labelBB.x(), 0), pointSize/2
+ _labelBB.height(), _waypoint.name());
}
painter->setBrush(QBrush(_color, Qt::SolidPattern));
@ -108,27 +95,37 @@ void WaypointItem::paint(QPainter *painter,
void WaypointItem::setSize(int size)
{
if (_size == size)
return;
prepareGeometryChange();
_size = size;
updateShape();
_font.setPixelSize(FS(_size));
updateCache();
}
void WaypointItem::setColor(const QColor &color)
{
if (_color == color)
return;
_color = color;
update();
}
void WaypointItem::setUnits(enum Units units)
void WaypointItem::setToolTipFormat(Units units, CoordinatesFormat format)
{
setToolTip(toolTip(units));
setToolTip(toolTip(units, format));
}
void WaypointItem::showLabel(bool show)
{
if (_showLabel == show)
return;
prepareGeometryChange();
_showLabel = show;
updateShape();
updateCache();
}
void WaypointItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
@ -136,8 +133,8 @@ void WaypointItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
Q_UNUSED(event);
prepareGeometryChange();
_hover = true;
updateShape();
_font.setBold(true);
updateCache();
setZValue(zValue() + 1.0);
}
@ -146,7 +143,7 @@ void WaypointItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
Q_UNUSED(event);
prepareGeometryChange();
_hover = false;
updateShape();
_font.setBold(false);
updateCache();
setZValue(zValue() - 1.0);
}

View File

@ -6,6 +6,7 @@
#include "data/waypoint.h"
#include "map/map.h"
#include "units.h"
#include "format.h"
class WaypointItem : public QGraphicsItem
{
@ -15,7 +16,7 @@ public:
const Waypoint &waypoint() const {return _waypoint;}
void setMap(Map *map) {setPos(map->ll2xy(_waypoint.coordinates()));}
void setUnits(Units units);
void setToolTipFormat(Units units, CoordinatesFormat format);
void setSize(int size);
void setColor(const QColor &color);
void showLabel(bool show);
@ -30,16 +31,16 @@ private:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
void updateShape();
QString toolTip(Units units);
void updateCache();
QString toolTip(Units units, CoordinatesFormat format);
QPainterPath _shape;
Waypoint _waypoint;
QPainterPath _shape;
QColor _color;
int _size;
bool _hover;
bool _showLabel;
QFont _font;
QRect _labelBB;
};
#endif // WAYPOINTITEM_H

View File

@ -1,52 +1,20 @@
#include "wgs84.h"
#include "coordinates.h"
#define MIN_LAT deg2rad(-90.0)
#define MAX_LAT deg2rad(90.0)
#define MIN_LON deg2rad(-180.0)
#define MAX_LON deg2rad(180.0)
qreal Coordinates::distanceTo(const Coordinates &c) const
double Coordinates::distanceTo(const Coordinates &c) const
{
qreal dLat = deg2rad(c.lat() - _lat);
qreal dLon = deg2rad(c.lon() - _lon);
qreal a = pow(sin(dLat / 2.0), 2.0)
double dLat = deg2rad(c.lat() - _lat);
double dLon = deg2rad(c.lon() - _lon);
double a = pow(sin(dLat / 2.0), 2.0)
+ cos(deg2rad(_lat)) * cos(deg2rad(c.lat())) * pow(sin(dLon / 2.0), 2.0);
return (WGS84_RADIUS * (2.0 * atan2(sqrt(a), sqrt(1.0 - a))));
}
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Coordinates &c)
{
dbg.nospace() << "Coordinates(" << c.lon() << ", " << c.lat() << ")";
return dbg.space();
}
QPair<Coordinates, Coordinates> Coordinates::boundingRect(qreal distance) const
{
qreal radDist = distance / WGS84_RADIUS;
qreal minLat = deg2rad(_lat) - radDist;
qreal maxLat = deg2rad(_lat) + radDist;
qreal minLon, maxLon;
if (minLat > MIN_LAT && maxLat < MAX_LAT) {
qreal deltaLon = asin(sin(radDist) / cos(_lat));
minLon = deg2rad(_lon) - deltaLon;
if (minLon < MIN_LON)
minLon += 2.0 * M_PI;
maxLon = deg2rad(_lon) + deltaLon;
if (maxLon > MAX_LON)
maxLon -= 2.0 * M_PI;
} else {
// a pole is within the distance
minLat = qMax(minLat, MIN_LAT);
maxLat = qMin(maxLat, MAX_LAT);
minLon = MIN_LON;
maxLon = MAX_LON;
}
return QPair<Coordinates, Coordinates>(Coordinates(rad2deg(qMin(minLon,
maxLon)), rad2deg(qMin(minLat, maxLat))), Coordinates(rad2deg(qMax(minLon,
maxLon)), rad2deg(qMax(minLat, maxLat))));
}
#endif // QT_NO_DEBUG

View File

@ -2,12 +2,8 @@
#define COORDINATES_H
#include <cmath>
#include <QPair>
#include <QDebug>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif // M_PI
#define deg2rad(d) (((d)*M_PI)/180.0)
#define rad2deg(d) (((d)*180.0)/M_PI)
@ -15,15 +11,14 @@ class Coordinates
{
public:
Coordinates() {_lon = NAN; _lat = NAN;}
Coordinates(const Coordinates &c) {_lon = c._lon; _lat = c._lat;}
Coordinates(qreal lon, qreal lat) {_lon = lon; _lat = lat;}
Coordinates(double lon, double lat) {_lon = lon; _lat = lat;}
qreal &rlon() {return _lon;}
qreal &rlat() {return _lat;}
void setLon(qreal lon) {_lon = lon;}
void setLat(qreal lat) {_lat = lat;}
qreal lon() const {return _lon;}
qreal lat() const {return _lat;}
double &rlon() {return _lon;}
double &rlat() {return _lat;}
void setLon(double lon) {_lon = lon;}
void setLat(double lat) {_lat = lat;}
double lon() const {return _lon;}
double lat() const {return _lat;}
bool isNull() const
{return std::isnan(_lon) && std::isnan(_lat);}
@ -31,11 +26,10 @@ public:
{return (_lon >= -180.0 && _lon <= 180.0
&& _lat >= -90.0 && _lat <= 90.0);}
qreal distanceTo(const Coordinates &c) const;
QPair<Coordinates, Coordinates> boundingRect(qreal distance) const;
double distanceTo(const Coordinates &c) const;
private:
qreal _lat, _lon;
double _lat, _lon;
};
inline bool operator==(const Coordinates &c1, const Coordinates &c2)
@ -43,6 +37,8 @@ inline bool operator==(const Coordinates &c1, const Coordinates &c2)
inline bool operator!=(const Coordinates &c1, const Coordinates &c2)
{return !(c1 == c2);}
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Coordinates &c);
#endif // QT_NO_DEBUG
#endif // COORDINATES_H

Some files were not shown because too many files have changed in this diff Show More