MapboxMap之Expression(⼀)
系列⽬录
Types
Lookup
Decision
Math
String
Color
Zoom
Heatmap
Feature data
Variable binding
Ramps, scales, curves
本篇⽬录
前⾔
Expression在mapbox中使⽤⾮常⼴泛,我们可以借助它⾼度⾃定义Layer属性的变化。此系列就介绍了Expression的⼀些常见使⽤⽅式与场景。
⼀、Expression是什么?
Expression是可以将任何布局属性,绘画属性或过滤器的值指定为表达式。
表达式定义了⼀个公式,⽤于使⽤以下描述的运算符来计算属性的值。
⼆、Mapbox提供的Expression运算符集有哪些?
1.元素
Mathematical operators : ⽤于对数值执⾏算术和其他运算的数学运算符
Logical operators : 逻辑运算符⽤于操作布尔值和进⾏条件决策的
String operators: ⽤于操作字符串的字符串运算符
Data operators: 数据运算符,提供对源要素属性的访问权限
Camera operators: 相机运算符,提供对定义当前地图视图的参数的访问权限
2.表达式表⽰为JSON数组
表达式数组的第⼀个元素是命名表达式运算符的字符串,例如“*”或“case”。后续元素(如果有)是表达式的参数。
每个参数都是⽂字值(字符串,数字,布尔值或null)或另⼀个表达式数组。
数据表达式(Data expression):数据表达式是访问要素数据的任何表达式-也就是说,使⽤数据运算符之⼀的任何表达式:
get,has,id,geometry-type, or properties。 数据表达式允许功能的属性确定其外观。 它们可⽤于区分同⼀层中的要素并创建数据可视化。
摄影机表达式(Camera expression):摄影机表达式是使⽤缩放运算符的任何表达式。 这些表达式使图层的外观随地图的缩放级别⽽变化。 相机表达式可⽤于创建深度外观并控制数据密度。
组成(Composition): 单个表达式可以混合使⽤数据运算符,相机运算符和其他运算符。 这种复合表达式允许通过缩放级别和单个要素属性的组合来确定图层的外观。
三、Expression按Types分类
1.通过以下⽅法是对我们放⼊的值包装成Expression对象。
Create a literal xxx expression
Expression literal(@NonNull Number number)
Expression literal(@NonNull String string)
Expression literal(@NonNull boolean bool)
Expression literal(@NonNull Object object)
Expression literal(@NonNull Object[] array)
2.试图将Expression转为XXX类型
* 将输⼊值转换为字符串。如果输⼊为空,则结果为""。
* 如果输⼊为布尔值,则结果为"true"或"false"。
* 如果输⼊是数字,则将其转换为ECMAScript语⾔规范的"NumberToString"算法指定的字符串。
* 如果输⼊是颜⾊,则将其转换为格式为"rgba(r,g,b,a)"的字符串
(其中r,g和b是从0到255的数字,范围是从0到255的数字和a的范围是0到1)。
* 否则,输⼊将转换为ECMAScript语⾔规范的JSON.stringify函数指定的格式的字符串。
* <p>
*  ["to-string", value]: string
*/
Expression toString(@NonNull Expression input)
/**
* to-number
* 如果可能,将输⼊值转换为数字。如果输⼊为null或false,则结果为0。如果输⼊为true,则结果为1。 * 如果输⼊为字符串,则将其转换为由“应⽤于字符串类型的ToNumber”算法指定的数字。
* ECMAScript语⾔规范。如果提供了多个值,则会依次评估每个值,直到获得第⼀个成功的转换为⽌。 * 如果没有任何输⼊可以转换,则该表达式为错误。
* <p>
* ["to-number", value, fallback: value, fallback: value, ...]: number
*/
/**
* to-boolean
* 将输⼊值转换为布尔值。当输⼊为空字符串,0,false,null或NaN时,结果为false。否则是真的。
* <p>
* ["to-boolean", value]: boolean
*/
/**
* to-color
* 将输⼊值转换为颜⾊。如果提供了多个值,则会依次评估每个值,直到获得第⼀个成功的转换为⽌。* 如果没有任何输⼊可以转换,则该表达式为错误。
* <p>
* ["to-color", value, fallback: value, fallback: value, ...]: color
*/
3. 获取表达式类型
/**
* typeof
* 返回描述给定值类型的字符串。
* <p>
* ["typeof", value]: string
*/
Expression typeOf(@NonNull Expression input)
4.断⾔
* 断⾔输⼊值是⼀个字符串。如果提供了多个值,则会依次评估每个值,直到获得⼀个字符串为⽌。
* 如果所有输⼊都不是字符串,则表达式为错误。
* <p>
* ["string", value]: string
* ["string", value, fallback: value, fallback: value, ...]: string
*/
Expression string(@ input)
/**
* number
* 断⾔输⼊值是⼀个数字。如果提供多个值,则依次评估每个值,直到获得⼀个数字。如果所有输⼊都不是数字,
* 则表达式为错误。
* <p>
* ["number", value]: number
* ["number", value, fallback: value, fallback: value, ...]: number
*/
Expression number(@ input)
/**
* boolean
* 断⾔输⼊值是布尔值。如果提供了多个值,则会依次评估每个值,直到获得布尔值为⽌。如果所有输⼊都不是布尔值,  *则该表达式为错误。
* <p>
* ["boolean", value]: boolean
* ["boolean", value, fallback: value, fallback: value, ...]: boolean
*/
Expression bool(@ input)
/**
* object
* 断⾔输⼊值是⼀个对象。如果提供多个值,则依次评估每个值,直到获得⼀个对象。如果所有输⼊都不是对象,
* 则表达式为错误。
* <p>
* ["object", value]: object
* ["object", value, fallback: value, fallback: value, ...]: object
*/
Expression.object(@ input)
/**
* array
* 断⾔输⼊是⼀个数组(可以选择具有特定项⽬类型和长度的数组)。如果在计算输⼊表达式时,它不是断⾔类型,
* 则此断⾔将导致整个表达式被中⽌。
* <p>
* ["array", value]: array
* ["array", type: "string" | "number" | "boolean", value]: array<type>
* ["array", type: "string" | "number" | "boolean", N: number (literal),value]:  array<type,N>
*/
Expression array(@NonNull Expression input)
5.Format
/**
* format
* 返回⼀个格式化的字符串,⽤于在text-field属性中显⽰混合格式的⽂本。
* 输⼊可以包含字符串⽂字或表达式,包括“图像”表达式。
* 字符串后⾯可以跟随⼀个⽀持以下属性的样式覆盖对象:
* <p>
* "text-font": Overrides the font stack specified by the root layout property.
* "text-color": Overrides the color specified by the root paint property.
* "font-scale": Applies a scaling factor on text-size as specified by the root layout property.
* ["format",input_1: string | image, options_1: { "font-scale": number, "text-font": array<string>, "text-color": color }, ...,input_n: string | image, options_n: { "font-sca */
Expression format(@ formatEntries)
⽰例
下图演⽰了修改Text的颜⾊与缩放。
代码在这,可以⾃⼰修改⼀下,体验体验。
private static final String SOURCE_ID = "source-id";
private static final String LAYER_ID = "layer-id";
private static final String LAYER_TEXT = "layer-text";
private GeoJsonSource geoJsonSource;
private SymbolLayer symbolLayer;
private final List<Feature> featureList = new ArrayList<>();
private static final double LATITUDE = 39.9;
private static final double LONGITUDE = 119.6;
@Overridejson值的类型有哪些
public void onMapLoaded() {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。