1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-04-20 12:19:11 +02:00

Compare commits

..

No commits in common. "8ae8c3b0a3097684c983efda326ebcabe518872a" and "59523f46ef462abe0e28a964f1c76b6154202758" have entirely different histories.

14 changed files with 33 additions and 138 deletions

View File

@ -9,9 +9,9 @@ GPS log file formats.
* User-definable online maps (OpenStreetMap/Google tiles, WMTS, WMS, TMS,
QuadTiles).
* Offline maps (MBTiles, OziExplorer maps, TrekBuddy maps/atlases,
Garmin IMG/GMAP & JNX maps, TwoNav RMaps, GeoTIFF images, BSB charts,
ENC charts KMZ maps, AlpineQuest maps, Locus/OsmAnd/RMaps SQLite maps,
Mapsforge vector maps, QCT maps, GEMF maps, Osmdroid SQLite maps, Orux maps,
Garmin IMG/GMAP & JNX maps, TwoNav RMaps, GeoTIFF images, BSB charts, KMZ maps,
AlpineQuest maps, Locus/OsmAnd/RMaps SQLite maps, Mapsforge vector maps,
QCT maps, GEMF maps, Osmdroid SQLite maps, Orux maps,
ESRI World-File georeferenced images).
* Elevation, speed, heart rate, cadence, power, temperature and gear ratio/shifts
graphs.
@ -29,7 +29,7 @@ GPS log file formats.
## Build
Build requirements:
* Qt5 >= 5.11 or Qt6 >= 6.2 (Android builds require Qt6)
* C++11 or newer compiler (tested: msvc2019, gcc 7.5.0, clang/Apple LLVM version
* C++11 or newer compiler (tested: msvc2017, gcc 7.5.0, clang/Apple LLVM version
10.0.0)
Build steps:

View File

@ -1247,7 +1247,7 @@
<message>
<location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source>
<translation>ENC námořní mapy</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -1246,7 +1246,7 @@
<message>
<location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source>
<translation>ENC-Seekarten</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -1240,7 +1240,7 @@
<message>
<location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source>
<translation>Elektronikus navigációs térképek</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -1246,7 +1246,7 @@
<message>
<location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source>
<translation>Elektroniska sjökort</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -1245,7 +1245,7 @@
<message>
<location filename="../src/map/maplist.cpp" line="158"/>
<source>Electronic Navigational Charts</source>
<translation>Elektronik Seyir Haritaları</translation>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/map/maplist.cpp" line="165"/>

View File

@ -181,14 +181,13 @@ Section "GPXSee" SEC_APP
!insertmacro FILE_ASSOCIATION_ADD "qct" "QuickChart Map File" 24
!insertmacro FILE_ASSOCIATION_ADD "trk" "TwoNav Track File" 25
!insertmacro FILE_ASSOCIATION_ADD "gemf" "GEMF Map File" 26
!insertmacro FILE_ASSOCIATION_ADD "000" "IHO S-57 Electronic Navigation Chart" 27
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 28
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 28
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 29
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 30
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 31
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 32
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 33
!insertmacro FILE_ASSOCIATION_ADD "kml" "Keyhole Markup Language" 27
!insertmacro FILE_ASSOCIATION_ADD "kmz" "KML geographic compressed data" 27
!insertmacro FILE_ASSOCIATION_ADD "fit" "Flexible and Interoperable Data Transfer" 28
!insertmacro FILE_ASSOCIATION_ADD "igc" "Flight Recorder Data Format" 29
!insertmacro FILE_ASSOCIATION_ADD "nmea" "NMEA 0183 Data" 30
!insertmacro FILE_ASSOCIATION_ADD "plt" "OziExplorer Track File" 31
!insertmacro FILE_ASSOCIATION_ADD "rte" "OziExplorer Route File" 32
WriteRegStr HKCR "Applications\GPXSee.exe\shell\open\command" "" "$\"$INSTDIR\GPXSee.exe$\" $\"%1$\""
WriteRegStr HKCR ".gpx\OpenWithList" "GPXSee.exe" ""
@ -238,7 +237,6 @@ Section "GPXSee" SEC_APP
WriteRegStr HKCR ".qct\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".trk\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".gemf\OpenWithList" "GPXSee.exe" ""
WriteRegStr HKCR ".000\OpenWithList" "GPXSee.exe" ""
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
@ -394,7 +392,6 @@ Section "Uninstall"
!insertmacro FILE_ASSOCIATION_REMOVE "qct"
!insertmacro FILE_ASSOCIATION_REMOVE "trk"
!insertmacro FILE_ASSOCIATION_REMOVE "gemf"
!insertmacro FILE_ASSOCIATION_REMOVE "000"
DeleteRegValue HKCR ".gpx\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".tcx\OpenWithList" "GPXSee.exe"
@ -443,7 +440,6 @@ Section "Uninstall"
DeleteRegValue HKCR ".qct\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".trk\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".gemf\OpenWithList" "GPXSee.exe"
DeleteRegValue HKCR ".000\OpenWithList" "GPXSee.exe"
DeleteRegKey HKCR "Applications\GPXSee.exe"
System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'

View File

@ -319,5 +319,10 @@ bool ISO8211::readRecord(QFile &file, Record &record)
}
}
if (file.pos() != pos + len) {
_errorString = "Record format error";
return false;
}
return true;
}

View File

@ -463,9 +463,6 @@ MapData::Poly *MapData::polyObject(const ISO8211::Record &r,
bool MapData::processRecord(const ISO8211::Record &record,
QVector<ISO8211::Record> &rv, uint &COMF, QString &name)
{
if (record.size() < 2)
return false;
const ISO8211::Field &f = record.at(1);
const QByteArray &ba = f.tag();
@ -488,9 +485,6 @@ bool MapData::processRecord(const ISO8211::Record &record,
QVector<ISO8211::Record> &fe, RecordMap &vi, RecordMap &vc, RecordMap &ve,
RecordMap &vf, uint &COMF, uint &SOMF)
{
if (record.size() < 2)
return false;
const ISO8211::Field &f = record.at(1);
const QByteArray &ba = f.tag();

View File

@ -2,6 +2,7 @@
#define ENC_MAPDATA_H
#include <climits>
#include <QPainterPath>
#include "common/rectc.h"
#include "common/rtree.h"
#include "common/polygon.h"

View File

@ -200,6 +200,4 @@ void RasterTile::render()
//painter.setPen(Qt::red);
//painter.setBrush(Qt::NoBrush);
//painter.drawRect(QRect(_rect.topLeft(), _pixmap.size()));
_valid = true;
}

View File

@ -18,12 +18,11 @@ public:
const QList<MapData::Poly*> &polygons, const QList<MapData::Point*> &points)
: _proj(proj), _transform(transform), _zoom(zoom), _rect(rect),
_ratio(ratio), _pixmap(rect.width() * ratio, rect.height() * ratio),
_lines(lines), _polygons(polygons), _points(points), _valid(false) {}
_lines(lines), _polygons(polygons), _points(points) {}
int zoom() const {return _zoom;}
QPoint xy() const {return _rect.topLeft();}
const QPixmap &pixmap() const {return _pixmap;}
bool isValid() const {return _valid;}
void render();
@ -49,7 +48,6 @@ private:
QList<MapData::Line*> _lines;
QList<MapData::Poly*> _polygons;
QList<MapData::Point*> _points;
bool _valid;
};
}

View File

@ -1,7 +1,9 @@
#include <QPainter>
#include <QPixmapCache>
#include <QtConcurrent>
#include "common/range.h"
#include "common/wgs84.h"
#include "ENC/rastertile.h"
#include "rectd.h"
#include "pcs.h"
#include "encmap.h"
@ -56,8 +58,6 @@ int ENCMap::zoomFit(const QSize &size, const RectC &rect)
int ENCMap::zoomIn()
{
cancelJobs();
_zoom = qMin(_zoom + 1, ZOOMS.max());
updateTransform();
return _zoom;
@ -65,8 +65,6 @@ int ENCMap::zoomIn()
int ENCMap::zoomOut()
{
cancelJobs();
_zoom = qMax(_zoom - 1, ZOOMS.min());
updateTransform();
return _zoom;
@ -98,55 +96,6 @@ void ENCMap::updateTransform()
_transform.proj2img(prect.bottomRight()));
}
bool ENCMap::isRunning(int zoom, const QPoint &xy) const
{
for (int i = 0; i < _jobs.size(); i++) {
const QList<ENC::RasterTile> &tiles = _jobs.at(i)->tiles();
for (int j = 0; j < tiles.size(); j++) {
const ENC::RasterTile &mt = tiles.at(j);
if (mt.zoom() == zoom && mt.xy() == xy)
return true;
}
}
return false;
}
void ENCMap::runJob(ENCMapJob *job)
{
_jobs.append(job);
connect(job, &ENCMapJob::finished, this, &ENCMap::jobFinished);
job->run();
}
void ENCMap::removeJob(ENCMapJob *job)
{
_jobs.removeOne(job);
job->deleteLater();
}
void ENCMap::jobFinished(ENCMapJob *job)
{
const QList<ENC::RasterTile> &tiles = job->tiles();
for (int i = 0; i < tiles.size(); i++) {
const ENC::RasterTile &mt = tiles.at(i);
if (mt.isValid())
QPixmapCache::insert(key(mt.zoom(), mt.xy()), mt.pixmap());
}
removeJob(job);
emit tilesLoaded();
}
void ENCMap::cancelJobs()
{
for (int i = 0; i < _jobs.size(); i++)
_jobs.at(i)->cancel();
}
QString ENCMap::key(int zoom, const QPoint &xy) const
{
return path() + "-" + QString::number(zoom) + "_"
@ -167,8 +116,6 @@ void ENCMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
QPoint ttl(tl.x() + i * TILE_SIZE, tl.y() + j * TILE_SIZE);
if (isRunning(_zoom, ttl))
continue;
QPixmap pm;
if (QPixmapCache::find(key(_zoom, ttl), &pm))
@ -202,19 +149,14 @@ void ENCMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
}
}
if (!tiles.isEmpty()) {
if (flags & Map::Block) {
QFuture<void> future = QtConcurrent::map(tiles, &RasterTile::render);
future.waitForFinished();
QFuture<void> future = QtConcurrent::map(tiles, &RasterTile::render);
future.waitForFinished();
for (int i = 0; i < tiles.size(); i++) {
const RasterTile &mt = tiles.at(i);
const QPixmap &pm = mt.pixmap();
painter->drawPixmap(mt.xy(), pm);
QPixmapCache::insert(key(mt.zoom(), mt.xy()), pm);
}
} else
runJob(new ENCMapJob(tiles));
for (int i = 0; i < tiles.size(); i++) {
const RasterTile &mt = tiles.at(i);
const QPixmap &pm = mt.pixmap();
painter->drawPixmap(mt.xy(), pm);
QPixmapCache::insert(key(mt.zoom(), mt.xy()), pm);
}
}

View File

@ -1,42 +1,12 @@
#ifndef ENCMAP_H
#define ENCMAP_H
#include <QtConcurrent>
#include "map.h"
#include "projection.h"
#include "transform.h"
#include "ENC/mapdata.h"
#include "ENC/rastertile.h"
class ENCMapJob : public QObject
{
Q_OBJECT
public:
ENCMapJob(const QList<ENC::RasterTile> &tiles)
: _tiles(tiles) {}
void run()
{
connect(&_watcher, &QFutureWatcher<void>::finished, this,
&ENCMapJob::handleFinished);
_future = QtConcurrent::map(_tiles, &ENC::RasterTile::render);
_watcher.setFuture(_future);
}
void cancel() {_future.cancel();}
const QList<ENC::RasterTile> &tiles() const {return _tiles;}
signals:
void finished(ENCMapJob *job);
private slots:
void handleFinished() {emit finished(this);}
private:
QFutureWatcher<void> _watcher;
QFuture<void> _future;
QList<ENC::RasterTile> _tiles;
};
class QFile;
class ENCMap : public Map
{
@ -73,16 +43,9 @@ public:
static Map *create(const QString &path, const Projection &, bool *isMap);
private slots:
void jobFinished(ENCMapJob *job);
private:
Transform transform(int zoom) const;
void updateTransform();
bool isRunning(int zoom, const QPoint &xy) const;
void runJob(ENCMapJob *job);
void removeJob(ENCMapJob *job);
void cancelJobs();
QString key(int zoom, const QPoint &xy) const;
ENC::MapData _data;
@ -93,8 +56,6 @@ private:
QRectF _bounds;
int _zoom;
QList<ENCMapJob*> _jobs;
bool _valid;
QString _errorString;
};