diff --git a/src/mbgl/annotation/point_annotation_impl.cpp b/src/mbgl/annotation/point_annotation_impl.cpp index 2be8a2943..a1367f390 100644 --- a/src/mbgl/annotation/point_annotation_impl.cpp +++ b/src/mbgl/annotation/point_annotation_impl.cpp @@ -25,7 +25,7 @@ void PointAnnotationImpl::updateLayer(const CanonicalTileID& tileID, AnnotationT projected *= std::pow(2, tileID.z); projected.x = std::fmod(projected.x, 1); projected.y = std::fmod(projected.y, 1); - projected *= double(GeometryTileFeature::defaultExtent); + projected *= double(util::EXTENT); layer.features.emplace_back( std::make_shared(FeatureType::Point, diff --git a/src/mbgl/annotation/shape_annotation_impl.cpp b/src/mbgl/annotation/shape_annotation_impl.cpp index 4ed06a554..9b9ea3bf2 100644 --- a/src/mbgl/annotation/shape_annotation_impl.cpp +++ b/src/mbgl/annotation/shape_annotation_impl.cpp @@ -85,7 +85,7 @@ void ShapeAnnotationImpl::updateTile(const CanonicalTileID& tileID, AnnotationTi if (!shapeTiler) { const uint64_t maxAmountOfTiles = 1 << maxZoom; - const double tolerance = baseTolerance / (maxAmountOfTiles * GeometryTileFeature::defaultExtent); + const double tolerance = baseTolerance / (maxAmountOfTiles * util::EXTENT); geojsonvt::ProjectedRings rings; std::vector points; diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp index b7ec99803..aeedea3a7 100644 --- a/src/mbgl/geometry/feature_index.cpp +++ b/src/mbgl/geometry/feature_index.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -141,7 +140,7 @@ void FeatureIndex::addFeature( if (!styleLayer) continue; if (!styleLayer->is()) { - auto geometries = getGeometries(*geometryTileFeature); + auto geometries = geometryTileFeature->getGeometries(); if (!styleLayer->queryIntersectsGeometry(queryGeometry, geometries, bearing, pixelsToTileUnits)) continue; } diff --git a/src/mbgl/layer/circle_layer.cpp b/src/mbgl/layer/circle_layer.cpp index 1cdc3fa05..839d1282a 100644 --- a/src/mbgl/layer/circle_layer.cpp +++ b/src/mbgl/layer/circle_layer.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -51,7 +50,7 @@ std::unique_ptr CircleLayer::createBucket(StyleBucketParameters& paramet auto& name = bucketName(); parameters.eachFilteredFeature(filter, [&] (const auto& feature, std::size_t index, const std::string& layerName) { - auto geometries = getGeometries(feature); + auto geometries = feature.getGeometries(); bucket->addGeometry(geometries); parameters.featureIndex.insert(geometries, index, layerName, name); }); diff --git a/src/mbgl/layer/fill_layer.cpp b/src/mbgl/layer/fill_layer.cpp index eff80fb6d..850bac4ab 100644 --- a/src/mbgl/layer/fill_layer.cpp +++ b/src/mbgl/layer/fill_layer.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -63,7 +62,7 @@ std::unique_ptr FillLayer::createBucket(StyleBucketParameters& parameter auto& name = bucketName(); parameters.eachFilteredFeature(filter, [&] (const auto& feature, std::size_t index, const std::string& layerName) { - auto geometries = getGeometries(feature); + auto geometries = feature.getGeometries(); bucket->addGeometry(geometries); parameters.featureIndex.insert(geometries, index, layerName, name); }); diff --git a/src/mbgl/layer/line_layer.cpp b/src/mbgl/layer/line_layer.cpp index d26638b0c..d1d377462 100644 --- a/src/mbgl/layer/line_layer.cpp +++ b/src/mbgl/layer/line_layer.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -84,7 +83,7 @@ std::unique_ptr LineLayer::createBucket(StyleBucketParameters& parameter auto& name = bucketName(); parameters.eachFilteredFeature(filter, [&] (const auto& feature, std::size_t index, const std::string& layerName) { - auto geometries = getGeometries(feature); + auto geometries = feature.getGeometries(); bucket->addGeometry(geometries); parameters.featureIndex.insert(geometries, index, layerName, name); }); diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp index a18303276..3588b2ed5 100644 --- a/src/mbgl/renderer/symbol_bucket.cpp +++ b/src/mbgl/renderer/symbol_bucket.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -170,7 +169,7 @@ void SymbolBucket::parseFeatures(const GeometryTileLayer& layer, const Filter& f auto &multiline = ft.geometry; - GeometryCollection geometryCollection = getGeometries(*feature); + GeometryCollection geometryCollection = feature->getGeometries(); for (auto& line : geometryCollection) { multiline.emplace_back(); for (auto& point : line) { diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 923585028..676c18e4c 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -34,15 +34,12 @@ using GeometryCollection = std::vector; class GeometryTileFeature : private util::noncopyable { public: - static const uint32_t defaultExtent = util::EXTENT; - virtual ~GeometryTileFeature() = default; virtual FeatureType getType() const = 0; virtual optional getValue(const std::string& key) const = 0; virtual Feature::property_map getProperties() const { return Feature::property_map(); } virtual optional 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 27edd8532..343224052 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 data_) : data(std::move(data_)) { } diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp index c0892cd24..d41d4f4f3 100644 --- a/src/mbgl/tile/vector_tile.hpp +++ b/src/mbgl/tile/vector_tile.hpp @@ -25,7 +25,6 @@ public: std::unordered_map getProperties() const override; optional getID() const override; GeometryCollection getGeometries() const override; - uint32_t getExtent() const override; private: const VectorTileLayer& layer; diff --git a/src/mbgl/util/get_geometries.cpp b/src/mbgl/util/get_geometries.cpp deleted file mode 100644 index 5961af215..000000000 --- a/src/mbgl/util/get_geometries.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -#include - -namespace mbgl { - -GeometryCollection getGeometries(const GeometryTileFeature& feature) { - const float scale = float(util::EXTENT) / feature.getExtent(); - GeometryCollection geometryCollection = feature.getGeometries(); - for (auto& line : geometryCollection) { - for (auto& point : line) { - point.x = ::round(point.x * scale); - point.y = ::round(point.y * scale); - } - } - return geometryCollection; -} - -} // namespace mbgl - diff --git a/src/mbgl/util/get_geometries.hpp b/src/mbgl/util/get_geometries.hpp deleted file mode 100644 index 013a7e5b9..000000000 --- a/src/mbgl/util/get_geometries.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef MBGL_UTIL_GET_GEOMETRIES -#define MBGL_UTIL_GET_GEOMETRIES - -#include - -namespace mbgl { - -GeometryCollection getGeometries(const GeometryTileFeature& feature); - -} // namespace mbgl - -#endif