Check for matching source when parsing tiles (fixes #1698)

This commit is contained in:
John Firebaugh
2015-07-02 15:56:02 -07:00
parent 4870bccaba
commit 108792420c
4 changed files with 17 additions and 9 deletions

View File

@@ -20,9 +20,10 @@ LiveTileData::LiveTileData(const TileID& id_,
: TileData(id_),
worker(style_.workers),
tileWorker(id_,
source_.source_id,
source_.max_zoom,
style_,
style_.layers,
source_.max_zoom,
state,
std::make_unique<CollisionTile>(id_.z, 4096,
source_.tile_size * id.overscaling,

View File

@@ -11,16 +11,18 @@
using namespace mbgl;
TileWorker::TileWorker(const TileID& id_,
TileWorker::TileWorker(TileID id_,
std::string sourceID_,
const uint16_t maxZoom_,
Style& style_,
std::vector<util::ptr<StyleLayer>> layers_,
const uint16_t maxZoom_,
const std::atomic<TileData::State>& state_,
std::unique_ptr<CollisionTile> collision_)
: layers(std::move(layers_)),
style(style_),
id(id_),
sourceID(sourceID_),
maxZoom(maxZoom_),
style(style_),
state(state_),
collision(std::move(collision_)) {
assert(style.sprite);
@@ -121,6 +123,8 @@ void TileWorker::parseLayer(const StyleLayer& layer, const GeometryTile& geometr
const StyleBucket& styleBucket = *layer.bucket;
// Skip this bucket if we are to not render this
if (styleBucket.source != sourceID)
return;
if (id.z < std::floor(styleBucket.min_zoom) && std::floor(styleBucket.min_zoom) < maxZoom)
return;
if (id.z >= std::ceil(styleBucket.max_zoom))

View File

@@ -31,10 +31,11 @@ using TileParseResult = mapbox::util::variant<
class TileWorker : public util::noncopyable {
public:
TileWorker(const TileID&,
TileWorker(TileID,
std::string sourceID,
uint16_t maxZoom,
Style&,
std::vector<util::ptr<StyleLayer>>,
const uint16_t maxZoom,
const std::atomic<TileData::State>&,
std::unique_ptr<CollisionTile>);
~TileWorker();
@@ -57,10 +58,11 @@ private:
template <class Bucket>
void addBucketGeometries(Bucket&, const GeometryTileLayer&, const FilterExpression&);
Style& style;
const TileID id;
const std::string sourceID;
const uint16_t maxZoom;
Style& style;
const std::atomic<TileData::State>& state;
bool partialParse = false;

View File

@@ -20,9 +20,10 @@ VectorTileData::VectorTileData(const TileID& id_,
: TileData(id_),
worker(style_.workers),
tileWorker(id_,
source_.source_id,
source_.max_zoom,
style_,
style_.layers,
source_.max_zoom,
state,
std::make_unique<CollisionTile>(id_.z, 4096,
source_.tile_size * id.overscaling,