From 7be21f60469f611f3b3327b336699caaed4bbec1 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 13:26:11 -0700 Subject: [PATCH 01/17] First (untested) pass at handling GL Style Spec filters --- Makefile | 2 +- README.md | 1 + evaluator.cpp | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++ evaluator.hpp | 11 +++ tile-join.cpp | 74 +++++++++++++++++-- 5 files changed, 276 insertions(+), 8 deletions(-) create mode 100644 evaluator.cpp create mode 100644 evaluator.hpp diff --git a/Makefile b/Makefile index f83ccb1d..c3f0e795 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ tippecanoe-enumerate: enumerate.o tippecanoe-decode: decode.o projection.o mvt.o write_json.o $(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -tile-join: tile-join.o projection.o pool.o mbtiles.o mvt.o memfile.o dirtiles.o jsonpull/jsonpull.o text.o +tile-join: tile-join.o projection.o pool.o mbtiles.o mvt.o memfile.o dirtiles.o jsonpull/jsonpull.o text.o evaluator.o $(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread unit: unit.o text.o diff --git a/README.md b/README.md index d8f197a9..63d9344c 100644 --- a/README.md +++ b/README.md @@ -482,6 +482,7 @@ The options are: * `-x` *key* or `--exclude=`*key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. * `-i` or `--if-matched`: Only include features that matched the CSV. + * `-J` *filter-file* or `--gl-filter-file`=*filter-file*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. ### Setting or disabling tile size limits diff --git a/evaluator.cpp b/evaluator.cpp new file mode 100644 index 00000000..1da97788 --- /dev/null +++ b/evaluator.cpp @@ -0,0 +1,196 @@ +#include +#include +#include +#include "mvt.hpp" +#include "evaluator.hpp" + +int compare(mvt_value one, json_object *two, bool &fail) { + if (one.type == mvt_string) { + if (two->type != JSON_STRING) { + fail = true; + return false; // string vs non-string + } + + return strcmp(one.string_value.c_str(), two->string); + } + + if (one.type == mvt_double || one.type == mvt_float || one.type == mvt_int || one.type == mvt_uint || one.type == mvt_sint) { + if (two->type != JSON_NUMBER) { + fail = true; + return false; // number vs non-number + } + + double v; + if (one.type == mvt_double) { + v = one.numeric_value.double_value; + } else if (one.type == mvt_float) { + v = one.numeric_value.float_value; + } else if (one.type == mvt_int) { + v = one.numeric_value.int_value; + } else if (one.type == mvt_uint) { + v = one.numeric_value.uint_value; + } else if (one.type == mvt_sint) { + v = one.numeric_value.sint_value; + } else { + fprintf(stderr, "Internal error: bad mvt type %d\n", one.type); + exit(EXIT_FAILURE); + } + + if (v < two->number) { + return -1; + } else if (v > two->number) { + return 1; + } else { + return 0; + } + } + + if (one.type == mvt_bool) { + if (two->type != JSON_TRUE && two->type != JSON_FALSE) { + fail = true; + return false; // bool vs non-bool + } + + bool b = two->type = JSON_TRUE; + return one.numeric_value.bool_value > b; + } + + fprintf(stderr, "Internal error: bad mvt type %d\n", one.type); + exit(EXIT_FAILURE); +} + +bool eval(std::map const &feature, json_object *f) { + if (f == NULL || f->type != JSON_ARRAY) { + fprintf(stderr, "Filter is not an array: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + if (f->length < 2) { + fprintf(stderr, "Array too small in filter: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + if (f->array[0]->type != JSON_STRING) { + fprintf(stderr, "Filter operation is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + if (strcmp(f->array[0]->string, "has") == 0) { + if (f->array[1]->type != JSON_STRING) { + fprintf(stderr, "\"has\" key is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + return feature.count(std::string(f->array[1]->string)) != 0; + } + + if (strcmp(f->array[0]->string, "!has") == 0) { + if (f->array[1]->type != JSON_STRING) { + fprintf(stderr, "\"!has\" key is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + return feature.count(std::string(f->array[1]->string)) == 0; + } + + if (strcmp(f->array[0]->string, "==") == 0 || + strcmp(f->array[0]->string, "!=") == 0 || + strcmp(f->array[0]->string, ">") == 0 || + strcmp(f->array[0]->string, ">=") == 0 || + strcmp(f->array[0]->string, "<") == 0 || + strcmp(f->array[0]->string, "<=") == 0) { + if (f->length < 3) { + fprintf(stderr, "Array too small in filter: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + if (f->array[1]->type != JSON_STRING) { + fprintf(stderr, "\"!has\" key is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + auto ff = feature.find(std::string(f->array[1]->string)); + if (ff == feature.end()) { + return false; // not found: comparison is false + } + + bool fail = false; + int cmp = compare(ff->second, f->array[2], fail); + + if (fail) { + return false; + } + + if (strcmp(f->array[0]->string, "==") == 0) { + return cmp == 0; + } + if (strcmp(f->array[0]->string, "!=") == 0) { + return cmp != 0; + } + if (strcmp(f->array[0]->string, ">") == 0) { + return cmp > 0; + } + if (strcmp(f->array[0]->string, ">=") == 0) { + return cmp >= 0; + } + if (strcmp(f->array[0]->string, "<") == 0) { + return cmp < 0; + } + if (strcmp(f->array[0]->string, "<=") == 0) { + return cmp <= 0; + } + + fprintf(stderr, "Internal error: can't happen: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + if (strcmp(f->array[0]->string, "all") == 0 || + strcmp(f->array[0]->string, "any") == 0 || + strcmp(f->array[0]->string, "none") == 0) { + bool v; + + if (strcmp(f->array[0]->string, "all") == 0) { + v = true; + } else { + v = false; + } + + for (size_t i = 1; i < f->length; i++) { + bool out = eval(feature, f->array[i]); + + if (strcmp(f->array[0]->string, "all") == 0) { + v = v && out; + } else { + v = v || out; + } + } + + if (strcmp(f->array[0]->string, "none") == 0) { + return !v; + } else { + return v; + } + } + + fprintf(stderr, "Unknown filter %s\n", json_stringify(f)); + exit(EXIT_FAILURE); +} + +bool evaluate(std::map const &feature, std::string const &layer, json_object *filter) { + json_object *layers = json_hash_get(filter, "layers"); + + if (layers == NULL) { + fprintf(stderr, "Filter: no \"layers\" key at top level\n"); + exit(EXIT_FAILURE); + } + + if (layers->type != JSON_HASH) { + fprintf(stderr, "Filter: \"layers\" is not a hash\n"); + exit(EXIT_FAILURE); + } + + json_object *f = json_hash_get(layers, layer.c_str()); + + if (f != NULL) { + return eval(feature, f); + } else { + return true; // no filter for this layer; + } +} diff --git a/evaluator.hpp b/evaluator.hpp new file mode 100644 index 00000000..8c3b25bc --- /dev/null +++ b/evaluator.hpp @@ -0,0 +1,11 @@ +#ifndef EVALUATOR_HPP +#define EVALUATOR HPP + +#include +#include +#include "jsonpull/jsonpull.h" +#include "mvt.hpp" + +bool evaluate(std::map const &feature, std::string const &layer, json_pull *filter); + +#endif diff --git a/tile-join.cpp b/tile-join.cpp index aee4f3c6..5a0422b3 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -45,7 +45,7 @@ struct stats { double minlat, minlon, maxlat, maxlon; }; -void handle(std::string message, int z, unsigned x, unsigned y, std::map &layermap, std::vector &header, std::map> &mapping, std::set &exclude, std::set &keep_layers, std::set &remove_layers, int ifmatched, mvt_tile &outtile) { +void handle(std::string message, int z, unsigned x, unsigned y, std::map &layermap, std::vector &header, std::map> &mapping, std::set &exclude, std::set &keep_layers, std::set &remove_layers, int ifmatched, mvt_tile &outtile, json_object *filter) { mvt_tile tile; int features_added = 0; bool was_compressed; @@ -99,6 +99,39 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map attributes; + + for (size_t t = 0; t + 1 < feat.tags.size(); t += 2) { + std::string key = layer.keys[feat.tags[t]]; + mvt_value &val = layer.values[feat.tags[t + 1]]; + + attributes.insert(std::pair(key, val)); + } + + if (feat.has_id) { + mvt_value v; + v.type = mvt_uint; + v.numeric_value.uint_value = feat.id; + + attributes.insert(std::pair("$id", v)); + } + + mvt_value v; + v.type = mvt_string; + + if (feat.type == mvt_point) { + v.string_value = "Point"; + } else if (feat.type == mvt_linestring) { + v.string_value = "LineString"; + } else if (feat.type == mvt_polygon) { + v.string_value = "Polygon"; + } + + attributes.insert(std::pair("$type", v)); + } + mvt_feature outfeature; int matched = 0; @@ -563,6 +596,7 @@ struct arg { std::set *keep_layers; std::set *remove_layers; int ifmatched; + json_object *filter; }; void *join_worker(void *v) { @@ -572,7 +606,7 @@ void *join_worker(void *v) { mvt_tile tile; for (size_t i = 0; i < ai->second.size(); i++) { - handle(ai->second[i], ai->first.z, ai->first.x, ai->first.y, *(a->layermap), *(a->header), *(a->mapping), *(a->exclude), *(a->keep_layers), *(a->remove_layers), a->ifmatched, tile); + handle(ai->second[i], ai->first.z, ai->first.x, ai->first.y, *(a->layermap), *(a->header), *(a->mapping), *(a->exclude), *(a->keep_layers), *(a->remove_layers), a->ifmatched, tile, a->filter); } ai->second.clear(); @@ -606,7 +640,7 @@ void *join_worker(void *v) { return NULL; } -void handle_tasks(std::map> &tasks, std::vector> &layermaps, sqlite3 *outdb, const char *outdir, std::vector &header, std::map> &mapping, std::set &exclude, int ifmatched, std::set &keep_layers, std::set &remove_layers) { +void handle_tasks(std::map> &tasks, std::vector> &layermaps, sqlite3 *outdb, const char *outdir, std::vector &header, std::map> &mapping, std::set &exclude, int ifmatched, std::set &keep_layers, std::set &remove_layers, json_object *filter) { pthread_t pthreads[CPUS]; std::vector args; @@ -620,6 +654,7 @@ void handle_tasks(std::map> &tasks, std::vector> &tasks, std::vector &layermap, sqlite3 *outdb, const char *outdir, struct stats *st, std::vector &header, std::map> &mapping, std::set &exclude, int ifmatched, std::string &attribution, std::string &description, std::set &keep_layers, std::set &remove_layers, std::string &name) { +void decode(struct reader *readers, char *map, std::map &layermap, sqlite3 *outdb, const char *outdir, struct stats *st, std::vector &header, std::map> &mapping, std::set &exclude, int ifmatched, std::string &attribution, std::string &description, std::set &keep_layers, std::set &remove_layers, std::string &name, json_object *filter) { std::vector> layermaps; for (size_t i = 0; i < CPUS; i++) { layermaps.push_back(std::map()); @@ -706,7 +741,7 @@ void decode(struct reader *readers, char *map, std::mapzoom != r->zoom || readers->x != r->x || readers->y != r->y) { if (tasks.size() > 100 * CPUS) { - handle_tasks(tasks, layermaps, outdb, outdir, header, mapping, exclude, ifmatched, keep_layers, remove_layers); + handle_tasks(tasks, layermaps, outdb, outdir, header, mapping, exclude, ifmatched, keep_layers, remove_layers, filter); tasks.clear(); } } @@ -759,7 +794,7 @@ void decode(struct reader *readers, char *map, std::mapminlat = min(minlat, st->minlat); st->maxlat = max(maxlat, st->maxlat); - handle_tasks(tasks, layermaps, outdb, outdir, header, mapping, exclude, ifmatched, keep_layers, remove_layers); + handle_tasks(tasks, layermaps, outdb, outdir, header, mapping, exclude, ifmatched, keep_layers, remove_layers, filter); layermap = merge_layermaps(layermaps); struct reader *next; @@ -996,6 +1031,25 @@ void readcsv(char *fn, std::vector &header, std::maperror); + exit(EXIT_FAILURE); + } + + // XXX clone tree instead of leaving pull open + fclose(fp); + return filter; +} + int main(int argc, char **argv) { char *out_mbtiles = NULL; char *out_dir = NULL; @@ -1003,6 +1057,7 @@ int main(int argc, char **argv) { char *csv = NULL; int force = 0; int ifmatched = 0; + json_object *filter = NULL; CPUS = sysconf(_SC_NPROCESSORS_ONLN); @@ -1039,6 +1094,7 @@ int main(int argc, char **argv) { {"quiet", no_argument, 0, 'q'}, {"maximum-zoom", required_argument, 0, 'z'}, {"minimum-zoom", required_argument, 0, 'Z'}, + {"gl-filter-file", required_argument, 0, 'J'}, {"no-tile-size-limit", no_argument, &pk, 1}, {"no-tile-compression", no_argument, &pC, 1}, @@ -1103,6 +1159,10 @@ int main(int argc, char **argv) { minzoom = atoi(optarg); break; + case 'J': + filter = read_filter(optarg); + break; + case 'p': if (strcmp(optarg, "k") == 0) { pk = true; @@ -1200,7 +1260,7 @@ int main(int argc, char **argv) { *rr = r; } - decode(readers, csv, layermap, outdb, out_dir, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name); + decode(readers, csv, layermap, outdb, out_dir, &st, header, mapping, exclude, ifmatched, attribution, description, keep_layers, remove_layers, name, filter); if (set_attribution.size() != 0) { attribution = set_attribution; From 58782135165fa5e5a931281f3beabbb3cff86345 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 13:42:14 -0700 Subject: [PATCH 02/17] Simplify the filter format, and actually run the filter. --- README.md | 9 ++++++++- evaluator.cpp | 14 +------------- evaluator.hpp | 2 +- jsonpull/jsonpull.c | 4 ++-- jsonpull/jsonpull.h | 4 ++-- man/tippecanoe.1 | 12 ++++++++++++ tile-join.cpp | 23 +++++++++++++++++++++++ 7 files changed, 49 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 63d9344c..72fd4b34 100644 --- a/README.md +++ b/README.md @@ -482,7 +482,14 @@ The options are: * `-x` *key* or `--exclude=`*key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. * `-i` or `--if-matched`: Only include features that matched the CSV. - * `-J` *filter-file* or `--gl-filter-file`=*filter-file*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. + * `-j` *filter* or `--gl-filter`=*filter*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. Any features in layers that have no filter specified will be passed through. + * `-J` *filter-file* or `--gl-filter-file`=*filter-file*: Like `-j`, but read the filter from a file. + +Example: to find the Natural Earth countries with low `scalerank` but high `LABELRANK`: + +``` +tile-join -o filtered.mbtiles -j '{ "ne_10m_admin_0_countries": [ "all", [ "<", "scalerank", 3 ], [ ">", "LABELRANK", 5 ] ] }' ne_10m_admin_0_countries.mbtiles +``` ### Setting or disabling tile size limits diff --git a/evaluator.cpp b/evaluator.cpp index 1da97788..48feca7e 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -174,19 +174,7 @@ bool eval(std::map const &feature, json_object *f) { } bool evaluate(std::map const &feature, std::string const &layer, json_object *filter) { - json_object *layers = json_hash_get(filter, "layers"); - - if (layers == NULL) { - fprintf(stderr, "Filter: no \"layers\" key at top level\n"); - exit(EXIT_FAILURE); - } - - if (layers->type != JSON_HASH) { - fprintf(stderr, "Filter: \"layers\" is not a hash\n"); - exit(EXIT_FAILURE); - } - - json_object *f = json_hash_get(layers, layer.c_str()); + json_object *f = json_hash_get(filter, layer.c_str()); if (f != NULL) { return eval(feature, f); diff --git a/evaluator.hpp b/evaluator.hpp index 8c3b25bc..da65a217 100644 --- a/evaluator.hpp +++ b/evaluator.hpp @@ -6,6 +6,6 @@ #include "jsonpull/jsonpull.h" #include "mvt.hpp" -bool evaluate(std::map const &feature, std::string const &layer, json_pull *filter); +bool evaluate(std::map const &feature, std::string const &layer, json_object *filter); #endif diff --git a/jsonpull/jsonpull.c b/jsonpull/jsonpull.c index ad4d1526..35caac89 100644 --- a/jsonpull/jsonpull.c +++ b/jsonpull/jsonpull.c @@ -69,7 +69,7 @@ json_pull *json_begin_file(FILE *f) { } static ssize_t read_string(json_pull *j, char *buffer, size_t n) { - char *cp = j->source; + const char *cp = j->source; size_t out = 0; while (out < n && cp[out] != '\0') { @@ -81,7 +81,7 @@ static ssize_t read_string(json_pull *j, char *buffer, size_t n) { return out; } -json_pull *json_begin_string(char *s) { +json_pull *json_begin_string(const char *s) { return json_begin(read_string, s); } diff --git a/jsonpull/jsonpull.h b/jsonpull/jsonpull.h index dabeb306..2f44b1d9 100644 --- a/jsonpull/jsonpull.h +++ b/jsonpull/jsonpull.h @@ -46,7 +46,7 @@ typedef struct json_pull { int line; ssize_t (*read)(struct json_pull *, char *buf, size_t n); - void *source; + const void *source; char *buffer; ssize_t buffer_tail; ssize_t buffer_head; @@ -56,7 +56,7 @@ typedef struct json_pull { } json_pull; json_pull *json_begin_file(FILE *f); -json_pull *json_begin_string(char *s); +json_pull *json_begin_string(const char *s); json_pull *json_begin(ssize_t (*read)(struct json_pull *, char *buffer, size_t n), void *source); void json_end(json_pull *p); diff --git a/man/tippecanoe.1 b/man/tippecanoe.1 index b3c0b3e8..4ea75d33 100644 --- a/man/tippecanoe.1 +++ b/man/tippecanoe.1 @@ -566,6 +566,18 @@ The options are: \fB\fC\-x\fR \fIkey\fP or \fB\fC\-\-exclude=\fR\fIkey\fP: Remove attributes of type \fIkey\fP from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. .IP \(bu 2 \fB\fC\-i\fR or \fB\fC\-\-if\-matched\fR: Only include features that matched the CSV. +.IP \(bu 2 +\fB\fC\-j\fR \fIfilter\fP or \fB\fC\-\-gl\-filter\fR=\fIfilter\fP: Check features against a per\-layer filter (as defined in the Mapbox GL Style Specification \[la]https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter\[ra]) and only include those that match. Any features in layers that have no filter specified will be passed through. +.IP \(bu 2 +\fB\fC\-J\fR \fIfilter\-file\fP or \fB\fC\-\-gl\-filter\-file\fR=\fIfilter\-file\fP: Like \fB\fC\-j\fR, but read the filter from a file. +.RE +.PP +Example: to find the Natural Earth countries with low \fB\fCscalerank\fR but high \fB\fCLABELRANK\fR: +.PP +.RS +.nf +tile\-join \-o filtered.mbtiles \-j '{ "ne_10m_admin_0_countries": [ "all", [ "<", "scalerank", 3 ], [ ">", "LABELRANK", 5 ] ] }' ne_10m_admin_0_countries.mbtiles +.fi .RE .SS Setting or disabling tile size limits .RS diff --git a/tile-join.cpp b/tile-join.cpp index 5a0422b3..11e4f23b 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -22,6 +22,7 @@ #include "mbtiles.hpp" #include "geometry.hpp" #include "dirtiles.hpp" +#include "evaluator.hpp" #include #include #include @@ -130,6 +131,10 @@ void handle(std::string message, int z, unsigned x, unsigned y, std::map("$type", v)); + + if (!evaluate(attributes, layer.name, filter)) { + continue; + } } mvt_feature outfeature; @@ -1050,6 +1055,19 @@ json_object *read_filter(const char *fname) { return filter; } +json_object *parse_filter(const char *s) { + json_pull *jp = json_begin_string(s); + json_object *filter = json_read_tree(jp); + if (filter == NULL) { + fprintf(stderr, "Could not parse filter %s\n", s); + fprintf(stderr, "%s\n", jp->error); + exit(EXIT_FAILURE); + } + + // XXX clone tree instead of leaving pull open + return filter; +} + int main(int argc, char **argv) { char *out_mbtiles = NULL; char *out_dir = NULL; @@ -1095,6 +1113,7 @@ int main(int argc, char **argv) { {"maximum-zoom", required_argument, 0, 'z'}, {"minimum-zoom", required_argument, 0, 'Z'}, {"gl-filter-file", required_argument, 0, 'J'}, + {"gl-filter", required_argument, 0, 'j'}, {"no-tile-size-limit", no_argument, &pk, 1}, {"no-tile-compression", no_argument, &pC, 1}, @@ -1163,6 +1182,10 @@ int main(int argc, char **argv) { filter = read_filter(optarg); break; + case 'j': + filter = parse_filter(optarg); + break; + case 'p': if (strcmp(optarg, "k") == 0) { pk = true; From b7df68c164f4085b60407344b8ea0f31771631c9 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 13:56:52 -0700 Subject: [PATCH 03/17] Remember how to keep a parse tree around after the parser is closed --- tile-join.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tile-join.cpp b/tile-join.cpp index 11e4f23b..7bd2c165 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -1049,8 +1049,8 @@ json_object *read_filter(const char *fname) { fprintf(stderr, "%s: %s\n", fname, jp->error); exit(EXIT_FAILURE); } - - // XXX clone tree instead of leaving pull open + json_disconnect(filter); + json_end(jp); fclose(fp); return filter; } @@ -1063,8 +1063,8 @@ json_object *parse_filter(const char *s) { fprintf(stderr, "%s\n", jp->error); exit(EXIT_FAILURE); } - - // XXX clone tree instead of leaving pull open + json_disconnect(filter); + json_end(jp); return filter; } @@ -1301,5 +1301,9 @@ int main(int argc, char **argv) { mbtiles_close(outdb, argv[0]); } + if (filter != NULL) { + json_free(filter); + } + return 0; } From 8d7f8af1d93bb7b1952f0d105f10d921b8e329af Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 14:01:57 -0700 Subject: [PATCH 04/17] Make indent --- evaluator.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/evaluator.cpp b/evaluator.cpp index 48feca7e..2b629d47 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -8,7 +8,7 @@ int compare(mvt_value one, json_object *two, bool &fail) { if (one.type == mvt_string) { if (two->type != JSON_STRING) { fail = true; - return false; // string vs non-string + return false; // string vs non-string } return strcmp(one.string_value.c_str(), two->string); @@ -17,7 +17,7 @@ int compare(mvt_value one, json_object *two, bool &fail) { if (one.type == mvt_double || one.type == mvt_float || one.type == mvt_int || one.type == mvt_uint || one.type == mvt_sint) { if (two->type != JSON_NUMBER) { fail = true; - return false; // number vs non-number + return false; // number vs non-number } double v; @@ -48,7 +48,7 @@ int compare(mvt_value one, json_object *two, bool &fail) { if (one.type == mvt_bool) { if (two->type != JSON_TRUE && two->type != JSON_FALSE) { fail = true; - return false; // bool vs non-bool + return false; // bool vs non-bool } bool b = two->type = JSON_TRUE; @@ -108,7 +108,7 @@ bool eval(std::map const &feature, json_object *f) { auto ff = feature.find(std::string(f->array[1]->string)); if (ff == feature.end()) { - return false; // not found: comparison is false + return false; // not found: comparison is false } bool fail = false; @@ -179,6 +179,6 @@ bool evaluate(std::map const &feature, std::string const if (f != NULL) { return eval(feature, f); } else { - return true; // no filter for this layer; + return true; // no filter for this layer; } } From 4e1611eec93fa10a67d9a637d4c6547837dda025 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 14:08:05 -0700 Subject: [PATCH 05/17] Fix boolean comparisions --- evaluator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evaluator.cpp b/evaluator.cpp index 2b629d47..d8825783 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -51,7 +51,7 @@ int compare(mvt_value one, json_object *two, bool &fail) { return false; // bool vs non-bool } - bool b = two->type = JSON_TRUE; + bool b = two->type != JSON_FALSE; return one.numeric_value.bool_value > b; } From 754cbdc63449da44ee663b1f47531990525db4f4 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 14:21:41 -0700 Subject: [PATCH 06/17] Add short circuits; warnings for mismatched types, wrong array lengths --- evaluator.cpp | 54 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/evaluator.cpp b/evaluator.cpp index d8825783..f721500e 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -65,7 +65,7 @@ bool eval(std::map const &feature, json_object *f) { exit(EXIT_FAILURE); } - if (f->length < 2) { + if (f->length < 1) { fprintf(stderr, "Array too small in filter: %s\n", json_stringify(f)); exit(EXIT_FAILURE); } @@ -75,20 +75,28 @@ bool eval(std::map const &feature, json_object *f) { exit(EXIT_FAILURE); } - if (strcmp(f->array[0]->string, "has") == 0) { - if (f->array[1]->type != JSON_STRING) { - fprintf(stderr, "\"has\" key is not a string: %s\n", json_stringify(f)); + if (strcmp(f->array[0]->string, "has") == 0 || + strcmp(f->array[0]->string, "!has") == 0) { + if (f->length != 2) { + fprintf(stderr, "Wrong number of array elements in filter: %s\n", json_stringify(f)); exit(EXIT_FAILURE); } - return feature.count(std::string(f->array[1]->string)) != 0; - } - if (strcmp(f->array[0]->string, "!has") == 0) { - if (f->array[1]->type != JSON_STRING) { - fprintf(stderr, "\"!has\" key is not a string: %s\n", json_stringify(f)); - exit(EXIT_FAILURE); + if (strcmp(f->array[0]->string, "has") == 0) { + if (f->array[1]->type != JSON_STRING) { + fprintf(stderr, "\"has\" key is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + return feature.count(std::string(f->array[1]->string)) != 0; + } + + if (strcmp(f->array[0]->string, "!has") == 0) { + if (f->array[1]->type != JSON_STRING) { + fprintf(stderr, "\"!has\" key is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + return feature.count(std::string(f->array[1]->string)) == 0; } - return feature.count(std::string(f->array[1]->string)) == 0; } if (strcmp(f->array[0]->string, "==") == 0 || @@ -97,8 +105,8 @@ bool eval(std::map const &feature, json_object *f) { strcmp(f->array[0]->string, ">=") == 0 || strcmp(f->array[0]->string, "<") == 0 || strcmp(f->array[0]->string, "<=") == 0) { - if (f->length < 3) { - fprintf(stderr, "Array too small in filter: %s\n", json_stringify(f)); + if (f->length != 3) { + fprintf(stderr, "Wrong number of array elements in filter: %s\n", json_stringify(f)); exit(EXIT_FAILURE); } if (f->array[1]->type != JSON_STRING) { @@ -108,6 +116,13 @@ bool eval(std::map const &feature, json_object *f) { auto ff = feature.find(std::string(f->array[1]->string)); if (ff == feature.end()) { + static bool warned = false; + if (!warned) { + const char *s = json_stringify(f); + fprintf(stderr, "Warning: attribute not found for comparison: %s\n", s); + free((void *) s); + warned = true; + } return false; // not found: comparison is false } @@ -115,6 +130,13 @@ bool eval(std::map const &feature, json_object *f) { int cmp = compare(ff->second, f->array[2], fail); if (fail) { + static bool warned = false; + if (!warned) { + const char *s = json_stringify(f); + fprintf(stderr, "Warning: mismatched type in comparison: %s\n", s); + free((void *) s); + warned = true; + } return false; } @@ -157,8 +179,14 @@ bool eval(std::map const &feature, json_object *f) { if (strcmp(f->array[0]->string, "all") == 0) { v = v && out; + if (!v) { + break; + } } else { v = v || out; + if (v) { + break; + } } } From 1581b79a3e394d0ee453a99ff341405a392f1908 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Mon, 28 Aug 2017 14:35:07 -0700 Subject: [PATCH 07/17] Forgot to implement "in" and "!in" --- evaluator.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/evaluator.cpp b/evaluator.cpp index f721500e..c976c447 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -197,6 +197,59 @@ bool eval(std::map const &feature, json_object *f) { } } + if (strcmp(f->array[0]->string, "in") == 0 || + strcmp(f->array[0]->string, "!in") == 0) { + if (f->length < 2) { + fprintf(stderr, "Array too small in filter: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + if (f->array[1]->type != JSON_STRING) { + fprintf(stderr, "\"!has\" key is not a string: %s\n", json_stringify(f)); + exit(EXIT_FAILURE); + } + + auto ff = feature.find(std::string(f->array[1]->string)); + if (ff == feature.end()) { + static bool warned = false; + if (!warned) { + const char *s = json_stringify(f); + fprintf(stderr, "Warning: attribute not found for comparison: %s\n", s); + free((void *) s); + warned = true; + } + return false; // not found: comparison is false + } + + bool found = false; + for (size_t i = 2; i < f->length; i++) { + bool fail = false; + int cmp = compare(ff->second, f->array[i], fail); + + if (fail) { + static bool warned = false; + if (!warned) { + const char *s = json_stringify(f); + fprintf(stderr, "Warning: mismatched type in comparison: %s\n", s); + free((void *) s); + warned = true; + } + cmp = 1; + } + + if (cmp == 0) { + found = true; + break; + } + } + + if (strcmp(f->array[0]->string, "in") == 0) { + return found; + } else { + return !found; + } + } + fprintf(stderr, "Unknown filter %s\n", json_stringify(f)); exit(EXIT_FAILURE); } From 0d56d1bf3830d976c3e8bea040284be8897de02f Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Tue, 29 Aug 2017 14:49:24 -0700 Subject: [PATCH 08/17] Add missing #include --- evaluator.cpp | 1 + jsonpull/jsonpull.c | 4 ++-- jsonpull/jsonpull.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/evaluator.cpp b/evaluator.cpp index c976c447..3f113ff8 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include "mvt.hpp" #include "evaluator.hpp" diff --git a/jsonpull/jsonpull.c b/jsonpull/jsonpull.c index 35caac89..3067f4fe 100644 --- a/jsonpull/jsonpull.c +++ b/jsonpull/jsonpull.c @@ -77,12 +77,12 @@ static ssize_t read_string(json_pull *j, char *buffer, size_t n) { out++; } - j->source = cp + out; + j->source = (void *) (cp + out); return out; } json_pull *json_begin_string(const char *s) { - return json_begin(read_string, s); + return json_begin(read_string, (void *) s); } void json_end(json_pull *p) { diff --git a/jsonpull/jsonpull.h b/jsonpull/jsonpull.h index 2f44b1d9..1983a354 100644 --- a/jsonpull/jsonpull.h +++ b/jsonpull/jsonpull.h @@ -46,7 +46,7 @@ typedef struct json_pull { int line; ssize_t (*read)(struct json_pull *, char *buf, size_t n); - const void *source; + void *source; char *buffer; ssize_t buffer_tail; ssize_t buffer_head; From 0fd445412966848fe0edacc99cc402d629c7f4ff Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 1 Sep 2017 11:51:12 -0700 Subject: [PATCH 09/17] Allow filter expressions during tippecanoe as well as during tile-join --- Makefile | 2 +- README.md | 6 ++++-- evaluator.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++------ evaluator.hpp | 2 ++ main.cpp | 33 +++++++++++++++++++++------- man/tippecanoe.1 | 8 +++++-- serial.cpp | 39 +++++++++++++++++++++++++++++++++ serial.hpp | 2 ++ tile-join.cpp | 36 ++----------------------------- 9 files changed, 131 insertions(+), 53 deletions(-) diff --git a/Makefile b/Makefile index 7144f0d3..aec389e0 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ C = $(wildcard *.c) $(wildcard *.cpp) INCLUDES = -I/usr/local/include -I. LIBS = -L/usr/local/lib -tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o plugin.o read_json.o write_json.o geobuf.o +tippecanoe: geojson.o jsonpull/jsonpull.o tile.o pool.o mbtiles.o geometry.o projection.o memfile.o mvt.o serial.o main.o text.o dirtiles.o plugin.o read_json.o write_json.o geobuf.o evaluator.o $(CXX) $(PG) $(LIBS) $(FINAL_FLAGS) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) -lm -lz -lsqlite3 -lpthread tippecanoe-enumerate: enumerate.o diff --git a/README.md b/README.md index 94f69902..7516b591 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,8 @@ resolution is obtained than by using a smaller _maxzoom_ or _detail_. If the type is `bool`, then original attributes of `0` (or, if numeric, `0.0`, etc.), `false`, `null`, or the empty string become `false`, and otherwise become `true`. If the type is `float` or `int` and the original attribute was non-numeric, it becomes `0`. If the type is `int` and the original attribute was floating-point, it is rounded to the nearest integer. + * `-j` *filter* or `--feature-filter`=*filter*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. Any features in layers that have no filter specified will be passed through. Filters for the layer `"*"` apply to all layers. + * `-J` *filter-file* or `--feature-filter-file`=*filter-file*: Like `-j`, but read the filter from a file. ### Dropping a fixed fraction of features by zoom level @@ -483,8 +485,8 @@ The options are: * `-x` *key* or `--exclude=`*key*: Remove attributes of type *key* from the output. You can use this to remove the field you are matching against if you no longer need it after joining, or to remove any other attributes you don't want. * `-i` or `--if-matched`: Only include features that matched the CSV. - * `-j` *filter* or `--gl-filter`=*filter*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. Any features in layers that have no filter specified will be passed through. - * `-J` *filter-file* or `--gl-filter-file`=*filter-file*: Like `-j`, but read the filter from a file. + * `-j` *filter* or `--feature-filter`=*filter*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. Any features in layers that have no filter specified will be passed through. Filters for the layer `"*"` apply to all layers. + * `-J` *filter-file* or `--feature-filter-file`=*filter-file*: Like `-j`, but read the filter from a file. Example: to find the Natural Earth countries with low `scalerank` but high `LABELRANK`: diff --git a/evaluator.cpp b/evaluator.cpp index 3f113ff8..faa17895 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -256,11 +256,55 @@ bool eval(std::map const &feature, json_object *f) { } bool evaluate(std::map const &feature, std::string const &layer, json_object *filter) { - json_object *f = json_hash_get(filter, layer.c_str()); - - if (f != NULL) { - return eval(feature, f); - } else { - return true; // no filter for this layer; + if (filter == NULL || filter->type != JSON_HASH) { + fprintf(stderr, "Error: filter is not a hash: %s\n", json_stringify(filter)); + exit(EXIT_FAILURE); } + + bool ok = true; + json_object *f; + + f = json_hash_get(filter, layer.c_str()); + if (ok && f != NULL) { + ok = eval(feature, f); + } + + f = json_hash_get(filter, "*"); + if (ok && f != NULL) { + ok = eval(feature, f); + } + + return ok; +} + +json_object *read_filter(const char *fname) { + FILE *fp = fopen(fname, "r"); + if (fp == NULL) { + perror(fname); + exit(EXIT_FAILURE); + } + + json_pull *jp = json_begin_file(fp); + json_object *filter = json_read_tree(jp); + if (filter == NULL) { + fprintf(stderr, "%s: %s\n", fname, jp->error); + exit(EXIT_FAILURE); + } + json_disconnect(filter); + json_end(jp); + fclose(fp); + return filter; +} + +json_object *parse_filter(const char *s) { + json_pull *jp = json_begin_string(s); + json_object *filter = json_read_tree(jp); + if (filter == NULL) { + fprintf(stderr, "Could not parse filter %s\n", s); + fprintf(stderr, "%s\n", jp->error); + exit(EXIT_FAILURE); + } + json_disconnect(filter); + json_end(jp); + return filter; } diff --git a/evaluator.hpp b/evaluator.hpp index da65a217..99bcb27d 100644 --- a/evaluator.hpp +++ b/evaluator.hpp @@ -7,5 +7,7 @@ #include "mvt.hpp" bool evaluate(std::map const &feature, std::string const &layer, json_object *filter); +json_object *parse_filter(const char *s); +json_object *read_filter(const char *fname); #endif diff --git a/main.cpp b/main.cpp index 5ae5c199..5d0f9a5f 100644 --- a/main.cpp +++ b/main.cpp @@ -56,6 +56,7 @@ #include "options.hpp" #include "mvt.hpp" #include "dirtiles.hpp" +#include "evaluator.hpp" static int low_detail = 12; static int full_detail = -1; @@ -349,7 +350,7 @@ void *run_sort(void *v) { return NULL; } -void do_read_parallel(char *map, long long len, long long initial_offset, const char *reading, struct reader *readers, volatile long long *progress_seq, std::set *exclude, std::set *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector > *layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma, std::map const *attribute_types, int separator, double *dist_sum, size_t *dist_count, bool want_dist, bool filters) { +void do_read_parallel(char *map, long long len, long long initial_offset, const char *reading, struct reader *readers, volatile long long *progress_seq, std::set *exclude, std::set *include, int exclude_all, json_object *filter, char *fname, int basezoom, int source, int nlayers, std::vector > *layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma, std::map const *attribute_types, int separator, double *dist_sum, size_t *dist_count, bool want_dist, bool filters) { long long segs[CPUS + 1]; segs[0] = 0; segs[CPUS] = len; @@ -400,6 +401,7 @@ void do_read_parallel(char *map, long long len, long long initial_offset, const sst[i].filters = filters; sst[i].layermap = &(*layermaps)[i]; sst[i].exclude = exclude; + sst[i].filter = filter; sst[i].include = include; sst[i].exclude_all = exclude_all; sst[i].basezoom = basezoom; @@ -445,6 +447,7 @@ struct read_parallel_arg { std::set *exclude; std::set *include; int exclude_all; + json_object *filter; char *fname; int maxzoom; int basezoom; @@ -483,7 +486,7 @@ void *run_read_parallel(void *v) { } madvise(map, rpa->len, MADV_RANDOM); // sequential, but from several pointers at once - do_read_parallel(map, rpa->len, rpa->offset, rpa->reading, rpa->readers, rpa->progress_seq, rpa->exclude, rpa->include, rpa->exclude_all, rpa->fname, rpa->basezoom, rpa->source, rpa->nlayers, rpa->layermaps, rpa->droprate, rpa->initialized, rpa->initial_x, rpa->initial_y, rpa->maxzoom, rpa->layername, rpa->uses_gamma, rpa->attribute_types, rpa->separator, rpa->dist_sum, rpa->dist_count, rpa->want_dist, rpa->filters); + do_read_parallel(map, rpa->len, rpa->offset, rpa->reading, rpa->readers, rpa->progress_seq, rpa->exclude, rpa->include, rpa->exclude_all, rpa->filter, rpa->fname, rpa->basezoom, rpa->source, rpa->nlayers, rpa->layermaps, rpa->droprate, rpa->initialized, rpa->initial_x, rpa->initial_y, rpa->maxzoom, rpa->layername, rpa->uses_gamma, rpa->attribute_types, rpa->separator, rpa->dist_sum, rpa->dist_count, rpa->want_dist, rpa->filters); madvise(map, rpa->len, MADV_DONTNEED); if (munmap(map, rpa->len) != 0) { @@ -500,7 +503,7 @@ void *run_read_parallel(void *v) { return NULL; } -void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile int *is_parsing, pthread_t *parallel_parser, bool &parser_created, const char *reading, struct reader *readers, volatile long long *progress_seq, std::set *exclude, std::set *include, int exclude_all, char *fname, int basezoom, int source, int nlayers, std::vector > &layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma, std::map const *attribute_types, int separator, double *dist_sum, size_t *dist_count, bool want_dist, bool filters) { +void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile int *is_parsing, pthread_t *parallel_parser, bool &parser_created, const char *reading, struct reader *readers, volatile long long *progress_seq, std::set *exclude, std::set *include, int exclude_all, json_object *filter, char *fname, int basezoom, int source, int nlayers, std::vector > &layermaps, double droprate, int *initialized, unsigned *initial_x, unsigned *initial_y, int maxzoom, std::string layername, bool uses_gamma, std::map const *attribute_types, int separator, double *dist_sum, size_t *dist_count, bool want_dist, bool filters) { // This has to kick off an intermediate thread to start the parser threads, // so the main thread can get back to reading the next input stage while // the intermediate thread waits for the completion of the parser threads. @@ -526,6 +529,7 @@ void start_parsing(int fd, FILE *fp, long long offset, long long len, volatile i rpa->exclude = exclude; rpa->include = include; rpa->exclude_all = exclude_all; + rpa->filter = filter; rpa->fname = fname; rpa->basezoom = basezoom; rpa->source = source; @@ -1001,7 +1005,7 @@ void choose_first_zoom(long long *file_bbox, struct reader *readers, unsigned *i } } -int read_input(std::vector &sources, char *fname, int maxzoom, int minzoom, int basezoom, double basezoom_marker_width, sqlite3 *outdb, const char *outdir, std::set *exclude, std::set *include, int exclude_all, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, const char *prefilter, const char *postfilter, const char *description, bool guess_maxzoom, std::map const *attribute_types, const char *pgm) { +int read_input(std::vector &sources, char *fname, int maxzoom, int minzoom, int basezoom, double basezoom_marker_width, sqlite3 *outdb, const char *outdir, std::set *exclude, std::set *include, int exclude_all, json_object *filter, double droprate, int buffer, const char *tmpdir, double gamma, int read_parallel, int forcetable, const char *attribution, bool uses_gamma, long long *file_bbox, const char *prefilter, const char *postfilter, const char *description, bool guess_maxzoom, std::map const *attribute_types, const char *pgm) { int ret = EXIT_SUCCESS; struct reader readers[CPUS]; @@ -1237,6 +1241,7 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo sst[i].exclude = exclude; sst[i].include = include; sst[i].exclude_all = exclude_all; + sst[i].filter = filter; sst[i].basezoom = basezoom; sst[i].attribute_types = attribute_types; } @@ -1299,7 +1304,7 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo } if (map != NULL && map != MAP_FAILED && read_parallel_this) { - do_read_parallel(map, st.st_size - off, overall_offset, reading.c_str(), readers, &progress_seq, exclude, include, exclude_all, fname, basezoom, layer, nlayers, &layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, uses_gamma, attribute_types, read_parallel_this, &dist_sum, &dist_count, guess_maxzoom, prefilter != NULL || postfilter != NULL); + do_read_parallel(map, st.st_size - off, overall_offset, reading.c_str(), readers, &progress_seq, exclude, include, exclude_all, filter, fname, basezoom, layer, nlayers, &layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, uses_gamma, attribute_types, read_parallel_this, &dist_sum, &dist_count, guess_maxzoom, prefilter != NULL || postfilter != NULL); overall_offset += st.st_size - off; checkdisk(readers, CPUS); @@ -1375,7 +1380,7 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo } fflush(readfp); - start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), readers, &progress_seq, exclude, include, exclude_all, fname, basezoom, layer, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, gamma != 0, attribute_types, read_parallel_this, &dist_sum, &dist_count, guess_maxzoom, prefilter != NULL || postfilter != NULL); + start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), readers, &progress_seq, exclude, include, exclude_all, filter, fname, basezoom, layer, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, gamma != 0, attribute_types, read_parallel_this, &dist_sum, &dist_count, guess_maxzoom, prefilter != NULL || postfilter != NULL); initial_offset += ahead; overall_offset += ahead; @@ -1412,7 +1417,7 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo fflush(readfp); if (ahead > 0) { - start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), readers, &progress_seq, exclude, include, exclude_all, fname, basezoom, layer, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, gamma != 0, attribute_types, read_parallel_this, &dist_sum, &dist_count, guess_maxzoom, prefilter != NULL || postfilter != NULL); + start_parsing(readfd, readfp, initial_offset, ahead, &is_parsing, ¶llel_parser, parser_created, reading.c_str(), readers, &progress_seq, exclude, include, exclude_all, filter, fname, basezoom, layer, nlayers, layermaps, droprate, initialized, initial_x, initial_y, maxzoom, sources[layer].layer, gamma != 0, attribute_types, read_parallel_this, &dist_sum, &dist_count, guess_maxzoom, prefilter != NULL || postfilter != NULL); if (parser_created) { if (pthread_join(parallel_parser, NULL) != 0) { @@ -1450,6 +1455,7 @@ int read_input(std::vector &sources, char *fname, int maxzoom, int minzo sst.exclude = exclude; sst.include = include; sst.exclude_all = exclude_all; + sst.filter = filter; sst.basezoom = basezoom; sst.attribute_types = attribute_types; @@ -2143,6 +2149,7 @@ int main(int argc, char **argv) { int exclude_all = 0; int read_parallel = 0; int files_open_at_start; + json_object *filter = NULL; for (i = 0; i < 256; i++) { prevent[i] = 0; @@ -2186,6 +2193,8 @@ int main(int argc, char **argv) { {"include", required_argument, 0, 'y'}, {"exclude-all", no_argument, 0, 'X'}, {"attribute-type", required_argument, 0, 'T'}, + {"feature-filter-file", required_argument, 0, 'J'}, + {"feature-filter", required_argument, 0, 'j'}, {"Dropping a fixed fraction of features by zoom level", 0, 0, 0}, {"drop-rate", required_argument, 0, 'r'}, @@ -2415,6 +2424,14 @@ int main(int argc, char **argv) { exclude_all = 1; break; + case 'J': + filter = read_filter(optarg); + break; + + case 'j': + filter = parse_filter(optarg); + break; + case 'r': if (strcmp(optarg, "g") == 0) { droprate = -2; @@ -2663,7 +2680,7 @@ int main(int argc, char **argv) { long long file_bbox[4] = {UINT_MAX, UINT_MAX, 0, 0}; - ret = read_input(sources, name ? name : out_mbtiles ? out_mbtiles : out_dir, maxzoom, minzoom, basezoom, basezoom_marker_width, outdb, out_dir, &exclude, &include, exclude_all, droprate, buffer, tmpdir, gamma, read_parallel, forcetable, attribution, gamma != 0, file_bbox, prefilter, postfilter, description, guess_maxzoom, &attribute_types, argv[0]); + ret = read_input(sources, name ? name : out_mbtiles ? out_mbtiles : out_dir, maxzoom, minzoom, basezoom, basezoom_marker_width, outdb, out_dir, &exclude, &include, exclude_all, filter, droprate, buffer, tmpdir, gamma, read_parallel, forcetable, attribution, gamma != 0, file_bbox, prefilter, postfilter, description, guess_maxzoom, &attribute_types, argv[0]); if (outdb != NULL) { mbtiles_close(outdb, argv[0]); diff --git a/man/tippecanoe.1 b/man/tippecanoe.1 index 1bdc2175..d2706bcc 100644 --- a/man/tippecanoe.1 +++ b/man/tippecanoe.1 @@ -178,6 +178,10 @@ The \fItype\fP may be \fB\fCstring\fR, \fB\fCfloat\fR, \fB\fCint\fR, or \fB\fCbo If the type is \fB\fCbool\fR, then original attributes of \fB\fC0\fR (or, if numeric, \fB\fC0.0\fR, etc.), \fB\fCfalse\fR, \fB\fCnull\fR, or the empty string become \fB\fCfalse\fR, and otherwise become \fB\fCtrue\fR\&. If the type is \fB\fCfloat\fR or \fB\fCint\fR and the original attribute was non\-numeric, it becomes \fB\fC0\fR\&. If the type is \fB\fCint\fR and the original attribute was floating\-point, it is rounded to the nearest integer. +.IP \(bu 2 +\fB\fC\-j\fR \fIfilter\fP or \fB\fC\-\-feature\-filter\fR=\fIfilter\fP: Check features against a per\-layer filter (as defined in the Mapbox GL Style Specification \[la]https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter\[ra]) and only include those that match. Any features in layers that have no filter specified will be passed through. Filters for the layer \fB\fC"*"\fR apply to all layers. +.IP \(bu 2 +\fB\fC\-J\fR \fIfilter\-file\fP or \fB\fC\-\-feature\-filter\-file\fR=\fIfilter\-file\fP: Like \fB\fC\-j\fR, but read the filter from a file. .RE .SS Dropping a fixed fraction of features by zoom level .RS @@ -569,9 +573,9 @@ The options are: .IP \(bu 2 \fB\fC\-i\fR or \fB\fC\-\-if\-matched\fR: Only include features that matched the CSV. .IP \(bu 2 -\fB\fC\-j\fR \fIfilter\fP or \fB\fC\-\-gl\-filter\fR=\fIfilter\fP: Check features against a per\-layer filter (as defined in the Mapbox GL Style Specification \[la]https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter\[ra]) and only include those that match. Any features in layers that have no filter specified will be passed through. +\fB\fC\-j\fR \fIfilter\fP or \fB\fC\-\-feature\-filter\fR=\fIfilter\fP: Check features against a per\-layer filter (as defined in the Mapbox GL Style Specification \[la]https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter\[ra]) and only include those that match. Any features in layers that have no filter specified will be passed through. Filters for the layer \fB\fC"*"\fR apply to all layers. .IP \(bu 2 -\fB\fC\-J\fR \fIfilter\-file\fP or \fB\fC\-\-gl\-filter\-file\fR=\fIfilter\-file\fP: Like \fB\fC\-j\fR, but read the filter from a file. +\fB\fC\-J\fR \fIfilter\-file\fP or \fB\fC\-\-feature\-filter\-file\fR=\fIfilter\-file\fP: Like \fB\fC\-j\fR, but read the filter from a file. .RE .PP Example: to find the Natural Earth countries with low \fB\fCscalerank\fR but high \fB\fCLABELRANK\fR: diff --git a/serial.cpp b/serial.cpp index 03f72d72..da198b75 100644 --- a/serial.cpp +++ b/serial.cpp @@ -18,6 +18,7 @@ #include "main.hpp" #include "pool.hpp" #include "projection.hpp" +#include "evaluator.hpp" #include "milo/dtoa_milo.h" size_t fwrite_check(const void *ptr, size_t size, size_t nitems, FILE *stream, const char *fname) { @@ -531,6 +532,44 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { } } + if (sst->filter != NULL) { + std::map attributes; + + for (size_t i = 0; i < sf.full_keys.size(); i++) { + if (sf.full_keys[i] != "") { + std::string key = sf.full_keys[i]; + mvt_value val = stringified_to_mvt_value(sf.full_values[i].type, sf.full_values[i].s.c_str()); + + attributes.insert(std::pair(key, val)); + } + } + + if (sf.has_id) { + mvt_value v; + v.type = mvt_uint; + v.numeric_value.uint_value = sf.id; + + attributes.insert(std::pair("$id", v)); + } + + mvt_value v; + v.type = mvt_string; + + if (sf.t == mvt_point) { + v.string_value = "Point"; + } else if (sf.t == mvt_linestring) { + v.string_value = "LineString"; + } else if (sf.t == mvt_polygon) { + v.string_value = "Polygon"; + } + + attributes.insert(std::pair("$type", v)); + + if (!evaluate(attributes, sf.layername, sst->filter)) { + return 0; + } + } + if (!sst->filters) { for (size_t i = 0; i < sf.full_keys.size(); i++) { if (sf.full_keys[i].size() == 0) { diff --git a/serial.hpp b/serial.hpp index 439c30ed..918e3e81 100644 --- a/serial.hpp +++ b/serial.hpp @@ -7,6 +7,7 @@ #include #include "geometry.hpp" #include "mbtiles.hpp" +#include "jsonpull/jsonpull.h" size_t fwrite_check(const void *ptr, size_t size, size_t nitems, FILE *stream, const char *fname); @@ -125,6 +126,7 @@ struct serialization_state { std::set *exclude; std::set *include; int exclude_all; + json_object *filter; }; int serialize_feature(struct serialization_state *sst, serial_feature &sf); diff --git a/tile-join.cpp b/tile-join.cpp index 801a29c1..b11e8ed0 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -1037,38 +1037,6 @@ void readcsv(char *fn, std::vector &header, std::maperror); - exit(EXIT_FAILURE); - } - json_disconnect(filter); - json_end(jp); - fclose(fp); - return filter; -} - -json_object *parse_filter(const char *s) { - json_pull *jp = json_begin_string(s); - json_object *filter = json_read_tree(jp); - if (filter == NULL) { - fprintf(stderr, "Could not parse filter %s\n", s); - fprintf(stderr, "%s\n", jp->error); - exit(EXIT_FAILURE); - } - json_disconnect(filter); - json_end(jp); - return filter; -} - int main(int argc, char **argv) { char *out_mbtiles = NULL; char *out_dir = NULL; @@ -1113,8 +1081,8 @@ int main(int argc, char **argv) { {"quiet", no_argument, 0, 'q'}, {"maximum-zoom", required_argument, 0, 'z'}, {"minimum-zoom", required_argument, 0, 'Z'}, - {"gl-filter-file", required_argument, 0, 'J'}, - {"gl-filter", required_argument, 0, 'j'}, + {"feature-filter-file", required_argument, 0, 'J'}, + {"feature-filter", required_argument, 0, 'j'}, {"no-tile-size-limit", no_argument, &pk, 1}, {"no-tile-compression", no_argument, &pC, 1}, From c232e565dbb6468cb674126e19776e3468665063 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 1 Sep 2017 15:14:14 -0700 Subject: [PATCH 10/17] Working on testing against Mapbox GL JS filter tests --- evaluator.cpp | 18 + geojson.cpp | 5 + mvt.cpp | 2 + serial.cpp | 15 +- tests/feature-filter/filter | 133 +++++ tests/feature-filter/in.json | 338 +++++++++++++ .../-z0_-Jtests%feature-filter%filter.json | 478 ++++++++++++++++++ tests/make-filter-test | 77 +++ 8 files changed, 1060 insertions(+), 6 deletions(-) create mode 100644 tests/feature-filter/filter create mode 100644 tests/feature-filter/in.json create mode 100644 tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json create mode 100755 tests/make-filter-test diff --git a/evaluator.cpp b/evaluator.cpp index faa17895..20fe8234 100644 --- a/evaluator.cpp +++ b/evaluator.cpp @@ -56,6 +56,15 @@ int compare(mvt_value one, json_object *two, bool &fail) { return one.numeric_value.bool_value > b; } + if (one.type == mvt_null) { + if (two->type != JSON_NULL) { + fail = true; + return false; // null vs non-null + } + + return 0; // null equals null + } + fprintf(stderr, "Internal error: bad mvt type %d\n", one.type); exit(EXIT_FAILURE); } @@ -124,6 +133,9 @@ bool eval(std::map const &feature, json_object *f) { free((void *) s); warned = true; } + if (strcmp(f->array[0]->string, "!=") == 0) { + return true; // attributes that aren't found are not equal + } return false; // not found: comparison is false } @@ -138,6 +150,9 @@ bool eval(std::map const &feature, json_object *f) { free((void *) s); warned = true; } + if (strcmp(f->array[0]->string, "!=") == 0) { + return true; // mismatched types are not equal + } return false; } @@ -219,6 +234,9 @@ bool eval(std::map const &feature, json_object *f) { free((void *) s); warned = true; } + if (strcmp(f->array[0]->string, "!in") == 0) { + return true; // attributes that aren't found are not in + } return false; // not found: comparison is false } diff --git a/geojson.cpp b/geojson.cpp index e3c0461c..178236dc 100644 --- a/geojson.cpp +++ b/geojson.cpp @@ -165,6 +165,11 @@ int serialize_geojson_feature(struct serialization_state *sst, json_object *geom metatype[m] = type; metaval[m] = val; m++; + } else { + metakey[m] = properties->keys[i]->string; + metatype[m] = mvt_null; + metaval[m] = "null"; + m++; } } } diff --git a/mvt.cpp b/mvt.cpp index 6feceb91..9559dd4d 100644 --- a/mvt.cpp +++ b/mvt.cpp @@ -530,6 +530,8 @@ mvt_value stringified_to_mvt_value(int type, const char *s) { } else if (type == mvt_bool) { tv.type = mvt_bool; tv.numeric_value.bool_value = (s[0] == 't'); + } else if (type == mvt_null) { + tv.type = mvt_null; } else { tv.type = mvt_string; tv.string_value = s; diff --git a/serial.cpp b/serial.cpp index da198b75..76b99d20 100644 --- a/serial.cpp +++ b/serial.cpp @@ -514,22 +514,18 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { for (size_t i = 0; i < sf.full_keys.size(); i++) { if (sst->exclude_all) { - if (sst->include->count(sf.full_keys[i]) == 0) { + if (sst->include->count(sf.full_keys[i]) == 0 && sf.full_keys[i] != "") { sf.full_keys[i] = ""; sf.m--; continue; } - } else if (sst->exclude->count(sf.full_keys[i]) != 0) { + } else if (sst->exclude->count(sf.full_keys[i]) != 0 && sf.full_keys[i] != "") { sf.full_keys[i] = ""; sf.m--; continue; } coerce_value(sf.full_keys[i], sf.full_values[i].type, sf.full_values[i].s, sst->attribute_types); - if (sf.full_values[i].type == mvt_null) { - sf.full_keys[i] = ""; - sf.m--; - } } if (sst->filter != NULL) { @@ -570,6 +566,13 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { } } + for (size_t i = 0; i < sf.full_keys.size(); i++) { + if (sf.full_values[i].type == mvt_null && sf.full_keys[i] != "") { + sf.full_keys[i] = ""; + sf.m--; + } + } + if (!sst->filters) { for (size_t i = 0; i < sf.full_keys.size(); i++) { if (sf.full_keys[i].size() == 0) { diff --git a/tests/feature-filter/filter b/tests/feature-filter/filter new file mode 100644 index 00000000..170ee33c --- /dev/null +++ b/tests/feature-filter/filter @@ -0,0 +1,133 @@ +{ +"layer2850085303": ["==", "foo", "bar"], +"notlayer2850085303": [ "none", ["==", "foo", "bar"] ] +, +"layer1948775714": ["==", "foo", 0], +"notlayer1948775714": [ "none", ["==", "foo", 0] ] +, +"layer220442869": ["==", "foo", null], +"notlayer220442869": [ "none", ["==", "foo", null] ] +, +"layer1675768827": ["==", "$type", "LineString"], +"notlayer1675768827": [ "none", ["==", "$type", "LineString"] ] +, +"layer827905613": ["==", "$id", 1234], +"notlayer827905613": [ "none", ["==", "$id", 1234] ] +, +"layer442294443": ["!=", "foo", "bar"], +"notlayer442294443": [ "none", ["!=", "foo", "bar"] ] +, +"layer1479822166": ["!=", "foo", 0], +"notlayer1479822166": [ "none", ["!=", "foo", 0] ] +, +"layer1780490201": ["!=", "foo", null], +"notlayer1780490201": [ "none", ["!=", "foo", null] ] +, +"layer1549998271": ["!=", "$type", "LineString"], +"notlayer1549998271": [ "none", ["!=", "$type", "LineString"] ] +, +"layer2624681884": ["<", "foo", 0], +"notlayer2624681884": [ "none", ["<", "foo", 0] ] +, +"layer2596070344": ["<", "foo", "0"], +"notlayer2596070344": [ "none", ["<", "foo", "0"] ] +, +"layer4079511021": ["<=", "foo", 0], +"notlayer4079511021": [ "none", ["<=", "foo", 0] ] +, +"layer1392333553": ["<=", "foo", "0"], +"notlayer1392333553": [ "none", ["<=", "foo", "0"] ] +, +"layer4018549566": [">", "foo", 0], +"notlayer4018549566": [ "none", [">", "foo", 0] ] +, +"layer3835447578": [">", "foo", "0"], +"notlayer3835447578": [ "none", [">", "foo", "0"] ] +, +"layer4113007703": [">=", "foo", 0], +"notlayer4113007703": [ "none", [">=", "foo", 0] ] +, +"layer4650955": [">=", "foo", "0"], +"notlayer4650955": [ "none", [">=", "foo", "0"] ] +, +"layer1510660139": ["in", "foo"], +"notlayer1510660139": [ "none", ["in", "foo"] ] +, +"layer2681700979": ["in", "foo", "0"], +"notlayer2681700979": [ "none", ["in", "foo", "0"] ] +, +"layer328238911": ["in", "foo", 0], +"notlayer328238911": [ "none", ["in", "foo", 0] ] +, +"layer584721662": ["in", "foo", null], +"notlayer584721662": [ "none", ["in", "foo", null] ] +, +"layer464719784": ["in", "foo", 0, 1], +"notlayer464719784": [ "none", ["in", "foo", 0, 1] ] +, +"layer1359089124": ["in", "$type", "LineString", "Polygon"], +"notlayer1359089124": [ "none", ["in", "$type", "LineString", "Polygon"] ] +, +"layer3115744778": ["in", "$type", "Polygon", "LineString", "Point"], +"notlayer3115744778": [ "none", ["in", "$type", "Polygon", "LineString", "Point"] ] +, +"layer262236988": ["!in", "foo"], +"notlayer262236988": [ "none", ["!in", "foo"] ] +, +"layer3444677016": ["!in", "foo", "0"], +"notlayer3444677016": [ "none", ["!in", "foo", "0"] ] +, +"layer3048837612": ["!in", "foo", 0], +"notlayer3048837612": [ "none", ["!in", "foo", 0] ] +, +"layer3045031255": ["!in", "foo", null], +"notlayer3045031255": [ "none", ["!in", "foo", null] ] +, +"layer2925029377": ["!in", "foo", 0, 1], +"notlayer2925029377": [ "none", ["!in", "foo", 0, 1] ] +, +"layer2275670193": ["!in", "$type", "LineString", "Polygon"], +"notlayer2275670193": [ "none", ["!in", "$type", "LineString", "Polygon"] ] +, +"layer4098096220": ["any"], +"notlayer4098096220": [ "none", ["any"] ] +, +"layer3603116915": ["any", ["==", "foo", 1]], +"notlayer3603116915": [ "none", ["any", ["==", "foo", 1]] ] +, +"layer3603115546": ["any", ["==", "foo", 0]], +"notlayer3603115546": [ "none", ["any", ["==", "foo", 0]] ] +, +"layer4070554881": ["any", ["==", "foo", 0], ["==", "foo", 1]], +"notlayer4070554881": [ "none", ["any", ["==", "foo", 0], ["==", "foo", 1]] ] +, +"layer4097977117": ["all"], +"notlayer4097977117": [ "none", ["all"] ] +, +"layer2333216076": ["all", ["==", "foo", 1]], +"notlayer2333216076": [ "none", ["all", ["==", "foo", 1]] ] +, +"layer2333214707": ["all", ["==", "foo", 0]], +"notlayer2333214707": [ "none", ["all", ["==", "foo", 0]] ] +, +"layer1619469362": ["all", ["==", "foo", 0], ["==", "foo", 1]], +"notlayer1619469362": [ "none", ["all", ["==", "foo", 0], ["==", "foo", 1]] ] +, +"layer2208582832": ["none"], +"notlayer2208582832": [ "none", ["none"] ] +, +"layer3425959847": ["none", ["==", "foo", 1]], +"notlayer3425959847": [ "none", ["none", ["==", "foo", 1]] ] +, +"layer3425958478": ["none", ["==", "foo", 0]], +"notlayer3425958478": [ "none", ["none", ["==", "foo", 0]] ] +, +"layer253198869": ["none", ["==", "foo", 0], ["==", "foo", 1]], +"notlayer253198869": [ "none", ["none", ["==", "foo", 0], ["==", "foo", 1]] ] +, +"layer938200568": ["has", "foo"], +"notlayer938200568": [ "none", ["has", "foo"] ] +, +"layer1991184237": ["!has", "foo"], +"notlayer1991184237": [ "none", ["!has", "foo"] ] +} diff --git a/tests/feature-filter/in.json b/tests/feature-filter/in.json new file mode 100644 index 00000000..6f70aba3 --- /dev/null +++ b/tests/feature-filter/in.json @@ -0,0 +1,338 @@ +{ "type": "Feature", "tippecanoe": { "layer": "layer2850085303" }, "properties": {"foo": "bar", "rule": "\"properties\": {\"foo\": \"bar\"}, [\"==\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2850085303" }, "properties": {"foo": "bar", "rule": "\"properties\": {\"foo\": \"bar\"}, [\"==\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2850085303" }, "properties": {"foo": "baz", "rule": "not \"properties\": {\"foo\": \"baz\"}, [\"==\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2850085303" }, "properties": {"foo": "baz", "rule": "not \"properties\": {\"foo\": \"baz\"}, [\"==\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1948775714" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1948775714" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer827905613" }, "properties": {"id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer827905613" }, "properties": {"id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer442294443" }, "properties": {"foo": "bar", "rule": "not \"properties\": {\"foo\": \"bar\"}, [\"!=\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer442294443" }, "properties": {"foo": "bar", "rule": "not \"properties\": {\"foo\": \"bar\"}, [\"!=\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer442294443" }, "properties": {"foo": "baz", "rule": "\"properties\": {\"foo\": \"baz\"}, [\"!=\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer442294443" }, "properties": {"foo": "baz", "rule": "\"properties\": {\"foo\": \"baz\"}, [\"!=\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": {"foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": {"foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": {"foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": {"foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1479822166" }, "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1479822166" }, "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": {"foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": {"foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": { "rule": "not \"properties\": {}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": { "rule": "not \"properties\": {}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2596070344" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2596070344" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4079511021" }, "properties": { "rule": "not \"properties\": {}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4079511021" }, "properties": { "rule": "not \"properties\": {}, [\"<=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1392333553" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1392333553" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4018549566" }, "properties": { "rule": "not \"properties\": {}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4018549566" }, "properties": { "rule": "not \"properties\": {}, [\">\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3835447578" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3835447578" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4113007703" }, "properties": { "rule": "not \"properties\": {}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4113007703" }, "properties": { "rule": "not \"properties\": {}, [\">=\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4650955" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4650955" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1510660139" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"in\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1510660139" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"in\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2681700979" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2681700979" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2681700979" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2681700979" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2681700979" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2681700979" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2681700979" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2681700979" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2681700979" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2681700979" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2681700979" }, "properties": { "rule": "not \"properties\": {}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2681700979" }, "properties": { "rule": "not \"properties\": {}, [\"in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer328238911" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer328238911" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer328238911" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer328238911" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer328238911" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer328238911" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer328238911" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer328238911" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer328238911" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer328238911" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer584721662" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer584721662" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer584721662" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer584721662" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer584721662" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer584721662" }, "properties": {"foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer584721662" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer584721662" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer584721662" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer584721662" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer464719784" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer464719784" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer464719784" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer464719784" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer464719784" }, "properties": {"foo": 3, "rule": "not \"properties\": {\"foo\": 3}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer464719784" }, "properties": {"foo": 3, "rule": "not \"properties\": {\"foo\": 3}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer262236988" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!in\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer262236988" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!in\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3444677016" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3444677016" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3444677016" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3444677016" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3444677016" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3444677016" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3444677016" }, "properties": { "rule": "\"properties\": {}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3444677016" }, "properties": { "rule": "\"properties\": {}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3048837612" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3048837612" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3048837612" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3048837612" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3048837612" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3048837612" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3045031255" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3045031255" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3045031255" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3045031255" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3045031255" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3045031255" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!in\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2925029377" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2925029377" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2925029377" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2925029377" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2925029377" }, "properties": {"foo": 3, "rule": "\"properties\": {\"foo\": 3}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2925029377" }, "properties": {"foo": 3, "rule": "\"properties\": {\"foo\": 3}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4098096220" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4098096220" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3603116915" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3603116915" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3603115546" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3603115546" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4070554881" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4070554881" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer4097977117" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer4097977117" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2333216076" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2333216076" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2333214707" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2333214707" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1619469362" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1619469362" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2208582832" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2208582832" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3425959847" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3425959847" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3425958478" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3425958478" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer253198869" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer253198869" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": {"foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": {"foo": true, "rule": "\"properties\": {\"foo\": true}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": {"foo": true, "rule": "\"properties\": {\"foo\": true}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": {"foo": false, "rule": "\"properties\": {\"foo\": false}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": {"foo": false, "rule": "\"properties\": {\"foo\": false}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer938200568" }, "properties": { "rule": "not \"properties\": {}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer938200568" }, "properties": { "rule": "not \"properties\": {}, [\"has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": {"foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": {"foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1991184237" }, "properties": { "rule": "\"properties\": {}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1991184237" }, "properties": { "rule": "\"properties\": {}, [\"!has\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } diff --git a/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json b/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json new file mode 100644 index 00000000..1b6a5997 --- /dev/null +++ b/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json @@ -0,0 +1,478 @@ +{ "type": "FeatureCollection", "properties": { +"bounds": "0.000000,0.000000,0.000000,0.000000", +"center": "0.000000,0.000000,0", +"description": "tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json.check.mbtiles", +"format": "pbf", +"json": "{\"vector_layers\": [ { \"id\": \"layer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"id\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} } ],\"tilestats\": {\"layerCount\": 78,\"layers\": [{\"layer\": \"layer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"-1\",\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\"]\"]}]},{\"layer\": \"layer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"-1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [-1],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 3}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"mixed\",\"values\": [\"0\",0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"layer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [-1,0],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\"]\"]}]},{\"layer\": \"layer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0, 1]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"0\",\"1\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer827905613\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [-1,0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,1,false],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [-1,\"0\",0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",0,\"1\",1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [\"0\",false,true]},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,\"1\",false,true],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",\"1\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\"]\"]}]},{\"layer\": \"notlayer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",\"1\",false,true],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 3}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer827905613\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"id\",\"count\": 1,\"type\": \"number\",\"values\": [1234],\"min\": 1234,\"max\": 1234},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"id\\\": 1234}, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"notlayer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {}, [\\\"has\\\", \\\"foo\\\"]\"]}]}]}}", +"maxzoom": "0", +"minzoom": "0", +"name": "tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json.check.mbtiles", +"type": "overlay", +"version": "2" +}, "features": [ +{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "layer1392333553", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1479822166", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1780490201", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1948775714", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1991184237", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer220442869", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2208582832", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2333216076", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2596070344", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer262236988", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!in\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2624681884", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2681700979", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2850085303", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "bar", "rule": "\"properties\": {\"foo\": \"bar\"}, [\"==\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2925029377", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 3, "rule": "\"properties\": {\"foo\": 3}, [\"!in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3045031255", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3048837612", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer328238911", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3425958478", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3444677016", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3603116915", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3835447578", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4018549566", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4070554881", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4079511021", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4097977117", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4113007703", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer442294443", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "baz", "rule": "\"properties\": {\"foo\": \"baz\"}, [\"!=\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer464719784", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4650955", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer584721662", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer938200568", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "\"properties\": {\"foo\": true}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "\"properties\": {\"foo\": false}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1392333553", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1479822166", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1510660139", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"in\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1619469362", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1780490201", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1948775714", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1991184237", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer220442869", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2333214707", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer253198869", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2596070344", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2624681884", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2681700979", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2850085303", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "baz", "rule": "not \"properties\": {\"foo\": \"baz\"}, [\"==\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2925029377", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3045031255", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3048837612", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer328238911", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3425959847", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3444677016", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3603115546", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3835447578", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4018549566", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4079511021", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4098096220", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4113007703", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer442294443", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "bar", "rule": "not \"properties\": {\"foo\": \"bar\"}, [\"!=\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer464719784", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 3, "rule": "not \"properties\": {\"foo\": 3}, [\"in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4650955", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer584721662", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer827905613", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer938200568", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +] } +] } diff --git a/tests/make-filter-test b/tests/make-filter-test new file mode 100755 index 00000000..24f148d6 --- /dev/null +++ b/tests/make-filter-test @@ -0,0 +1,77 @@ +#!/usr/bin/perl + +use strict; + +open(GEOJSON, ">feature-filter/in.json"); +open(FILTER, ">feature-filter/filter"); + +sub calchash { + my $h = 0; + my $s = $_[0]; + while ($s =~ s/^(.)//) { + $h = ($h * 37 + ord($1)) & ((1 << 32) - 1); + } + return $h; +} + +my $filter = ""; +my $hash = 0; + +print FILTER "{\n"; +my $first = 1; + +open(IN, "../../mapbox-gl-js/test/unit/style-spec/feature_filter.test.js"); +while () { + if (/const f[0-9]* = filter\((.*)\);/) { + $filter = $1; + $filter =~ s/'/"/g; + $hash = "layer" . calchash($filter); + + unless ($filter =~ /apply/) { + if ($first) { + $first = 0; + } else { + print FILTER ",\n"; + } + + print FILTER "\"$hash\": $filter,\n"; + print FILTER "\"not$hash\": [ \"none\", $filter ]\n"; + } + } + + if (/t.equal\(f[0-9]*\({(.*)}\), ([a-z]+)\);/) { + unless ($filter =~ /apply/) { + my $prop = $1; + my $matched = $2; + + if ($prop =~ /properties/) { + next if $prop =~ /undefined/; + + $prop =~ s/properties/"properties"/g; + $prop =~ s/foo/"foo"/g; + $prop =~ s/id/"id"/g; + $prop =~ s/undefined/null/g; + $prop =~ s/'/"/g; + + my $qprop = "$prop, $filter"; + $qprop =~ s/"/\\"/g; + + if ($matched eq "true") { + $prop =~ s/}/, \"rule\": \"$qprop\"}/; + $prop =~ s/^"properties": {,/"properties": {/; + + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $prop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $prop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; + } else { + $prop =~ s/}/, \"rule\": \"not $qprop\"}/; + $prop =~ s/^"properties": {,/"properties": {/; + + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $prop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $prop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; + } + } + } + } +} + +print FILTER "}\n"; From 8d502eb805c300fe1f29d669c25b367d349bfa91 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 1 Sep 2017 16:41:01 -0700 Subject: [PATCH 11/17] Fix memory leak --- main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.cpp b/main.cpp index 5d0f9a5f..fffaea1f 100644 --- a/main.cpp +++ b/main.cpp @@ -2697,6 +2697,10 @@ int main(int argc, char **argv) { exit(EXIT_FAILURE); } + if (filter != NULL) { + json_free(filter); + } + return ret; } From 681907e88d4accdb9cf0b1a3924076a79bc2cf1c Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 1 Sep 2017 16:53:19 -0700 Subject: [PATCH 12/17] Add the feature ID filter tests --- tests/feature-filter/in.json | 4 ++++ .../-z0_-Jtests%feature-filter%filter.json | 8 +++++++- tests/make-filter-test | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/tests/feature-filter/in.json b/tests/feature-filter/in.json index 6f70aba3..d5cb3d1c 100644 --- a/tests/feature-filter/in.json +++ b/tests/feature-filter/in.json @@ -30,6 +30,10 @@ { "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer827905613" }, "id": 1234, "properties": { "rule": "\"id\": 1234, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer827905613" }, "id": 1234, "properties": { "rule": "\"id\": 1234, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer827905613" }, "id": "1234", "properties": { "rule": "not \"id\": \"1234\", [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer827905613" }, "id": "1234", "properties": { "rule": "not \"id\": \"1234\", [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer827905613" }, "properties": {"id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer827905613" }, "properties": {"id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer442294443" }, "properties": {"foo": "bar", "rule": "not \"properties\": {\"foo\": \"bar\"}, [\"!=\", \"foo\", \"bar\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } diff --git a/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json b/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json index 1b6a5997..50a536aa 100644 --- a/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json +++ b/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json @@ -3,7 +3,7 @@ "center": "0.000000,0.000000,0", "description": "tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json.check.mbtiles", "format": "pbf", -"json": "{\"vector_layers\": [ { \"id\": \"layer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"id\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} } ],\"tilestats\": {\"layerCount\": 78,\"layers\": [{\"layer\": \"layer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"-1\",\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\"]\"]}]},{\"layer\": \"layer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"-1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [-1],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 3}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"mixed\",\"values\": [\"0\",0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"layer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [-1,0],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\"]\"]}]},{\"layer\": \"layer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0, 1]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"0\",\"1\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer827905613\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [-1,0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,1,false],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [-1,\"0\",0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",0,\"1\",1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [\"0\",false,true]},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,\"1\",false,true],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",\"1\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\"]\"]}]},{\"layer\": \"notlayer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",\"1\",false,true],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 3}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer827905613\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"id\",\"count\": 1,\"type\": \"number\",\"values\": [1234],\"min\": 1234,\"max\": 1234},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"id\\\": 1234}, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"notlayer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {}, [\\\"has\\\", \\\"foo\\\"]\"]}]}]}}", +"json": "{\"vector_layers\": [ { \"id\": \"layer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"id\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} } ],\"tilestats\": {\"layerCount\": 78,\"layers\": [{\"layer\": \"layer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"-1\",\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\"]\"]}]},{\"layer\": \"layer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"-1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [-1],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 3}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"mixed\",\"values\": [\"0\",0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"layer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [-1,0],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\"]\"]}]},{\"layer\": \"layer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0, 1]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"0\",\"1\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer827905613\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"id\\\": 1234, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"layer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [-1,0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,1,false],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [-1,\"0\",0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",0,\"1\",1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [\"0\",false,true]},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,\"1\",false,true],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",\"1\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\"]\"]}]},{\"layer\": \"notlayer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",\"1\",false,true],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 3}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer827905613\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"id\",\"count\": 1,\"type\": \"number\",\"values\": [1234],\"min\": 1234,\"max\": 1234},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"id\\\": \\\"1234\\\", [\\\"==\\\", \\\"$id\\\", 1234]\",\"not \\\"properties\\\": {\\\"id\\\": 1234}, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"notlayer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {}, [\\\"has\\\", \\\"foo\\\"]\"]}]}]}}", "maxzoom": "0", "minzoom": "0", "name": "tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json.check.mbtiles", @@ -169,6 +169,10 @@ { "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "layer827905613", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "id": 1234, "properties": { "rule": "\"id\": 1234, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "layer938200568", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } , @@ -468,6 +472,8 @@ ] } , { "type": "FeatureCollection", "properties": { "layer": "notlayer827905613", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"id\": \"1234\", [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, { "type": "Feature", "properties": { "id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , diff --git a/tests/make-filter-test b/tests/make-filter-test index 24f148d6..61689ce2 100755 --- a/tests/make-filter-test +++ b/tests/make-filter-test @@ -69,6 +69,25 @@ while () { print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $prop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $prop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; } + } elsif ($prop =~ /id/) { + $prop =~ s/id/"id"/g; + $prop =~ s/'/"/g; + + my $qprop = "$prop, $filter"; + $qprop =~ s/"/\\"/g; + + if ($matched eq "true") { + $qprop = "\"properties\": { \"rule\": \"$qprop\" }"; + + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $prop, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $prop, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; + } else { + $qprop = "\"properties\": { \"rule\": \"not $qprop\" }"; + + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $prop, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $prop, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; + } + } } } From 86ff2216634d49d22c8fdd3b14b87b54e29a4c54 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 1 Sep 2017 17:12:16 -0700 Subject: [PATCH 13/17] I think this should fix the access to already-freed memory Also drop the reference to the JSON parser when disconnecting a JSON object from the parse tree. --- jsonpull/jsonpull.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/jsonpull/jsonpull.c b/jsonpull/jsonpull.c index 3067f4fe..78e6472a 100644 --- a/jsonpull/jsonpull.c +++ b/jsonpull/jsonpull.c @@ -708,6 +708,21 @@ void json_free(json_object *o) { free(o); } +static void json_disconnect_parser(json_object *o) { + if (o->type == JSON_HASH) { + for (size_t i = 0; i < o->length; i++) { + json_disconnect_parser(o->keys[i]); + json_disconnect_parser(o->values[i]); + } + } else if (o->type == JSON_ARRAY) { + for (size_t i = 0; i < o->length; i++) { + json_disconnect_parser(o->array[i]); + } + } + + o->parser = NULL; +} + void json_disconnect(json_object *o) { // Expunge references to this as an array element // or a hash key or value. @@ -761,6 +776,7 @@ void json_disconnect(json_object *o) { o->parser->root = NULL; } + json_disconnect_parser(o); o->parent = NULL; } From 7b71f41e43e522d2070758729d799f639cdaa0b8 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 1 Sep 2017 17:36:43 -0700 Subject: [PATCH 14/17] Fix compiler warnings --- geobuf.cpp | 2 +- jsonpull/jsonpull.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/geobuf.cpp b/geobuf.cpp index e5f0b66d..d83630fd 100644 --- a/geobuf.cpp +++ b/geobuf.cpp @@ -204,7 +204,7 @@ std::vector readGeometry(protozero::pbf_reader &pbf, size_t dim, d std::vector ret; std::vector coords; std::vector lengths; - int type; + int type = -1; while (pbf.next()) { switch (pbf.tag()) { diff --git a/jsonpull/jsonpull.c b/jsonpull/jsonpull.c index 78e6472a..c214e68e 100644 --- a/jsonpull/jsonpull.c +++ b/jsonpull/jsonpull.c @@ -710,12 +710,14 @@ void json_free(json_object *o) { static void json_disconnect_parser(json_object *o) { if (o->type == JSON_HASH) { - for (size_t i = 0; i < o->length; i++) { + size_t i; + for (i = 0; i < o->length; i++) { json_disconnect_parser(o->keys[i]); json_disconnect_parser(o->values[i]); } } else if (o->type == JSON_ARRAY) { - for (size_t i = 0; i < o->length; i++) { + size_t i; + for (i = 0; i < o->length; i++) { json_disconnect_parser(o->array[i]); } } From d349b7700dadf9cf4fd0fd385acdc814e78bc598 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Tue, 5 Sep 2017 12:17:23 -0700 Subject: [PATCH 15/17] Add the tests for filtering for feature type --- tests/feature-filter/in.json | 26 ++++++++++ .../-z0_-Jtests%feature-filter%filter.json | 48 ++++++++++++++++++- tests/make-filter-test | 38 +++++++++++++++ 3 files changed, 110 insertions(+), 2 deletions(-) diff --git a/tests/feature-filter/in.json b/tests/feature-filter/in.json index d5cb3d1c..e1cc460f 100644 --- a/tests/feature-filter/in.json +++ b/tests/feature-filter/in.json @@ -30,6 +30,10 @@ { "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": {"foo": null, "rule": "\"properties\": {\"foo\": null}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer220442869" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer220442869" }, "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1675768827" }, "properties": { "rule": "not type: 1, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1675768827" }, "properties": { "rule": "not type: 1, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1675768827" }, "properties": { "rule": "type: 2, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0, 0 ], [ 1, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1675768827" }, "properties": { "rule": "type: 2, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ -100, 0 ], [ -101, 1 ] ] } } { "type": "Feature", "tippecanoe": { "layer": "layer827905613" }, "id": 1234, "properties": { "rule": "\"id\": 1234, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer827905613" }, "id": 1234, "properties": { "rule": "\"id\": 1234, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer827905613" }, "id": "1234", "properties": { "rule": "not \"id\": \"1234\", [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } @@ -68,6 +72,10 @@ { "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": {"foo": null, "rule": "not \"properties\": {\"foo\": null}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer1780490201" }, "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer1780490201" }, "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", null]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1549998271" }, "properties": { "rule": "type: 1, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1549998271" }, "properties": { "rule": "type: 1, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1549998271" }, "properties": { "rule": "not type: 2, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0, 0 ], [ 1, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1549998271" }, "properties": { "rule": "not type: 2, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ -100, 0 ], [ -101, 1 ] ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer2624681884" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer2624681884" }, "properties": {"foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", 0]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } @@ -260,6 +268,18 @@ { "type": "Feature", "tippecanoe": { "layer": "notlayer464719784" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer464719784" }, "properties": {"foo": 3, "rule": "not \"properties\": {\"foo\": 3}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer464719784" }, "properties": {"foo": 3, "rule": "not \"properties\": {\"foo\": 3}, [\"in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1359089124" }, "properties": { "rule": "not type: 1, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1359089124" }, "properties": { "rule": "not type: 1, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1359089124" }, "properties": { "rule": "type: 2, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0, 0 ], [ 1, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1359089124" }, "properties": { "rule": "type: 2, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ -100, 0 ], [ -101, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer1359089124" }, "properties": { "rule": "type: 3, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0, 0 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer1359089124" }, "properties": { "rule": "type: 3, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -100, 0 ], [ -101, 1 ], [ -101, 0 ], [-100, 0 ] ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3115744778" }, "properties": { "rule": "type: 1, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3115744778" }, "properties": { "rule": "type: 1, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3115744778" }, "properties": { "rule": "type: 2, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0, 0 ], [ 1, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3115744778" }, "properties": { "rule": "type: 2, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ -100, 0 ], [ -101, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer3115744778" }, "properties": { "rule": "type: 3, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0, 0 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer3115744778" }, "properties": { "rule": "type: 3, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -100, 0 ], [ -101, 1 ], [ -101, 0 ], [-100, 0 ] ] ] } } { "type": "Feature", "tippecanoe": { "layer": "layer262236988" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!in\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer262236988" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!in\", \"foo\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer3444677016" }, "properties": {"foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", \"0\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } @@ -288,6 +308,12 @@ { "type": "Feature", "tippecanoe": { "layer": "layer2925029377" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer2925029377" }, "properties": {"foo": 3, "rule": "\"properties\": {\"foo\": 3}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer2925029377" }, "properties": {"foo": 3, "rule": "\"properties\": {\"foo\": 3}, [\"!in\", \"foo\", 0, 1]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2275670193" }, "properties": { "rule": "type: 1, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2275670193" }, "properties": { "rule": "type: 1, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2275670193" }, "properties": { "rule": "not type: 2, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0, 0 ], [ 1, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2275670193" }, "properties": { "rule": "not type: 2, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ -100, 0 ], [ -101, 1 ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "notlayer2275670193" }, "properties": { "rule": "not type: 3, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0, 0 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ] } } +{ "type": "Feature", "tippecanoe": { "layer": "layer2275670193" }, "properties": { "rule": "not type: 3, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -100, 0 ], [ -101, 1 ], [ -101, 0 ], [-100, 0 ] ] ] } } { "type": "Feature", "tippecanoe": { "layer": "notlayer4098096220" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\"]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer4098096220" }, "properties": {"foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\"]"}, "geometry": { "type": "Point", "coordinates": [ -100, 0 ] } } { "type": "Feature", "tippecanoe": { "layer": "layer3603116915" }, "properties": {"foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 1]]"}, "geometry": { "type": "Point", "coordinates": [ 0, 0 ] } } diff --git a/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json b/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json index 50a536aa..1ec9a31d 100644 --- a/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json +++ b/tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json @@ -1,9 +1,9 @@ { "type": "FeatureCollection", "properties": { -"bounds": "0.000000,0.000000,0.000000,0.000000", +"bounds": "0.000000,0.000000,1.000000,1.000000", "center": "0.000000,0.000000,0", "description": "tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json.check.mbtiles", "format": "pbf", -"json": "{\"vector_layers\": [ { \"id\": \"layer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"id\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} } ],\"tilestats\": {\"layerCount\": 78,\"layers\": [{\"layer\": \"layer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"-1\",\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\"]\"]}]},{\"layer\": \"layer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"-1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [-1],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 3}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"mixed\",\"values\": [\"0\",0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"layer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [-1,0],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\"]\"]}]},{\"layer\": \"layer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0, 1]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"0\",\"1\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer827905613\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"id\\\": 1234, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"layer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [-1,0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,1,false],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [-1,\"0\",0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",0,\"1\",1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [\"0\",false,true]},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,\"1\",false,true],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",\"1\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\"]\"]}]},{\"layer\": \"notlayer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",\"1\",false,true],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 3}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer827905613\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"id\",\"count\": 1,\"type\": \"number\",\"values\": [1234],\"min\": 1234,\"max\": 1234},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"id\\\": \\\"1234\\\", [\\\"==\\\", \\\"$id\\\", 1234]\",\"not \\\"properties\\\": {\\\"id\\\": 1234}, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"notlayer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {}, [\\\"has\\\", \\\"foo\\\"]\"]}]}]}}", +"json": "{\"vector_layers\": [ { \"id\": \"layer1359089124\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1549998271\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer1675768827\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2275670193\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer3115744778\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"layer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1359089124\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1549998271\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1675768827\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2275670193\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3115744778\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {} }, { \"id\": \"notlayer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"id\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} } ],\"tilestats\": {\"layerCount\": 88,\"layers\": [{\"layer\": \"layer1359089124\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"type: 2, [\\\"in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\",\"type: 3, [\\\"in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"layer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"-1\",\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1549998271\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"type: 1, [\\\"!=\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"layer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer1675768827\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"type: 2, [\\\"==\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"layer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\"]\"]}]},{\"layer\": \"layer2275670193\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"type: 1, [\\\"!in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"layer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"-1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [-1],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 3}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"mixed\",\"values\": [\"0\",0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3115744778\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"type: 1, [\\\"in\\\", \\\"$type\\\", \\\"Polygon\\\", \\\"LineString\\\", \\\"Point\\\"]\",\"type: 2, [\\\"in\\\", \\\"$type\\\", \\\"Polygon\\\", \\\"LineString\\\", \\\"Point\\\"]\",\"type: 3, [\\\"in\\\", \\\"$type\\\", \\\"Polygon\\\", \\\"LineString\\\", \\\"Point\\\"]\"]}]},{\"layer\": \"layer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"layer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [-1,0],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\"]\"]}]},{\"layer\": \"layer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"layer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0, 1]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"0\",\"1\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer827905613\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"id\\\": 1234, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"layer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1359089124\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not type: 1, [\\\"in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"notlayer1392333553\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [-1,0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer1479822166\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1549998271\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not type: 2, [\\\"!=\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"notlayer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer1675768827\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not type: 1, [\\\"==\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"notlayer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer1948775714\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1991184237\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,1,false],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2275670193\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not type: 2, [\\\"!in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\",\"not type: 3, [\\\"!in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"notlayer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer2596070344\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [-1,\"0\",0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer2624681884\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",0,\"1\",1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer2681700979\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2850085303\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer2925029377\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer3048837612\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3115744778\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer328238911\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [\"0\",false,true]},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer3444677016\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer3835447578\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer4018549566\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,\"1\",false,true],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4079511021\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",\"1\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 0,\"attributes\": []},{\"layer\": \"notlayer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\"]\"]}]},{\"layer\": \"notlayer4113007703\",\"count\": 10,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",\"1\",false,true],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer442294443\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer464719784\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 3}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer4650955\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer827905613\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"id\",\"count\": 1,\"type\": \"number\",\"values\": [1234],\"min\": 1234,\"max\": 1234},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"id\\\": \\\"1234\\\", [\\\"==\\\", \\\"$id\\\", 1234]\",\"not \\\"properties\\\": {\\\"id\\\": 1234}, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"notlayer938200568\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {}, [\\\"has\\\", \\\"foo\\\"]\"]}]}]}}", "maxzoom": "0", "minzoom": "0", "name": "tests/feature-filter/out/-z0_-Jtests%feature-filter%filter.json.check.mbtiles", @@ -11,6 +11,12 @@ "version": "2" }, "features": [ { "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "layer1359089124", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 2, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +, +{ "type": "Feature", "properties": { "rule": "type: 3, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "layer1392333553", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } , @@ -31,6 +37,14 @@ { "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "layer1549998271", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 1, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1675768827", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 2, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "layer1780490201", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } , @@ -61,6 +75,10 @@ { "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "layer2275670193", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 1, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "layer2333216076", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } @@ -101,6 +119,14 @@ { "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "layer3115744778", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 2, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +, +{ "type": "Feature", "properties": { "rule": "type: 3, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] ] } } +, +{ "type": "Feature", "properties": { "rule": "type: 1, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "layer328238911", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } @@ -187,6 +213,10 @@ { "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1359089124", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 1, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "notlayer1392333553", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } , @@ -211,10 +241,18 @@ { "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"in\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1549998271", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 2, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "notlayer1619469362", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1675768827", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 1, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "notlayer1780490201", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } @@ -261,6 +299,12 @@ { "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } , +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2275670193", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 2, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +, +{ "type": "Feature", "properties": { "rule": "not type: 3, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] ] } } +] } +, { "type": "FeatureCollection", "properties": { "layer": "notlayer2333214707", "version": 2, "extent": 4096 }, "features": [ { "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } ] } diff --git a/tests/make-filter-test b/tests/make-filter-test index 61689ce2..b750908d 100755 --- a/tests/make-filter-test +++ b/tests/make-filter-test @@ -87,7 +87,45 @@ while () { print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $prop, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $prop, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; } + } elsif ($prop =~ /type: (.)/) { + my $type = $1; + my $qprop = "$prop, $filter"; + $qprop =~ s/"/\\"/g; + + if ($matched eq "true") { + $qprop = "\"properties\": { \"rule\": \"$qprop\" }"; + } else { + $qprop = "\"properties\": { \"rule\": \"not $qprop\" }"; + } + + if ($type == 1) { + if ($matched eq "true") { + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; + } else { + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ 0, 0 ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $qprop, \"geometry\": { \"type\": \"Point\", \"coordinates\": [ -100, 0 ] } }\n"; + } + } elsif ($type == 2) { + if ($matched eq "true") { + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $qprop, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 0, 0 ], [ 1, 1 ] ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $qprop, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ -100, 0 ], [ -101, 1 ] ] } }\n"; + } else { + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $qprop, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ 0, 0 ], [ 1, 1 ] ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $qprop, \"geometry\": { \"type\": \"LineString\", \"coordinates\": [ [ -100, 0 ], [ -101, 1 ] ] } }\n"; + } + } else { + if ($matched eq "true") { + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $qprop, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ 0, 0 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $qprop, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ -100, 0 ], [ -101, 1 ], [ -101, 0 ], [-100, 0 ] ] ] } }\n"; + } else { + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"not$hash\" }, $qprop, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ 0, 0 ], [ 1, 1 ], [ 1, 0 ], [ 0, 0 ] ] ] } }\n"; + print GEOJSON "{ \"type\": \"Feature\", \"tippecanoe\": { \"layer\": \"$hash\" }, $qprop, \"geometry\": { \"type\": \"Polygon\", \"coordinates\": [ [ [ -100, 0 ], [ -101, 1 ], [ -101, 0 ], [-100, 0 ] ] ] } }\n"; + } + } + } else { + print "$prop\n"; } } } From bdd95af8b253454d580aea09a33bf1e9af04d3f6 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Tue, 5 Sep 2017 13:29:57 -0700 Subject: [PATCH 16/17] Be careful not to generate empty layers in tile-join. Add a test of filtering during tile-join. Bump version number. --- CHANGELOG.md | 4 + Makefile | 10 +- README.md | 12 +- man/tippecanoe.1 | 16 +- tests/feature-filter/out/filtered.json | 520 +++++++++++++++++++++++++ tile-join.cpp | 5 +- version.hpp | 2 +- 7 files changed, 551 insertions(+), 18 deletions(-) create mode 100644 tests/feature-filter/out/filtered.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 4988d9c1..bf728490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.24.0 + +* Add feature filters using the Mapbox GL Style Specification filter syntax + ## 1.23.0 * Add input support for Geobuf file format diff --git a/Makefile b/Makefile index aec389e0..b265fa59 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ indent: TESTS = $(wildcard tests/*/out/*.json) SPACE = $(NULL) $(NULL) -test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) raw-tiles-test parallel-test pbf-test join-test enumerate-test decode-test unit +test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) raw-tiles-test parallel-test pbf-test join-test enumerate-test decode-test join-filter-test unit ./unit # Work around Makefile and filename punctuation limits: _ for space, @ for :, % for / @@ -212,6 +212,14 @@ join-test: rm tests/join-population/tabblock_06001420.mbtiles tests/join-population/joined.mbtiles tests/join-population/joined-i.mbtiles tests/join-population/joined.mbtiles.json.check tests/join-population/joined-i.mbtiles.json.check tests/join-population/macarthur.mbtiles tests/join-population/merged.mbtiles tests/join-population/merged.mbtiles.json.check tests/join-population/merged-folder.mbtiles tests/join-population/macarthur2.mbtiles tests/join-population/windows.mbtiles tests/join-population/windows-merged.mbtiles tests/join-population/windows-merged2.mbtiles tests/join-population/windows.mbtiles.json.check tests/join-population/just-macarthur.mbtiles tests/join-population/no-macarthur.mbtiles tests/join-population/just-macarthur.mbtiles.json.check tests/join-population/no-macarthur.mbtiles.json.check tests/join-population/merged-folder.mbtiles.json.check tests/join-population/windows-merged.mbtiles.json.check tests/join-population/windows-merged2.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged.mbtiles tests/join-population/macarthur-and-macarthur2-merged2.mbtiles tests/join-population/macarthur-and-macarthur2-merged.mbtiles.json.check tests/join-population/macarthur-and-macarthur2-merged2.mbtiles.json.check rm -rf tests/join-population/raw-merged-folder tests/join-population/tabblock_06001420-folder tests/join-population/macarthur-folder tests/join-population/macarthur2-folder tests/join-population/merged-mbtiles-to-folder tests/join-population/merged-folders-to-folder tests/join-population/windows-merged-folder tests/join-population/macarthur-and-macarthur2-folder +join-filter-test: + # Comes out different from the direct tippecanoe run because null attributes are lost + ./tippecanoe -z0 -f -o tests/feature-filter/out/all.mbtiles tests/feature-filter/in.json + ./tile-join -J tests/feature-filter/filter -f -o tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles + ./tippecanoe-decode tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check + cmp tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.json + rm -f tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles + # Use this target to regenerate the standards that the tests are compared against # after making a change that legitimately changes their output diff --git a/README.md b/README.md index 7516b591..b8b52aca 100644 --- a/README.md +++ b/README.md @@ -163,6 +163,12 @@ resolution is obtained than by using a smaller _maxzoom_ or _detail_. * `-j` *filter* or `--feature-filter`=*filter*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. Any features in layers that have no filter specified will be passed through. Filters for the layer `"*"` apply to all layers. * `-J` *filter-file* or `--feature-filter-file`=*filter-file*: Like `-j`, but read the filter from a file. +Example: to find the Natural Earth countries with low `scalerank` but high `LABELRANK`: + +``` +tile-join -o filtered.mbtiles -j '{ "ne_10m_admin_0_countries": [ "all", [ "<", "scalerank", 3 ], [ ">", "LABELRANK", 5 ] ] }' ne_10m_admin_0_countries.mbtiles +``` + ### Dropping a fixed fraction of features by zoom level * `-r` _rate_ or `--drop-rate=`_rate_: Rate at which dots are dropped at zoom levels below basezoom (default 2.5). @@ -488,12 +494,6 @@ The options are: * `-j` *filter* or `--feature-filter`=*filter*: Check features against a per-layer filter (as defined in the [Mapbox GL Style Specification](https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter)) and only include those that match. Any features in layers that have no filter specified will be passed through. Filters for the layer `"*"` apply to all layers. * `-J` *filter-file* or `--feature-filter-file`=*filter-file*: Like `-j`, but read the filter from a file. -Example: to find the Natural Earth countries with low `scalerank` but high `LABELRANK`: - -``` -tile-join -o filtered.mbtiles -j '{ "ne_10m_admin_0_countries": [ "all", [ "<", "scalerank", 3 ], [ ">", "LABELRANK", 5 ] ] }' ne_10m_admin_0_countries.mbtiles -``` - ### Setting or disabling tile size limits * `-pk` or `--no-tile-size-limit`: Don't skip tiles larger than 500K. diff --git a/man/tippecanoe.1 b/man/tippecanoe.1 index d2706bcc..75dc84bc 100644 --- a/man/tippecanoe.1 +++ b/man/tippecanoe.1 @@ -183,6 +183,14 @@ If the type is \fB\fCint\fR and the original attribute was floating\-point, it i .IP \(bu 2 \fB\fC\-J\fR \fIfilter\-file\fP or \fB\fC\-\-feature\-filter\-file\fR=\fIfilter\-file\fP: Like \fB\fC\-j\fR, but read the filter from a file. .RE +.PP +Example: to find the Natural Earth countries with low \fB\fCscalerank\fR but high \fB\fCLABELRANK\fR: +.PP +.RS +.nf +tile\-join \-o filtered.mbtiles \-j '{ "ne_10m_admin_0_countries": [ "all", [ "<", "scalerank", 3 ], [ ">", "LABELRANK", 5 ] ] }' ne_10m_admin_0_countries.mbtiles +.fi +.RE .SS Dropping a fixed fraction of features by zoom level .RS .IP \(bu 2 @@ -577,14 +585,6 @@ The options are: .IP \(bu 2 \fB\fC\-J\fR \fIfilter\-file\fP or \fB\fC\-\-feature\-filter\-file\fR=\fIfilter\-file\fP: Like \fB\fC\-j\fR, but read the filter from a file. .RE -.PP -Example: to find the Natural Earth countries with low \fB\fCscalerank\fR but high \fB\fCLABELRANK\fR: -.PP -.RS -.nf -tile\-join \-o filtered.mbtiles \-j '{ "ne_10m_admin_0_countries": [ "all", [ "<", "scalerank", 3 ], [ ">", "LABELRANK", 5 ] ] }' ne_10m_admin_0_countries.mbtiles -.fi -.RE .SS Setting or disabling tile size limits .RS .IP \(bu 2 diff --git a/tests/feature-filter/out/filtered.json b/tests/feature-filter/out/filtered.json new file mode 100644 index 00000000..72e5cfe3 --- /dev/null +++ b/tests/feature-filter/out/filtered.json @@ -0,0 +1,520 @@ +{ "type": "FeatureCollection", "properties": { +"bounds": "-180.000000,-85.051129,180.000000,85.051129", +"center": "0.000000,0.000000,0", +"description": "tests/feature-filter/out/all.mbtiles", +"format": "pbf", +"json": "{\"vector_layers\": [ { \"id\": \"layer1359089124\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1549998271\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer1675768827\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer1780490201\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2208582832\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2275670193\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer2333216076\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer262236988\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3045031255\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"layer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer3115744778\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3425958478\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3603116915\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4070554881\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4097977117\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"layer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"layer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"layer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1359089124\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1392333553\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1479822166\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1510660139\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1549998271\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1619469362\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer1675768827\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer1948775714\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer1991184237\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer220442869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2275670193\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} }, { \"id\": \"notlayer2333214707\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer253198869\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer2596070344\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2624681884\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2681700979\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer2850085303\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer2925029377\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3048837612\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer328238911\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer3425959847\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3444677016\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer3603115546\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer3835447578\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4018549566\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4079511021\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer4098096220\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4113007703\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer442294443\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"String\", \"rule\": \"String\"} }, { \"id\": \"notlayer464719784\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer4650955\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer584721662\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"foo\": \"Mixed\", \"rule\": \"String\"} }, { \"id\": \"notlayer827905613\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"id\": \"Number\", \"rule\": \"String\"} }, { \"id\": \"notlayer938200568\", \"description\": \"\", \"minzoom\": 0, \"maxzoom\": 0, \"fields\": {\"rule\": \"String\"} } ],\"tilestats\": {\"layerCount\": 69,\"layers\": [{\"layer\": \"layer1359089124\",\"count\": 2,\"geometry\": \"LineString\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"type: 2, [\\\"in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\",\"type: 3, [\\\"in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"layer1392333553\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"-1\",\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer1479822166\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1549998271\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"type: 1, [\\\"!=\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"layer1675768827\",\"count\": 1,\"geometry\": \"LineString\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"type: 2, [\\\"==\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"layer1780490201\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"!=\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {}, [\\\"!=\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!=\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer1948775714\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer1991184237\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2208582832\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\"]\"]}]},{\"layer\": \"layer2275670193\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"type: 1, [\\\"!in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"layer2333216076\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer2596070344\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"-1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer262236988\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"layer2624681884\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [-1],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer2681700979\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer2850085303\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer2925029377\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 3}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer3045031255\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"mixed\",\"values\": [\"0\",0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", null]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"layer3048837612\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3115744778\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"type: 1, [\\\"in\\\", \\\"$type\\\", \\\"Polygon\\\", \\\"LineString\\\", \\\"Point\\\"]\",\"type: 2, [\\\"in\\\", \\\"$type\\\", \\\"Polygon\\\", \\\"LineString\\\", \\\"Point\\\"]\",\"type: 3, [\\\"in\\\", \\\"$type\\\", \\\"Polygon\\\", \\\"LineString\\\", \\\"Point\\\"]\"]}]},{\"layer\": \"layer328238911\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer3425958478\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"layer3444677016\",\"count\": 3,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 3,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer3603116915\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer3835447578\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"1\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer4018549566\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4070554881\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"layer4079511021\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [-1,0],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer4097977117\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\"]\"]}]},{\"layer\": \"layer4113007703\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", 0]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"layer442294443\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"layer464719784\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", 0, 1]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"layer4650955\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"string\",\"values\": [\"0\",\"1\"]},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"layer827905613\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"\\\"id\\\": 1234, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"layer938200568\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 0}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": 1}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": false}, [\\\"has\\\", \\\"foo\\\"]\",\"\\\"properties\\\": {\\\"foo\\\": true}, [\\\"has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1359089124\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not type: 1, [\\\"in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"notlayer1392333553\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [-1,0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer1479822166\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1510660139\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"in\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer1549998271\",\"count\": 1,\"geometry\": \"LineString\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not type: 2, [\\\"!=\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"notlayer1619469362\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer1675768827\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not type: 1, [\\\"==\\\", \\\"$type\\\", \\\"LineString\\\"]\"]}]},{\"layer\": \"notlayer1948775714\",\"count\": 6,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 6,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer1991184237\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,1,false],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"!has\\\", \\\"foo\\\"]\"]}]},{\"layer\": \"notlayer220442869\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 5,\"type\": \"mixed\",\"values\": [\"0\",0,1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"==\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {}, [\\\"==\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer2275670193\",\"count\": 2,\"geometry\": \"LineString\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not type: 2, [\\\"!in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\",\"not type: 3, [\\\"!in\\\", \\\"$type\\\", \\\"LineString\\\", \\\"Polygon\\\"]\"]}]},{\"layer\": \"notlayer2333214707\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"all\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer253198869\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 0], [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer2596070344\",\"count\": 8,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [-1,\"0\",0,\"1\",1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2624681884\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",0,\"1\",1,false,true],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer2681700979\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {}, [\\\"in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer2850085303\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"baz\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"baz\\\"}, [\\\"==\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer2925029377\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 2,\"type\": \"number\",\"values\": [0,1],\"min\": 0,\"max\": 1},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"!in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer3048837612\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [0],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"!in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer328238911\",\"count\": 4,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 3,\"type\": \"mixed\",\"values\": [\"0\",false,true]},{\"attribute\": \"rule\",\"count\": 4,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer3425959847\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"none\\\", [\\\"==\\\", \\\"foo\\\", 1]]\"]}]},{\"layer\": \"notlayer3444677016\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"0\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"!in\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer3603115546\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\", [\\\"==\\\", \\\"foo\\\", 0]]\"]}]},{\"layer\": \"notlayer3835447578\",\"count\": 8,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer4018549566\",\"count\": 9,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 7,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",0,\"1\",false,true],\"min\": -1,\"max\": 0},{\"attribute\": \"rule\",\"count\": 9,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4079511021\",\"count\": 8,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",\"0\",\"1\",1,false,true],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"<=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\"<=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer4098096220\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [1],\"min\": 1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\"any\\\"]\"]}]},{\"layer\": \"notlayer4113007703\",\"count\": 8,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,\"0\",\"1\",false,true],\"min\": -1,\"max\": -1},{\"attribute\": \"rule\",\"count\": 8,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"1\\\"}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", 0]\",\"not \\\"properties\\\": {}, [\\\">=\\\", \\\"foo\\\", 0]\"]}]},{\"layer\": \"notlayer442294443\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"string\",\"values\": [\"bar\"]},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"bar\\\"}, [\\\"!=\\\", \\\"foo\\\", \\\"bar\\\"]\"]}]},{\"layer\": \"notlayer464719784\",\"count\": 1,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 1,\"type\": \"number\",\"values\": [3],\"min\": 3,\"max\": 3},{\"attribute\": \"rule\",\"count\": 1,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": 3}, [\\\"in\\\", \\\"foo\\\", 0, 1]\"]}]},{\"layer\": \"notlayer4650955\",\"count\": 7,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 6,\"type\": \"mixed\",\"values\": [\"-1\",-1,0,1,false,true],\"min\": -1,\"max\": 1},{\"attribute\": \"rule\",\"count\": 7,\"type\": \"string\",\"values\": [\"not \\\"properties\\\": {\\\"foo\\\": \\\"-1\\\"}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": -1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": 1}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": null}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\">=\\\", \\\"foo\\\", \\\"0\\\"]\"]}]},{\"layer\": \"notlayer584721662\",\"count\": 5,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"foo\",\"count\": 4,\"type\": \"mixed\",\"values\": [\"0\",0,false,true],\"min\": 0,\"max\": 0},{\"attribute\": \"rule\",\"count\": 5,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": \\\"0\\\"}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": 0}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": false}, [\\\"in\\\", \\\"foo\\\", null]\",\"not \\\"properties\\\": {\\\"foo\\\": true}, [\\\"in\\\", \\\"foo\\\", null]\"]}]},{\"layer\": \"notlayer827905613\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 2,\"attributes\": [{\"attribute\": \"id\",\"count\": 1,\"type\": \"number\",\"values\": [1234],\"min\": 1234,\"max\": 1234},{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"not \\\"id\\\": \\\"1234\\\", [\\\"==\\\", \\\"$id\\\", 1234]\",\"not \\\"properties\\\": {\\\"id\\\": 1234}, [\\\"==\\\", \\\"$id\\\", 1234]\"]}]},{\"layer\": \"notlayer938200568\",\"count\": 2,\"geometry\": \"Point\",\"attributeCount\": 1,\"attributes\": [{\"attribute\": \"rule\",\"count\": 2,\"type\": \"string\",\"values\": [\"\\\"properties\\\": {\\\"foo\\\": null}, [\\\"has\\\", \\\"foo\\\"]\",\"not \\\"properties\\\": {}, [\\\"has\\\", \\\"foo\\\"]\"]}]}]}}", +"maxzoom": "0", +"minzoom": "0", +"name": "tests/feature-filter/out/all.mbtiles", +"type": "overlay", +"version": "2" +}, "features": [ +{ "type": "FeatureCollection", "properties": { "zoom": 0, "x": 0, "y": 0 }, "features": [ +{ "type": "FeatureCollection", "properties": { "layer": "layer1359089124", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 2, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +, +{ "type": "Feature", "properties": { "rule": "type: 3, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1392333553", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1479822166", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1549998271", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 1, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1675768827", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 2, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1780490201", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ -100.019531, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "\"properties\": {\"foo\": true}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "\"properties\": {\"foo\": false}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!=\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1948775714", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer1991184237", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ -100.019531, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2208582832", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2275670193", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 1, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2333216076", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2596070344", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "-1", "rule": "\"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer262236988", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"!in\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2624681884", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2681700979", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2850085303", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "bar", "rule": "\"properties\": {\"foo\": \"bar\"}, [\"==\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer2925029377", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 3, "rule": "\"properties\": {\"foo\": 3}, [\"!in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3045031255", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"!in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ -100.019531, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3048837612", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3115744778", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "type: 2, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +, +{ "type": "Feature", "properties": { "rule": "type: 3, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] ] } } +, +{ "type": "Feature", "properties": { "rule": "type: 1, [\"in\", \"$type\", \"Polygon\", \"LineString\", \"Point\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer328238911", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3425958478", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3444677016", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "\"properties\": {}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3603116915", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer3835447578", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4018549566", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4070554881", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4079511021", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": -1, "rule": "\"properties\": {\"foo\": -1}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4097977117", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"all\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4113007703", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer442294443", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "baz", "rule": "\"properties\": {\"foo\": \"baz\"}, [\"!=\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer464719784", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer4650955", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "1", "rule": "\"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer827905613", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "id": 1234, "properties": { "rule": "\"id\": 1234, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "layer938200568", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "\"properties\": {\"foo\": 0}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "\"properties\": {\"foo\": 1}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "\"properties\": {\"foo\": \"0\"}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "\"properties\": {\"foo\": true}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "\"properties\": {\"foo\": false}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1359089124", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 1, [\"in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1392333553", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1479822166", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1510660139", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"in\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1549998271", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 2, [\"!=\", \"$type\", \"LineString\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1619469362", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1675768827", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 1, [\"==\", \"$type\", \"LineString\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1948775714", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer1991184237", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"!has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer220442869", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ -100.019531, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"==\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2275670193", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not type: 2, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] } } +, +{ "type": "Feature", "properties": { "rule": "not type: 3, [\"!in\", \"$type\", \"LineString\", \"Polygon\"]" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.966797, 1.054628 ], [ 0.966797, 0.000000 ], [ 0.000000, 0.000000 ], [ 0.966797, 1.054628 ] ] ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2333214707", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"all\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer253198869", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 0], [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2596070344", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2624681884", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"<\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2681700979", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2850085303", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "baz", "rule": "not \"properties\": {\"foo\": \"baz\"}, [\"==\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer2925029377", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"!in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3048837612", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"!in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer328238911", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"in\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3425959847", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"none\", [\"==\", \"foo\", 1]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3444677016", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"!in\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3603115546", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\", [\"==\", \"foo\", 0]]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer3835447578", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4018549566", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\">\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4079511021", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"<=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4098096220", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\"any\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4113007703", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "1", "rule": "not \"properties\": {\"foo\": \"1\"}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\">=\", \"foo\", 0]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer442294443", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": "bar", "rule": "not \"properties\": {\"foo\": \"bar\"}, [\"!=\", \"foo\", \"bar\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer464719784", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": 3, "rule": "not \"properties\": {\"foo\": 3}, [\"in\", \"foo\", 0, 1]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer4650955", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "foo": -1, "rule": "not \"properties\": {\"foo\": -1}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 1, "rule": "not \"properties\": {\"foo\": 1}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "-1", "rule": "not \"properties\": {\"foo\": \"-1\"}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {\"foo\": null}, [\">=\", \"foo\", \"0\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer584721662", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ -100.019531, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": 0, "rule": "not \"properties\": {\"foo\": 0}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": "0", "rule": "not \"properties\": {\"foo\": \"0\"}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": true, "rule": "not \"properties\": {\"foo\": true}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "foo": false, "rule": "not \"properties\": {\"foo\": false}, [\"in\", \"foo\", null]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer827905613", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "not \"id\": \"1234\", [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "id": 1234, "rule": "not \"properties\": {\"id\": 1234}, [\"==\", \"$id\", 1234]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +, +{ "type": "FeatureCollection", "properties": { "layer": "notlayer938200568", "version": 2, "extent": 4096 }, "features": [ +{ "type": "Feature", "properties": { "rule": "\"properties\": {\"foo\": null}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ -100.019531, 0.000000 ] } } +, +{ "type": "Feature", "properties": { "rule": "not \"properties\": {}, [\"has\", \"foo\"]" }, "geometry": { "type": "Point", "coordinates": [ 0.000000, 0.000000 ] } } +] } +] } +] } diff --git a/tile-join.cpp b/tile-join.cpp index b11e8ed0..c0257102 100644 --- a/tile-join.cpp +++ b/tile-join.cpp @@ -618,15 +618,16 @@ void *join_worker(void *v) { ai->second.clear(); bool anything = false; + mvt_tile outtile; for (size_t i = 0; i < tile.layers.size(); i++) { if (tile.layers[i].features.size() > 0) { + outtile.layers.push_back(tile.layers[i]); anything = true; - break; } } if (anything) { - std::string pbf = tile.encode(); + std::string pbf = outtile.encode(); std::string compressed; if (!pC) { diff --git a/version.hpp b/version.hpp index 2345ed1b..32ce84e4 100644 --- a/version.hpp +++ b/version.hpp @@ -1,6 +1,6 @@ #ifndef VERSION_HPP #define VERSION_HPP -#define VERSION "tippecanoe v1.23.0\n" +#define VERSION "tippecanoe v1.24.0\n" #endif From c9e42752170c7c7da47b480d5e9488362d79b781 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Tue, 5 Sep 2017 14:02:43 -0700 Subject: [PATCH 17/17] Do fewer tests in the address sanitizer build --- .travis.yml | 7 +++++-- Makefile | 5 ++++- .../out/{filtered.json => filtered.json.standard} | 0 3 files changed, 9 insertions(+), 3 deletions(-) rename tests/feature-filter/out/{filtered.json => filtered.json.standard} (100%) diff --git a/.travis.yml b/.travis.yml index 89ab3d92..879837d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ matrix: # debug+leak+address-sanitizer build - os: linux compiler: clang - env: CLANG_VERSION='3.8.0' BUILDTYPE=Debug ASAN_OPTIONS=detect_leaks=1 CC="clang-3.8" CXX="clang++-3.8" CXXFLAGS="-fsanitize=address" CFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address" + env: CLANG_VERSION='3.8.0' BUILDTYPE=Debug ASAN_OPTIONS=detect_leaks=1 CC="clang-3.8" CXX="clang++-3.8" CXXFLAGS="-fsanitize=address" CFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address" FEWER=true addons: apt: sources: ['ubuntu-toolchain-r-test' ] @@ -71,7 +71,10 @@ install: script: - npm install geobuf - - BUILDTYPE=${BUILDTYPE} make test geobuf-test + - if [ -n "${FEWER}" ]; then + BUILDTYPE=${BUILDTYPE} make fewer-tests; else + BUILDTYPE=${BUILDTYPE} make test geobuf-test; + fi - if [ -n "${COVERAGE}" ]; then /usr/bin/llvm-cov-3.5 -lp *.o; pip install --user cpp-coveralls; diff --git a/Makefile b/Makefile index b265fa59..b4b2773d 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,9 @@ test: tippecanoe tippecanoe-decode $(addsuffix .check,$(TESTS)) raw-tiles-test p geobuf-test: geojson2nd $(addsuffix .checkbuf,$(TESTS)) +# For quicker address sanitizer build, hope that regular JSON parsing is tested enough by parallel and join tests +fewer-tests: tippecanoe tippecanoe-decode geobuf-test raw-tiles-test parallel-test pbf-test join-test enumerate-test decode-test join-filter-test unit + # XXX Use proper makefile rules instead of a for loop %.json.checkbuf: for i in $(wildcard $(subst $(SPACE),/,$(wordlist 1,2,$(subst /, ,$@)))/*.json); do ./geojson2nd -w $$i | ./node_modules/geobuf/bin/json2geobuf > $$i.geobuf; done @@ -217,7 +220,7 @@ join-filter-test: ./tippecanoe -z0 -f -o tests/feature-filter/out/all.mbtiles tests/feature-filter/in.json ./tile-join -J tests/feature-filter/filter -f -o tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles ./tippecanoe-decode tests/feature-filter/out/filtered.mbtiles > tests/feature-filter/out/filtered.json.check - cmp tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.json + cmp tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.json.standard rm -f tests/feature-filter/out/filtered.json.check tests/feature-filter/out/filtered.mbtiles tests/feature-filter/out/all.mbtiles # Use this target to regenerate the standards that the tests are compared against diff --git a/tests/feature-filter/out/filtered.json b/tests/feature-filter/out/filtered.json.standard similarity index 100% rename from tests/feature-filter/out/filtered.json rename to tests/feature-filter/out/filtered.json.standard