summaryrefslogtreecommitdiff
path: root/src/mbgl/tile
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-05-11 13:54:05 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-05-11 13:54:05 -0700
commit1a030e7c3347f08329d2787cde37cfa0958baad4 (patch)
treee9ec309eda3de6edc411824e76df632730d41064 /src/mbgl/tile
parent5f1144f05a8391cf2c01dc7a67312a27ef32805b (diff)
downloadqtlocation-mapboxgl-1a030e7c3347f08329d2787cde37cfa0958baad4.tar.gz
[core] Normalize tile coordinates in VectorTile (#4966)
Previously, vector tile coordinates were being normalized to util::EXTENT in each place they were used, and for annotation and GeoJSON sources that don't require normalization.
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r--src/mbgl/tile/geometry_tile.hpp3
-rw-r--r--src/mbgl/tile/vector_tile.cpp7
-rw-r--r--src/mbgl/tile/vector_tile.hpp1
3 files changed, 2 insertions, 9 deletions
diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp
index 923585028c..676c18e4c9 100644
--- a/src/mbgl/tile/geometry_tile.hpp
+++ b/src/mbgl/tile/geometry_tile.hpp
@@ -34,15 +34,12 @@ using GeometryCollection = std::vector<GeometryCoordinates>;
class GeometryTileFeature : private util::noncopyable {
public:
- static const uint32_t defaultExtent = util::EXTENT;
-
virtual ~GeometryTileFeature() = default;
virtual FeatureType getType() const = 0;
virtual optional<Value> getValue(const std::string& key) const = 0;
virtual Feature::property_map getProperties() const { return Feature::property_map(); }
virtual optional<uint64_t> getID() const { return {}; }
virtual GeometryCollection getGeometries() const = 0;
- virtual uint32_t getExtent() const { return defaultExtent; }
};
class GeometryTileLayer : private util::noncopyable {
diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp
index 27edd85324..343224052a 100644
--- a/src/mbgl/tile/vector_tile.cpp
+++ b/src/mbgl/tile/vector_tile.cpp
@@ -114,6 +114,7 @@ GeometryCollection VectorTileFeature::getGeometries() const {
uint32_t length = 0;
int32_t x = 0;
int32_t y = 0;
+ const float scale = float(util::EXTENT) / layer.extent;
GeometryCollection lines;
@@ -139,7 +140,7 @@ GeometryCollection VectorTileFeature::getGeometries() const {
line = &lines.back();
}
- line->emplace_back(x, y);
+ line->emplace_back(::round(x * scale), ::round(y * scale));
} else if (cmd == 7) { // closePolygon
if (!line->empty()) {
@@ -154,10 +155,6 @@ GeometryCollection VectorTileFeature::getGeometries() const {
return lines;
}
-uint32_t VectorTileFeature::getExtent() const {
- return layer.extent;
-}
-
VectorTile::VectorTile(std::shared_ptr<const std::string> data_)
: data(std::move(data_)) {
}
diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp
index c0892cd243..d41d4f4f34 100644
--- a/src/mbgl/tile/vector_tile.hpp
+++ b/src/mbgl/tile/vector_tile.hpp
@@ -25,7 +25,6 @@ public:
std::unordered_map<std::string,Value> getProperties() const override;
optional<uint64_t> getID() const override;
GeometryCollection getGeometries() const override;
- uint32_t getExtent() const override;
private:
const VectorTileLayer& layer;