summaryrefslogtreecommitdiff
path: root/src/mbgl/util/tile_coordinate.hpp
blob: 4710e08d0aef98e161fe28c8839a0338f2f7fe54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef MBGL_UTIL_TILE_COORDINATE
#define MBGL_UTIL_TILE_COORDINATE

#include <mbgl/util/vec.hpp>

namespace mbgl {

struct TileCoordinate {
    double column;
    double row;
    double zoom;

    TileCoordinate(double column_, double row_, double zoom_) :
        column(column_), row(row_), zoom(zoom_) {}

    TileCoordinate zoomTo(double targetZoom) {
        double scale = std::pow(2, targetZoom - zoom);
        return { column * scale, row * scale, targetZoom };
    }

    TileCoordinate operator-(TileCoordinate c) {
        c = c.zoomTo(zoom);
        return { column - c.column, row - c.row, zoom };
    };
};

} // namespace mbgl

#endif