1 #ifndef QMAPBOXGL_H 2 #define QMAPBOXGL_H 3 4 #include <QImage> 5 #include <QMapbox> 6 #include <QMargins> 7 #include <QObject> 8 #include <QPointF> 9 #include <QSize> 10 #include <QString> 11 #include <QStringList> 12 13 #include <functional> 14 15 class QMapboxGLPrivate; 16 17 // This header follows the Qt coding style: https://wiki.qt.io/Qt_Coding_Style 18 19 class Q_MAPBOXGL_EXPORT QMapboxGLSettings 20 { 21 public: 22 QMapboxGLSettings(); 23 24 enum GLContextMode { 25 UniqueGLContext = 0, 26 SharedGLContext 27 }; 28 29 enum MapMode { 30 Continuous = 0, 31 Static 32 }; 33 34 enum ConstrainMode { 35 NoConstrain = 0, 36 ConstrainHeightOnly, 37 ConstrainWidthAndHeight 38 }; 39 40 enum ViewportMode { 41 DefaultViewport = 0, 42 FlippedYViewport 43 }; 44 45 GLContextMode contextMode() const; 46 void setContextMode(GLContextMode); 47 48 MapMode mapMode() const; 49 void setMapMode(MapMode); 50 51 ConstrainMode constrainMode() const; 52 void setConstrainMode(ConstrainMode); 53 54 ViewportMode viewportMode() const; 55 void setViewportMode(ViewportMode); 56 57 unsigned cacheDatabaseMaximumSize() const; 58 void setCacheDatabaseMaximumSize(unsigned); 59 60 QString cacheDatabasePath() const; 61 void setCacheDatabasePath(const QString &); 62 63 QString assetPath() const; 64 void setAssetPath(const QString &); 65 66 QString accessToken() const; 67 void setAccessToken(const QString &); 68 69 QString apiBaseUrl() const; 70 void setApiBaseUrl(const QString &); 71 72 std::function<std::string(const std::string &&)> resourceTransform() const; 73 void setResourceTransform(const std::function<std::string(const std::string &&)> &); 74 75 private: 76 GLContextMode m_contextMode; 77 MapMode m_mapMode; 78 ConstrainMode m_constrainMode; 79 ViewportMode m_viewportMode; 80 81 unsigned m_cacheMaximumSize; 82 QString m_cacheDatabasePath; 83 QString m_assetPath; 84 QString m_accessToken; 85 QString m_apiBaseUrl; 86 std::function<std::string(const std::string &&)> m_resourceTransform; 87 }; 88 89 struct Q_MAPBOXGL_EXPORT QMapboxGLCameraOptions { 90 QVariant center; // Coordinate 91 QVariant anchor; // QPointF 92 QVariant zoom; // double 93 QVariant angle; // double 94 QVariant pitch; // double 95 }; 96 97 class Q_MAPBOXGL_EXPORT QMapboxGL : public QObject 98 { 99 Q_OBJECT 100 Q_PROPERTY(double latitude READ latitude WRITE setLatitude) 101 Q_PROPERTY(double longitude READ longitude WRITE setLongitude) 102 Q_PROPERTY(double zoom READ zoom WRITE setZoom) 103 Q_PROPERTY(double bearing READ bearing WRITE setBearing) 104 Q_PROPERTY(double pitch READ pitch WRITE setPitch) 105 Q_PROPERTY(QString styleJson READ styleJson WRITE setStyleJson) 106 Q_PROPERTY(QString styleUrl READ styleUrl WRITE setStyleUrl) 107 Q_PROPERTY(double scale READ scale WRITE setScale) 108 Q_PROPERTY(QMapbox::Coordinate coordinate READ coordinate WRITE setCoordinate) 109 Q_PROPERTY(QMargins margins READ margins WRITE setMargins) 110 111 public: 112 enum MapChange { 113 MapChangeRegionWillChange = 0, 114 MapChangeRegionWillChangeAnimated, 115 MapChangeRegionIsChanging, 116 MapChangeRegionDidChange, 117 MapChangeRegionDidChangeAnimated, 118 MapChangeWillStartLoadingMap, 119 MapChangeDidFinishLoadingMap, 120 MapChangeDidFailLoadingMap, 121 MapChangeWillStartRenderingFrame, 122 MapChangeDidFinishRenderingFrame, 123 MapChangeDidFinishRenderingFrameFullyRendered, 124 MapChangeWillStartRenderingMap, 125 MapChangeDidFinishRenderingMap, 126 MapChangeDidFinishRenderingMapFullyRendered, 127 MapChangeDidFinishLoadingStyle, 128 MapChangeSourceDidChange 129 }; 130 131 enum MapLoadingFailure { 132 StyleParseFailure, 133 StyleLoadFailure, 134 NotFoundFailure, 135 UnknownFailure 136 }; 137 138 // Determines the orientation of the map. 139 enum NorthOrientation { 140 NorthUpwards, // Default 141 NorthRightwards, 142 NorthDownwards, 143 NorthLeftwards, 144 }; 145 146 QMapboxGL(QObject* parent = 0, 147 const QMapboxGLSettings& = QMapboxGLSettings(), 148 const QSize& size = QSize(), 149 qreal pixelRatio = 1); 150 virtual ~QMapboxGL(); 151 152 void cycleDebugOptions(); 153 154 QString styleJson() const; 155 QString styleUrl() const; 156 157 void setStyleJson(const QString &); 158 void setStyleUrl(const QString &); 159 160 double latitude() const; 161 void setLatitude(double latitude); 162 163 double longitude() const; 164 void setLongitude(double longitude); 165 166 double scale() const; 167 void setScale(double scale, const QPointF ¢er = QPointF()); 168 169 double zoom() const; 170 void setZoom(double zoom); 171 172 double minimumZoom() const; 173 double maximumZoom() const; 174 175 double bearing() const; 176 void setBearing(double degrees); 177 void setBearing(double degrees, const QPointF ¢er); 178 179 double pitch() const; 180 void setPitch(double pitch); 181 182 NorthOrientation northOrientation() const; 183 void setNorthOrientation(NorthOrientation); 184 185 QMapbox::Coordinate coordinate() const; 186 void setCoordinate(const QMapbox::Coordinate &); 187 void setCoordinateZoom(const QMapbox::Coordinate &, double zoom); 188 189 void jumpTo(const QMapboxGLCameraOptions&); 190 191 void setGestureInProgress(bool inProgress); 192 193 void setTransitionOptions(qint64 duration, qint64 delay = 0); 194 195 void addAnnotationIcon(const QString &name, const QImage &sprite); 196 197 QMapbox::AnnotationID addAnnotation(const QMapbox::Annotation &); 198 void updateAnnotation(QMapbox::AnnotationID, const QMapbox::Annotation &); 199 void removeAnnotation(QMapbox::AnnotationID); 200 201 void setLayoutProperty(const QString &layer, const QString &property, const QVariant &value); 202 void setPaintProperty(const QString &layer, const QString &property, const QVariant &value); 203 204 bool isFullyLoaded() const; 205 206 void moveBy(const QPointF &offset); 207 void scaleBy(double scale, const QPointF ¢er = QPointF()); 208 void rotateBy(const QPointF &first, const QPointF &second); 209 210 void resize(const QSize &size); 211 212 double metersPerPixelAtLatitude(double latitude, double zoom) const; 213 QMapbox::ProjectedMeters projectedMetersForCoordinate(const QMapbox::Coordinate &) const; 214 QMapbox::Coordinate coordinateForProjectedMeters(const QMapbox::ProjectedMeters &) const; 215 QPointF pixelForCoordinate(const QMapbox::Coordinate &) const; 216 QMapbox::Coordinate coordinateForPixel(const QPointF &) const; 217 218 QMapbox::CoordinateZoom coordinateZoomForBounds(const QMapbox::Coordinate &sw, QMapbox::Coordinate &ne) const; 219 QMapbox::CoordinateZoom coordinateZoomForBounds(const QMapbox::Coordinate &sw, QMapbox::Coordinate &ne, double bearing, double pitch); 220 221 void setMargins(const QMargins &margins); 222 QMargins margins() const; 223 224 void addSource(const QString &sourceID, const QVariantMap& params); 225 bool sourceExists(const QString &sourceID); 226 void updateSource(const QString &sourceID, const QVariantMap& params); 227 void removeSource(const QString &sourceID); 228 229 void addImage(const QString &name, const QImage &sprite); 230 void removeImage(const QString &name); 231 232 void addCustomLayer(const QString &id, 233 QScopedPointer<QMapbox::CustomLayerHostInterface>& host, 234 const QString& before = QString()); 235 void addLayer(const QVariantMap ¶ms, const QString& before = QString()); 236 bool layerExists(const QString &id); 237 void removeLayer(const QString &id); 238 239 QList<QString> layerIds() const; 240 241 void setFilter(const QString &layer, const QVariant &filter); 242 QVariant getFilter(const QString &layer) const; 243 // When rendering on a different thread, 244 // should be called on the render thread. 245 void createRenderer(); 246 void destroyRenderer(); 247 void setFramebufferObject(quint32 fbo, const QSize &size); 248 249 public slots: 250 void render(); 251 void connectionEstablished(); 252 253 // Commit changes, load all the resources 254 // and renders the map when completed. 255 void startStaticRender(); 256 257 signals: 258 void needsRendering(); 259 void mapChanged(QMapboxGL::MapChange); 260 void mapLoadingFailed(QMapboxGL::MapLoadingFailure, const QString &reason); 261 void copyrightsChanged(const QString ©rightsHtml); 262 263 void staticRenderFinished(const QString &error); 264 265 private: 266 Q_DISABLE_COPY(QMapboxGL) 267 268 QMapboxGLPrivate *d_ptr; 269 }; 270 271 Q_DECLARE_METATYPE(QMapboxGL::MapChange); 272 Q_DECLARE_METATYPE(QMapboxGL::MapLoadingFailure); 273 274 #endif // QMAPBOXGL_H 275