33 enum ProjectionGroup {
35 ProjectionCylindrical,
36 ProjectionPseudocylindrical,
38 ProjectionPseudoazimuthal,
53 ProjectionGeneralPerspective,
58 virtual ~QGeoProjection();
60 virtual void setVisibleArea(
const QRectF &visibleArea) = 0;
61 virtual void setViewportSize(
const QSize &size) = 0;
62 virtual void setCameraData(
const QGeoCameraData &cameraData,
bool force =
true) = 0;
63 virtual QGeoCameraData cameraData()
const = 0;
66 virtual double minimumZoom()
const = 0;
67 virtual double maximumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const = 0;
68 virtual double minimumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const = 0;
70 virtual QGeoCoordinate itemPositionToCoordinate(
const QDoubleVector2D &pos,
bool clipToViewport =
true)
const = 0;
71 virtual QDoubleVector2D coordinateToItemPosition(
const QGeoCoordinate &coordinate,
bool clipToViewport =
true)
const = 0;
73 virtual ProjectionGroup projectionGroup()
const = 0;
74 virtual Datum datum()
const = 0;
75 virtual ProjectionType projectionType()
const = 0;
78 virtual QGeoCoordinate anchorCoordinateToPoint(
const QGeoCoordinate &coordinate,
const QPointF &anchorPoint)
const;
80 virtual QGeoShape visibleRegion()
const;
81 virtual bool setBearing(qreal bearing,
const QGeoCoordinate &coordinate);
82 virtual QMatrix4x4 projectionTransformation()
const = 0;
83 virtual QMatrix4x4 projectionTransformation_centered()
const = 0;
85 virtual const QMatrix4x4 &qsgTransform()
const = 0;
86 virtual QDoubleVector3D centerMercator()
const = 0;
88 void setItemToWindowTransform(
const QTransform &itemToWindowTransform);
89 virtual QTransform itemToWindowTransform()
const;
91 QTransform m_itemToWindowTransform;
92 mutable bool m_qsgTransformDirty =
true;
98 QGeoProjectionWebMercator();
99 ~QGeoProjectionWebMercator();
102 double minimumZoom()
const override;
103 QMatrix4x4 projectionTransformation()
const override;
104 QMatrix4x4 projectionTransformation_centered()
const override;
105 const QMatrix4x4 &qsgTransform()
const override;
106 QDoubleVector3D centerMercator()
const override;
108 double maximumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const override;
109 double minimumCenterLatitudeAtZoom(
const QGeoCameraData &cameraData)
const override;
111 void setVisibleArea(
const QRectF &visibleArea) override;
112 void setViewportSize(
const QSize &size) override;
113 void setCameraData(
const QGeoCameraData &cameraData,
bool force =
true) override;
114 QGeoCameraData cameraData()
const override;
116 QGeoCoordinate itemPositionToCoordinate(
const QDoubleVector2D &pos,
bool clipToViewport =
true)
const override;
117 QDoubleVector2D coordinateToItemPosition(
const QGeoCoordinate &coordinate,
bool clipToViewport =
true)
const override;
119 QGeoProjection::ProjectionGroup projectionGroup()
const override;
120 QGeoProjection::Datum datum()
const override;
121 QGeoProjection::ProjectionType projectionType()
const override;
123 QGeoCoordinate anchorCoordinateToPoint(
const QGeoCoordinate &coordinate,
const QPointF &anchorPoint)
const override;
124 bool setBearing(qreal bearing,
const QGeoCoordinate &coordinate) override;
126 QGeoShape visibleRegion()
const override;
129 double mapWidth()
const;
130 double mapHeight()
const;
132 QDoubleVector2D geoToMapProjection(
const QGeoCoordinate &coordinate)
const;
133 QGeoCoordinate mapProjectionToGeo(
const QDoubleVector2D &projection)
const;
135 int projectionWrapFactor(
const QDoubleVector2D &projection)
const;
136 QDoubleVector2D wrapMapProjection(
const QDoubleVector2D &projection)
const;
137 QDoubleVector2D unwrapMapProjection(
const QDoubleVector2D &wrappedProjection)
const;
139 QDoubleVector2D wrappedMapProjectionToItemPosition(
const QDoubleVector2D &wrappedProjection)
const;
140 QDoubleVector2D itemPositionToWrappedMapProjection(
const QDoubleVector2D &itemPosition)
const;
142 QDoubleVector2D geoToWrappedMapProjection(
const QGeoCoordinate &coordinate)
const;
143 QGeoCoordinate wrappedMapProjectionToGeo(
const QDoubleVector2D &wrappedProjection)
const;
144 QMatrix4x4 quickItemTransformation(
const QGeoCoordinate &coordinate,
const QPointF &anchorPoint, qreal zoomLevel)
const;
146 bool isProjectable(
const QDoubleVector2D &wrappedProjection)
const;
147 QList<QDoubleVector2D> visibleGeometry()
const;
148 QList<QDoubleVector2D> visibleGeometryExpanded()
const;
149 QList<QDoubleVector2D> projectableGeometry()
const;
151 inline QDoubleVector2D viewportToWrappedMapProjection(
const QDoubleVector2D &itemPosition)
const;
152 inline QDoubleVector2D viewportToWrappedMapProjection(
const QDoubleVector2D &itemPosition,
double &s)
const;
154 QPair<QGeoCoordinate, qreal> fitViewportToGeoRectangle(
const QGeoRectangle &rectangle,
155 const QMargins &margins)
const;
159 void updateVisibleRegion();
165 Line2D(
const QDoubleVector2D &linePoint,
const QDoubleVector2D &lineDirection);
167 bool isValid()
const;
169 QDoubleVector2D m_point;
170 QDoubleVector2D m_direction;
176 Plane(
const QDoubleVector3D &planePoint,
const QDoubleVector3D &planeNormal);
178 QDoubleVector3D lineIntersection(
const QDoubleVector3D &linePoint,
const QDoubleVector3D &lineDirection)
const;
179 inline QDoubleVector3D lineIntersection(
const QDoubleVector3D &linePoint,
const QDoubleVector3D &lineDirection,
double &s)
const;
180 Line2D planeXYIntersection()
const;
181 bool isValid()
const;
183 QDoubleVector3D m_point;
184 QDoubleVector3D m_normal;
187#ifdef QT_LOCATION_DEBUG
192 QGeoCameraData m_cameraData;
193 double m_mapEdgeSize;
194 double m_minimumZoom;
196 double m_cameraCenterXMercator;
197 double m_cameraCenterYMercator;
200 double m_viewportWidth;
201 double m_viewportHeight;
202 double m_1_viewportWidth;
203 double m_1_viewportHeight;
205 QDoubleMatrix4x4 m_cameraMatrix;
206 QDoubleMatrix4x4 m_cameraMatrix0;
207 QDoubleMatrix4x4 m_transformation;
208 QDoubleMatrix4x4 m_transformation0;
209 QDoubleMatrix4x4 m_quickItemTransformation;
210 QDoubleVector3D m_eye;
211 QDoubleVector3D m_up;
212 QDoubleVector3D m_center;
213 QDoubleVector3D m_view;
214 QDoubleVector3D m_viewNormalized;
215 QDoubleVector3D m_side;
216 QDoubleVector3D m_centerNearPlane;
217 double m_sideLengthPixels;
223 double m_minimumUnprojectableY;
224 double m_verticalEstateToSkip;
227 QDoubleVector3D m_centerMercator;
228 QDoubleVector3D m_eyeMercator;
229 QDoubleVector3D m_eyeMercator0;
230 QDoubleVector3D m_viewMercator;
231 QDoubleVector3D m_upMercator;
232 QDoubleVector3D m_sideMercator;
233 QDoubleVector3D m_centerNearPlaneMercator;
234 double m_nearPlaneMercator;
235 Line2D m_nearPlaneMapIntersection;
237 QList<QDoubleVector2D> m_visibleRegion;
238 QList<QDoubleVector2D> m_visibleRegionExpanded;
239 QList<QDoubleVector2D> m_projectableRegion;
240 bool m_visibleRegionDirty;
242 mutable QMatrix4x4 m_qsgTransform;
243 QRectF m_visibleArea;
245 Q_DISABLE_COPY(QGeoProjectionWebMercator)