mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-25 04:05:53 +01:00
84 lines
1.5 KiB
C++
84 lines
1.5 KiB
C++
#include <QFileInfo>
|
|
#include <QPainter>
|
|
#include <QImageReader>
|
|
#include "common/config.h"
|
|
#include "geotiff.h"
|
|
#include "image.h"
|
|
#include "geotiffmap.h"
|
|
|
|
|
|
GeoTIFFMap::GeoTIFFMap(const QString &fileName, QObject *parent)
|
|
: Map(parent), _fileName(fileName), _img(0), _ratio(1.0), _valid(false)
|
|
{
|
|
QImageReader ir(fileName);
|
|
if (!ir.canRead()) {
|
|
_errorString = "Unsupported/invalid image file";
|
|
return;
|
|
}
|
|
_size = ir.size();
|
|
|
|
GeoTIFF gt(fileName);
|
|
if (!gt.isValid()) {
|
|
_errorString = gt.errorString();
|
|
return;
|
|
} else {
|
|
_projection = gt.projection();
|
|
_transform = gt.transform();
|
|
}
|
|
|
|
_valid = true;
|
|
}
|
|
|
|
GeoTIFFMap::~GeoTIFFMap()
|
|
{
|
|
delete _img;
|
|
}
|
|
|
|
QString GeoTIFFMap::name() const
|
|
{
|
|
QFileInfo fi(_fileName);
|
|
return fi.fileName();
|
|
}
|
|
|
|
QPointF GeoTIFFMap::ll2xy(const Coordinates &c)
|
|
{
|
|
return QPointF(_transform.proj2img(_projection.ll2xy(c))) / _ratio;
|
|
}
|
|
|
|
Coordinates GeoTIFFMap::xy2ll(const QPointF &p)
|
|
{
|
|
return _projection.xy2ll(_transform.img2proj(p * _ratio));
|
|
}
|
|
|
|
QRectF GeoTIFFMap::bounds()
|
|
{
|
|
return QRectF(QPointF(0, 0), _size / _ratio);
|
|
}
|
|
|
|
void GeoTIFFMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
|
{
|
|
if (_img)
|
|
_img->draw(painter, rect, flags);
|
|
}
|
|
|
|
void GeoTIFFMap::setDevicePixelRatio(qreal deviceRatio, qreal mapRatio)
|
|
{
|
|
Q_UNUSED(deviceRatio);
|
|
|
|
_ratio = mapRatio;
|
|
if (_img)
|
|
_img->setDevicePixelRatio(_ratio);
|
|
}
|
|
|
|
void GeoTIFFMap::load()
|
|
{
|
|
if (!_img)
|
|
_img = new Image(_fileName);
|
|
}
|
|
|
|
void GeoTIFFMap::unload()
|
|
{
|
|
delete _img;
|
|
_img = 0;
|
|
}
|