From ceb75b7b2627b84a2a282f526662990274afffe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 12 Mar 2014 14:31:37 +0100 Subject: [PATCH] use feature_type to distinguish between geometry type and bucket type --- src/map/vector_tile.cpp | 4 ++-- src/style/style_parser.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/map/vector_tile.cpp b/src/map/vector_tile.cpp index e4df0d359..b5596cdda 100644 --- a/src/map/vector_tile.cpp +++ b/src/map/vector_tile.cpp @@ -316,7 +316,7 @@ void FilteredVectorTileLayer::iterator::operator++() { default: type = BucketType::None; break; } - if (type != filter.bucket_desc.type) { + if (type != filter.bucket_desc.feature_type) { break; // feature_pbf loop early } } else { @@ -324,7 +324,7 @@ void FilteredVectorTileLayer::iterator::operator++() { } } - if (!skip && type == filter.bucket_desc.type) { + if (!skip && type == filter.bucket_desc.feature_type) { valid = true; return; // data loop } else { diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index 7d0b46ffa..82e2b5153 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -31,6 +31,12 @@ BucketDescription StyleParser::parseBucket(JSVal value) { } else { throw Style::exception("bucket type must be a string"); } + } else if (name == "feature_type") { + if (value.IsString()) { + bucket.feature_type = bucketType({ value.GetString(), value.GetStringLength() }); + } else { + throw Style::exception("feature type must be a string"); + } } else if (name == "source") { if (value.IsString()) { bucket.source_name = { value.GetString(), value.GetStringLength() }; @@ -81,6 +87,12 @@ BucketDescription StyleParser::parseBucket(JSVal value) { } else { throw Style::exception("font size must be a number"); } + } else if (name == "text_field") { + if (value.IsString()) { + bucket.geometry.text_field = { value.GetString(), value.GetStringLength() }; + } else { + throw Style::exception("text field must be a string"); + } } else if (name == "miterLimit") { if (value.IsNumber()) { bucket.geometry.miter_limit = value.GetDouble(); @@ -96,6 +108,10 @@ BucketDescription StyleParser::parseBucket(JSVal value) { } } + if (bucket.feature_type == BucketType::None) { + bucket.feature_type = bucket.type; + } + return bucket; }