34 enum ProjectionGroup {
36 ProjectionCylindrical,
37 ProjectionPseudocylindrical,
39 ProjectionPseudoazimuthal,
54 ProjectionGeneralPerspective,
59 virtual ~QGeoProjection();
61 virtual void setVisibleArea(
const QRectF &visibleArea) = 0;
62 virtual void setViewportSize(
const QSize &size) = 0;
63 virtual void setCameraData(
const QGeoCameraData &cameraData,
bool force =
true) = 0;
64 virtual QGeoCameraData cameraData()
const = 0;
67 virtual double minimumZoom()
const = 0;
68 virtual double maximumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const = 0;
69 virtual double minimumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const = 0;
71 virtual QGeoCoordinate itemPositionToCoordinate(
const QDoubleVector2D &pos,
bool clipToViewport =
true)
const = 0;
72 virtual QDoubleVector2D coordinateToItemPosition(
const QGeoCoordinate &coordinate,
bool clipToViewport =
true)
const = 0;
74 virtual ProjectionGroup projectionGroup()
const = 0;
75 virtual Datum datum()
const = 0;
76 virtual ProjectionType projectionType()
const = 0;
79 virtual QGeoCoordinate anchorCoordinateToPoint(
const QGeoCoordinate &coordinate,
const QPointF &anchorPoint)
const;
81 virtual QGeoShape visibleRegion()
const;
82 virtual bool setBearing(qreal bearing,
const QGeoCoordinate &coordinate);
83 virtual QMatrix4x4 projectionTransformation()
const = 0;
84 virtual QMatrix4x4 projectionTransformation_centered()
const = 0;
86 virtual const QMatrix4x4 &qsgTransform()
const = 0;
87 virtual QDoubleVector3D centerMercator()
const = 0;
89 void setItemToWindowTransform(
const QTransform &itemToWindowTransform);
90 virtual QTransform itemToWindowTransform()
const;
92 QTransform m_itemToWindowTransform;
93 mutable bool m_qsgTransformDirty =
true;
99 QGeoProjectionWebMercator();
100 ~QGeoProjectionWebMercator();
103 double minimumZoom()
const override;
104 QMatrix4x4 projectionTransformation()
const override;
105 QMatrix4x4 projectionTransformation_centered()
const override;
106 const QMatrix4x4 &qsgTransform()
const override;
107 QDoubleVector3D centerMercator()
const override;
109 double maximumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const override;
110 double minimumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const override;
112 void setVisibleArea(
const QRectF &visibleArea) override;
113 void setViewportSize(
const QSize &size) override;
114 void setCameraData(
const QGeoCameraData &cameraData,
bool force =
true) override;
115 QGeoCameraData cameraData()
const override;
117 QGeoCoordinate itemPositionToCoordinate(
const QDoubleVector2D &pos,
bool clipToViewport =
true)
const override;
118 QDoubleVector2D coordinateToItemPosition(
const QGeoCoordinate &coordinate,
bool clipToViewport =
true)
const override;
120 QGeoProjection::ProjectionGroup projectionGroup()
const override;
121 QGeoProjection::Datum datum()
const override;
122 QGeoProjection::ProjectionType projectionType()
const override;
124 QGeoCoordinate anchorCoordinateToPoint(
const QGeoCoordinate &coordinate,
const QPointF &anchorPoint)
const override;
125 bool setBearing(qreal bearing,
const QGeoCoordinate &coordinate) override;
127 QGeoShape visibleRegion()
const override;
130 double mapWidth()
const;
131 double mapHeight()
const;
133 QDoubleVector2D geoToMapProjection(
const QGeoCoordinate &coordinate)
const;
134 QGeoCoordinate mapProjectionToGeo(
const QDoubleVector2D &projection)
const;
136 int projectionWrapFactor(
const QDoubleVector2D &projection)
const;
137 QDoubleVector2D wrapMapProjection(
const QDoubleVector2D &projection)
const;
138 QDoubleVector2D unwrapMapProjection(
const QDoubleVector2D &wrappedProjection)
const;
140 QDoubleVector2D wrappedMapProjectionToItemPosition(
const QDoubleVector2D &wrappedProjection)
const;
141 QDoubleVector2D itemPositionToWrappedMapProjection(
const QDoubleVector2D &itemPosition)
const;
143 QDoubleVector2D geoToWrappedMapProjection(
const QGeoCoordinate &coordinate)
const;
144 QGeoCoordinate wrappedMapProjectionToGeo(
const QDoubleVector2D &wrappedProjection)
const;
145 QMatrix4x4 quickItemTransformation(
const QGeoCoordinate &coordinate,
const QPointF &anchorPoint, qreal zoomLevel)
const;
147 bool isProjectable(
const QDoubleVector2D &wrappedProjection)
const;
148 QList<QDoubleVector2D> visibleGeometry()
const;
149 QList<QDoubleVector2D> visibleGeometryExpanded()
const;
150 QList<QDoubleVector2D> projectableGeometry()
const;
152 inline QDoubleVector2D viewportToWrappedMapProjection(
const QDoubleVector2D &itemPosition)
const;
153 inline QDoubleVector2D viewportToWrappedMapProjection(
const QDoubleVector2D &itemPosition,
double &s)
const;
155 QPair<QGeoCoordinate, qreal> fitViewportToGeoRectangle(
const QGeoRectangle &rectangle,
156 const QMargins &margins)
const;
160 void updateVisibleRegion();
166 Line2D(
const QDoubleVector2D &linePoint,
const QDoubleVector2D &lineDirection);
168 bool isValid()
const;
170 QDoubleVector2D m_point;
171 QDoubleVector2D m_direction;
177 Plane(
const QDoubleVector3D &planePoint,
const QDoubleVector3D &planeNormal);
179 QDoubleVector3D lineIntersection(
const QDoubleVector3D &linePoint,
const QDoubleVector3D &lineDirection)
const;
180 inline QDoubleVector3D lineIntersection(
const QDoubleVector3D &linePoint,
const QDoubleVector3D &lineDirection,
double &s)
const;
181 Line2D planeXYIntersection()
const;
182 bool isValid()
const;
184 QDoubleVector3D m_point;
185 QDoubleVector3D m_normal;
188#ifdef QT_LOCATION_DEBUG
193 QGeoCameraData m_cameraData;
194 double m_mapEdgeSize;
195 double m_minimumZoom;
197 double m_cameraCenterXMercator;
198 double m_cameraCenterYMercator;
201 double m_viewportWidth;
202 double m_viewportHeight;
203 double m_1_viewportWidth;
204 double m_1_viewportHeight;
206 QDoubleMatrix4x4 m_cameraMatrix;
207 QDoubleMatrix4x4 m_cameraMatrix0;
208 QDoubleMatrix4x4 m_transformation;
209 QDoubleMatrix4x4 m_transformation0;
210 QDoubleMatrix4x4 m_quickItemTransformation;
211 QDoubleVector3D m_eye;
212 QDoubleVector3D m_up;
213 QDoubleVector3D m_center;
214 QDoubleVector3D m_view;
215 QDoubleVector3D m_viewNormalized;
216 QDoubleVector3D m_side;
217 QDoubleVector3D m_centerNearPlane;
218 double m_sideLengthPixels;
224 double m_minimumUnprojectableY;
225 double m_verticalEstateToSkip;
228 QDoubleVector3D m_centerMercator;
229 QDoubleVector3D m_eyeMercator;
230 QDoubleVector3D m_eyeMercator0;
231 QDoubleVector3D m_viewMercator;
232 QDoubleVector3D m_upMercator;
233 QDoubleVector3D m_sideMercator;
234 QDoubleVector3D m_centerNearPlaneMercator;
235 double m_nearPlaneMercator;
236 Line2D m_nearPlaneMapIntersection;
238 QList<QDoubleVector2D> m_visibleRegion;
239 QList<QDoubleVector2D> m_visibleRegionExpanded;
240 QList<QDoubleVector2D> m_projectableRegion;
241 bool m_visibleRegionDirty;
243 mutable QMatrix4x4 m_qsgTransform;
244 QRectF m_visibleArea;
246 Q_DISABLE_COPY(QGeoProjectionWebMercator)