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; }