mapbox中filter表达式

  • 起初让我研究的原因使一个报错:

layers.TRSA.filter[2][1][2]: string, number, or boolean expected, array found

 我很确定筛选条件没问题,那么为何报错呢?百度,找到原因:

https://docs.mapbox.com/style-spec/reference/other/#other-filter

警告
在样式规范的早期版本中,筛选器是使用下面记录的已弃用语法定义的。尽管使用此语法定义的筛选器将继续工作,但我们建议改用更灵活的表达式语法。表达式语法和下面已弃用的语法不能在单个筛选器定义中混合使用

 回到代码中看看我是如何混用了:

["all", 
["!=","ac","EUR"],
["==","0", ["get", "res"]],
["==", 'X', ["get","t"]]
]

 其中 [ "==", "0", ["get", "res"] ]  是新表达式的语法(expression语法

转为旧语法(基于属性的filter语法(property-based filter syntax))为:[  "==","res","0" ]

下面看看官方文档
1.1 property-based filter syntax 官方文档

https://docs.mapbox.com/style-spec/reference/other/#other-filter

存在过滤器

["has", key] feature[key]存在

["!has", key] feature[key]不存在

比较过滤器

["==", key, value]平等:feature[key] = value

["!=", key, value]不平等:≠feature[key]value

[">", key, value]大于:feature[key] > value

[">=", key, value]大于或等于:≥feature[key]value

["<", key, value]小于:feature[key] < value

["<=", key, value]小于或等于:≤feature[key]value

设置成员资格筛选器

["in", key, v0, ..., vn]设置包含: ∈ {, ...,feature[key]v0vn}

["!in", key, v0, ..., vn]设置排除: ∉ { , ...,feature[key]v0vn}

组合过滤器

["all", f0, ..., fn]逻辑:∧......∧ANDf0fn

["any", f0, ..., fn]逻辑:∨......∨ORf0fn

["none", f0, ..., fn]逻辑 : ¬ ∧ ...∧ ¬NORf0fn

A 必须是标识功能属性的字符串,或者是以下特殊键之一:key

  • "$type":要素类型。此键可用于,, ,和运算符。可能的值为 、 和 。"==""!=""in""!in""Point""LineString""Polygon"
  • "$id":要素标识符。此密钥可用于,, , , ,和运算符。"==""!=""has""!has""in""!in"

A(对于集合运算符,和 、...)必须是字符串、数字或布尔值,以便与属性值进行比较。valuev0vn

设置成员资格筛选器是一种紧凑而有效的方法,用于测试字段是否与多个值中的任何一个匹配。

比较和设置成员资格筛选器实现严格类型的比较;例如,以下所有计算结果均为 false:、 、 。0 &lt; "1"2 == "2""true" in [true, false]

、 和 filter 运算符用于创建复合过滤器。值 ...,本身必须是筛选器表达式。"all""any""none"f0fn

["==", "$type", "LineString"]

此过滤器要求每个要素的属性等于“street_major”、“street_minor”或“street_limited”。class

["in", "class", "street_major", "street_minor", "street_limited"]</code>

组合过滤器 “all” 采用其后面的其他三个过滤器,并要求它们都为 true 才能包含要素:要素必须等于 “street_limited”,其必须大于或等于 3,并且其类型不能为 Polygon。您可以将组合过滤器更改为“any”,以允许包含符合这些条件中的任何一个的要素 - 为面但具有不同值的要素,依此类推。classadmin_levelclass

["all",["==", "class", "street_limited"],[">=", "admin_level", 3],["!in", "$type", "Polygon"]
]
1.2 Expressions语法

https://docs.mapbox.com/style-spec/reference/expressions/#types-array

表达式

您可以将任何布局属性、绘画属性或过滤器的值定义为表达式

表达式定义一个公式,用于使用下面描述的运算符计算属性的值。Mapbox GL 提供的表达式运算符包括:

  • 用于对数值执行算术和其他运算的数学运算符
  • 用于操作布尔值和做出条件决策的逻辑运算符
  • 用于操作字符串的字符串运算符
  • 数据运算符,用于提供对源要素属性的访问
  • 相机操作员,用于提供对定义当前地图视图的参数的访问

表达式表示为 JSON 数组。表达式数组的第一个元素是命名表达式运算符的字符串,例如“*”或“case”。后面的元素(如果有)是表达式的参数。每个参数要么是文本值(字符串、数字、布尔值或),要么是另一个表达式数组。null

[expression_name, argument_0, argument_1, ...]

数据表达式

数据表达式是访问要素数据的任何表达式,即使用数据运算符之一的任何表达式:get、has、id、geometry-type、properties 或 feature-state。数据表达式允许要素的属性或状态来确定其外观。它们可用于区分同一图层中的要素并创建数据可视化。

{"circle-color": ["rgb",// red is higher when feature.properties.temperature is higher["get", "temperature"],// green is always zero0,// blue is higher when feature.properties.temperature is lower["-", 100, ["get", "temperature"]]]
}

此示例使用 get 运算符获取每个功能的值。该值用于计算 rgb 运算符的参数,根据其红色、绿色和蓝色分量定义颜色。temperature

允许将数据表达式用作筛选器属性的值,以及大多数绘制和布局属性的值。但是,某些绘制和布局属性尚不支持数据表达式。支持级别由每个属性的“SDK 支持”表的“数据驱动样式”行指示。仅允许在绘制属性上使用带有特征状态运算符的数据表达式。

类型系统

表达式的输入参数及其结果值使用与样式规范的其余部分相同的一组类型:布尔值、字符串、数字、颜色和这些类型的数组。此外,表达式是类型安全的:表达式的每次使用都具有已知的结果类型和所需的参数类型,并且 SDK 会验证表达式的结果类型是否适合使用它的上下文。例如,filter 属性中表达式的结果类型必须是布尔值,并且 + 运算符的参数必须是数字。

使用要素数据时,SDK 通常不会提前知道要素属性值的类型。为了保持类型安全,在计算数据表达式时,SDK 将检查属性值是否适合上下文。例如,如果将表达式用于 circle-color 属性,则 SDK 将验证每个要素的值是否为标识有效颜色的字符串。如果此检查失败,将以特定于 SDK 的方式(通常是日志消息)指示错误,并将改用该属性的默认值。["get", "feature-color"]feature-color

在大多数情况下,此验证将在需要的地方自动进行。但是,在某些情况下,SDK 可能无法从周围上下文中自动确定数据表达式的预期结果类型。例如,不清楚表达式是尝试比较字符串还是数字。在这种情况下,可以使用类型断言表达式运算符之一来指示数据表达式的预期类型: 。类型断言检查要素数据是否与数据表达式的预期类型匹配。如果此检查失败,则会产生错误,并导致整个表达式回退到所定义属性的默认值。断言运算符为数组、布尔值、数字和字符串。["&lt;", ["get", "a"], ["get", "b"]]["&lt;", ["number", ["get", "a"]], ["number", ["get", "b"]]]

表达式仅执行一种隐式类型转换:在需要颜色的上下文中使用的数据表达式会将颜色的字符串表示形式转换为颜色值。在所有其他情况下,如果要在类型之间进行转换,则必须使用类型转换表达式运算符之一:to-boolean、to-number、to-string 或 to-color。例如,如果具有以字符串格式存储数值的 feature 属性,并且希望将这些值用作数字而不是字符串,则可以使用诸如 .["to-number", ["get", "property-name"]]

如果表达式接受数组参数,并且用户提供数组文本,则该数组必须包装在表达式中(请参阅下面的示例)。当 GL-JS 遇到 style-spec 属性值中的数组时,它会假定该数组是一个表达式并尝试解析它;该库无法区分验证失败的表达式和数组文本,除非开发人员在运算符中明确了这种区别。如果数组是从子表达式返回的,则不需要运算符,例如 。literalliteralliteral["in", 1, ["get", "myArrayProp"]]

// will throw an error
{"circle-color": ["in", 1, [1, 2, 3]]
}// will work as expected
{"circle-color": ["in", 1, ["literal", [1, 2, 3]]]
}

  • ps:Expressions语法在Mapbox Style Spec (样式规范)各属性中通用
{  "filter": ["all", ["all", ["!=", ["get","ac"],"EUR"],["==","0", ["get","res"]],["==", 'X', ["get","t"]]],["any", ["<", -1, ["literal",0]],// [//     ">=", 'll_raw', -1// ], //旧规范[">=", -1, ["get","ll_raw"]] //新规范 表达式  新旧不能混用]],paint: {'text-color': '#fff','icon-color': [//表达式'case',['==', ['get', 'type'], 'B'],'#1E90FF','#FFA500'],},
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/2693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WSL报错】执行:wsl --list --online;错误:0x80072ee7

【WSL报错】执行:wsl --list --online&#xff1b;错误:0x80072ee7 问题情况解决方法详细过程 问题情况 C:\Users\17569>wsl --list --online 错误: 0x80072ee7 解决方法 开系统代理&#xff0c;到外网即可修复&#xff01;&#xff01;&#xff01;&#xff01;&#x…

电商市场已饱和,各大平台都在卷价格?那是你不了解视频号小店

大家好&#xff0c;我是电商笨笨熊 现在做电商除了疯狂内卷就是疯狂内卷&#xff1b; 各大平台都是内卷价格&#xff0c;嘴上说着不想成为拼多多一样的平台&#xff0c;实际做的却是低价再低价&#xff0c;都希望能通过低价吸引用户提高转化&#xff1b; 因此现在很多玩家对…

windows驱动系列-概述

之前一直长期做windows驱动开发&#xff0c;但是一直将这些技术知识点进行整理和总结&#xff0c;最近又开始做一套新的驱动&#xff0c;于是就打算趁这个机会&#xff0c;将一些windows驱动开发的技术知识系统性的整理出来。 目录如下: windows驱动开发知识-设计目标 windo…

第十四章大数据和数据科学4分

14.1 引言 14.1.3 科学理念 1.数据科学 数据科学将数据挖掘、统计分析和机器学习与数据集成整合&#xff0c;结合数据建模能力&#xff0c;去构建预测模型、探索数据内容模式。 数据科学依赖于&#xff1a; 1&#xff09;丰富的数据源。具有能够展示隐藏在组织或客户行为中不…

jpa分页插件对象Pageable出现了错误异常如何解决?

jpa分页插件对象Pageable出现了错误异常如何解决&#xff1f;&#xff01; 一般来说&#xff0c;遇到这种的错误异常情况&#xff0c;通常情况 下&#xff0c;都是因为程序员把传递的分页页码数字写错了。 正常情况下&#xff0c;分页页码起始数字应该是0&#xff1b;而不是1…

区块链钱包开发——专业区块链开发

随着区块链技术的发展&#xff0c;钱包开发成为了一项至关重要的任务。本文将探讨区块链钱包开发的重要性&#xff0c;分析当前面临的挑战&#xff0c;并展望未来的发展趋势。 一、区块链钱包概述 区块链钱包是一种用于存储和管理数字货币的软件工具。它为用户提供了一个安全的…

揭开ChatGPT面纱(2):OpenAI主类源码概览

文章目录 〇、使用OpenAI的两个步骤一、初始化方法__init__()1.源码2.参数解析 二、提供的接口1.源码2.接口说明主要接口说明 OpenAI版本1.6.1 〇、使用OpenAI的两个步骤 在上一篇博客中&#xff0c;我实现并运行了一个OpenAI的demo&#xff0c;我们可以发现&#xff0c;想要使…

Unity的旋转实现一些方法总结(案例:通过输入,玩家进行旋转移动)

目录 1. Transform.Rotate 方法 使用 2. Transform.rotation 或 Transform.localRotation 属性与四元数 使用方式&#xff1a; 小案例 &#xff1a;目标旋转角度计算&#xff1a;targetRotation&#xff08;Quaternion类型&#xff09; 玩家发现敌人位置&#xff0c;玩家…

ubuntu20 中设置桌面背景任务

1. 下载conky 使用 Conky 在 Ubuntu 中显示信息&#xff0c;例如你的阅读计划&#xff0c;可以分几个步骤来完成。Conky 是一款灵活的轻量级系统监视器&#xff0c;能够在桌面上显示各种信息。以下是基本的设置步骤&#xff1a; 安装 Conky 首先&#xff0c;你需要在 Ubuntu…

js面试---闭包、作用域及作用域链、执行上下文

1、什么是闭包 闭包是指有权访问另一个函数作用域中变量的函数&#xff0c;创建闭包的最常见的方式就是在一个函数内创建另一个函数&#xff0c;创建的函数可以访问到当前函数的局部变量。 闭包的作用&#xff1a; a、使我们在函数外部能够访问到函数内部的变量。通过使用闭包…

道可云元宇宙每日资讯|济南起步区:加快建设元宇宙政务大厅

道可云元宇宙每日简报&#xff08;2024年4月23日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 济南起步区&#xff1a;加快建设元宇宙政务大厅 济南起步区以“元宇宙”赋能智慧政务&#xff0c;集成政务服务智能办理、数字人智能引导交互服务、沉浸式漫游体验、…

【学习记录】autoware标定相机与激光雷达外参

一、autoware选择 这里踩了好几个坑&#xff0c;首先autoware作为一个无人驾驶知名框架&#xff0c;其内部实际上是有两套标定的东西的&#xff0c;这一点绝大多数博客没有提到。其中最常用的是一个叫标定工具箱的东西&#xff0c;这个ros包已经在1.10往后的版本中被删掉了&am…

hive SQL谓词下推

Sql 优化&#xff1a;谓词下推&#xff08;PPD 定义 谓词下推的概念其实出现在sql中&#xff0c;在关联查询时(join&#xff0c;left join ,right join),因为涉及两个大表之间的关联(特别是在hive)造成资源消耗会比较大&#xff0c; 因为建议在join之前先将两个表进行过滤(hive…

Android 获取sha1的快速有效的简单方法

第一步 下载apk 点击下载&#xff08;https://download.csdn.net/download/xiaohui2015/9751428&#xff09; 第二步 试用Windows键R键打开命令行 输入 adb install把apk用鼠标左键拖动到命令行自动输入路径 回车安装 第三步 打开apk 选择你要查看的apk&#xff0c;一键…

Spring 1、初识Spring

初识Spring 了解Spring家族了解Spring发展史Spring Framework系统架构学习路线 了解Spring家族 官网spring.io Spring形成了一种开发的生态圈&#xff0c;Spring提供了若干个项目&#xff0c;每个项目用于完成特定的功能。 Spring Framework&#xff08;最基础的东西&#x…

qemu参考

手把手教你搭建ARM64 QEMU环境 - 知乎

SpringCloud Alibaba--nacos配置中心

目录 一.基础介绍 1.1概念 1.2 功能 二.实现 2.1 依赖 2.2 新建配置文件 2.3 克隆 2.4 配置bootstap.yml文件 三.测试 一.基础介绍 1.1概念 在微服务架构中&#xff0c;配置中心就是统一管理各个微服务配置文件的服务。把传统的单体jar包拆分成多个微服务后&#xf…

NameError: name ‘_mysql‘ is not defined 安装mysqlclient报错

安装mysqlclient报错 The error message you’re seeing indicates that the pkg-config utility is not installed on your system, or it is not able to find the necessary configuration for mysqlclient. pkg-config is used to determine the compilation options for …

跨越未知,拥抱挑战——新征程

在浩瀚的IT领域里&#xff0c;每一位开发工程师都如同一位探险家&#xff0c;不断地探索、挑战和成长。作为一名新入职的Java开发工程师&#xff0c;我面临着全新的技术栈和业务领域&#xff0c;这是一次跨越未知的征程&#xff0c;也是一次自我提升的机会。 新入职 初入公司…

Android活动之Intent

Intent Intent是Android程序中各组件之间进行交互的一种重要方式&#xff0c;它不仅可以指明当前组件想要执行的动作&#xff0c;还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景&#xff0c; 显示intent 第一个参数Context要求提供…