RasterProcessTool/LAMPMainWidget/include/mapcanvas.h

190 lines
4.1 KiB
C
Raw Normal View History

2025-02-07 09:16:22 +00:00
#pragma once
#include <QWheelEvent>
#include <QPaintEvent>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QTimer>
#include <QEvent>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QDragEnterEvent>
#include <QRectF>
#include <QMarginsF>
#include <QHash>
#include <include/crs.h>
#include <include/pointxy.h>
#include <include/mapcanvasmap.h>
#include <include/maptool.h>
namespace LAMPMainWidget {
class MapLayer;
class MapTool;
/**
* QGraphicsView
* Qt GraphicsView Framework
*/
class MapCanvas : public QGraphicsView {
Q_OBJECT
signals:
void zoomChanged(int zoom);
void crsChanged();
void clicked(PointXY pos);
void mapCenterChanged(PointXY pos);
friend class MapToolPan;
friend class MapToolZoomIn;
friend class MapToolZoomOut;
friend class MapToolSelect;
public:
explicit MapCanvas(QWidget *parent = nullptr);
~MapCanvas() override;
public:
/**
*
*/
void refreshMap();
/**
* 使
* @param layer
*/
void addLayer(MapLayer *layer);
/**
*
* @return
*/
double scale() const;
/**
*
* @return
*/
double resolution() const;
/**
* zoom
* @return zoom
*/
int zoomValue() const;
/**
* zoom
* @param zoom zoom
*/
void setZoomValue(int zoom);
/**
*
* @return
*/
const QRectF &viewExtent() const { return mViewExtent; }
/**
*
*
* @param crs
*/
void setCrs(const CRS *crs);
/**
*
* @return
*/
const CRS &crs() const { return *mCrs; }
/**
*
* @param id id
*/
void setCurrentLayer(const QString &id);
/**
*
* @return
*/
const MapLayer *currentLayer() { return mCurrentLayer; }
/**
*
* @return
*/
const PointXY &mapCenter() const { return mMapCenter; }
/**
*
* @param tool
* @return
*/
bool selectTool(const QString &tool);
void timerEvent(QTimerEvent *event);
protected:
/**
*
* resize
*/
void updateViewExtent(bool reset = false);
/**
*
* @param point
* @return
*/
PointXY pixel2Lonlat(const QPointF &point) const;
/**
*
*/
void setupTools();
private:
/**
* zoom
* @param zoom zoom
* @return 使zoom
*/
int normalizeZoom(int zoom) const;
protected:
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void wheelEvent(QWheelEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
protected:
QGraphicsScene *mScene;
QRectF mMapExtent;
QRectF mViewExtent;
QRectF mDragRect;
bool mIsDragging;
QMap<QString, MapLayer *> mLayers;
MapLayer *mCurrentLayer;
const CRS *mCrs;
PointXY mMapCenter;
int mZoomValue;
PointXY mLastXY;
QTimer *mMapUpdateTimer;
MapTool *mCurrentTool;
QHash<QString, MapTool *> mMapTools;
private:
const static int kDefaultZoomValue{8};
static const int kMaxZoomValue{20};
static const int kMinZoomValue{1};
protected:
static PointXY defaultMapCenter();
};
}