系列文章目录
Types
Lookup
Decision
Math
String
Color
Zoom
Heatmap
Feature data
Variable binding
Ramps, scales, curves
目录
前言
在上一篇中介绍了Expression的描述符操作,本篇是将的按照 Math区分,也可以理解为一些数学运算符,在一些需要动态计算显示的情景下还是很有需要的。
Expression可以按Math分类
一、基本运算
1. 加 (sum)
/**
* 返回输入的总和。
*
* ["+", number, number, ...]: number
*/
Expression sum(@Size(min = 2) Expression... numbers)
Expression sum(@Size(min = 2) Number... numbers)
Expression subtract(@NonNull Expression number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(sum(10.0f, ln2(), pi()))
);
2. 减 (subtract)
/**
* 对于两个输入,返回从第一个输入减去第二个输入的结果。对于单个输入,返回从0减去它的结果。
*
* ["-", number, number]: number
* ["-", number]: number
*/
Expression subtract(@NonNull Number number)
Expression subtract(@NonNull Expression first, @NonNull Expression second)
Expression subtract(@NonNull Number first, @NonNull Number second)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(subtract(10.0f, pi()))
);
3.乘 (product)
/**
* 返回输入的乘积。
*
* ["*", number, number, ...]: number
*/
Expression product(@Size(min = 2) Expression... numbers)
Expression product(@Size(min = 2) Number... numbers)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(product(10.0f, 2.0f))
);
4.除 (division)
/**
*返回第一个输入除以第二个输入的浮点数的结果。
*
* ["/", number, number]: number
*/
Expression division(@NonNull Expression first, @NonNull Expression second)
Expression division(@NonNull Number first, @NonNull Number second)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(division(10.0f, 20.0f))
);
5.取余 (mod)
/**
* 返回第一个输入除以第二个输入的整数后的余数。
*
* ["%", number, number]: number
*/
Expression mod(@NonNull Expression first, @NonNull Expression second)
Expression mod(@NonNull Number first, @NonNull Number second)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(mod(10.0f, 10.0f))
);
6.幂 (pow)
/**
* 返回将第一个输入提高到第二个指定的幂的结果。
*
* ["^", number, number]: number
*/
Expression pow(@NonNull Expression first, @NonNull Expression second)
Expression pow(@NonNull Number first, @NonNull Number second)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(pow(5.0f, 2.0f))
);
二、三角函数
1.sin
/**
* 返回输入的正弦值。
*
* ["sin", number]: number
*/
Expression sin(@NonNull Expression number)
Expression sin(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(sin(90.0f))
);
2.cos
/**
* 返回输入的余弦值。
*
* ["sin", number]: number
*/
Expression cos(@NonNull Expression number)
Expression cos(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(cos(0))
);
3.tan
/**
* 返回输入的正切值。
*
* ["sin", number]: number
*/
Expression tan(@NonNull Expression number)
Expression tan(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(tan(45.0f))
);
三、反三角函数
1.asin
/**
* 返回输入的反正弦值。
*
* ["asin", number]: number
*/
Expression sin(@NonNull Expression number)
Expression sin(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(asin(90.0f))
);
2.acos
/**
* 返回输入的反余弦值。
*
* ["acos", number]: number
*/
Expression acos(@NonNull Expression number)
Expression acos(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(acos(0))
);
3.atan
/**
* 返回输入的反正切值。
*
* ["atan", number]: number
*/
Expression atan(@NonNull Expression number)
Expression atan(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(atan(90.0f))
);
四、普通函数
1.abs
/**
*返回输入的绝对值。
*
* ["abs", number]: number
*/
Expression abs(Expression expression)
Expression abs(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(abs(-3.14159265359f))
);
2.ceil
/**
*返回大于或等于输入的最小整数。
*
* ["ceil", number]: number
*/
Expression ceil(Expression expression)
Expression ceil(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(ceil(3.14159265359))
);
3.floor
/**
*返回小于或等于输入的最大整数。
*
* ["floor", number]: number
*/
Expression floor(Expression expression)
Expression floor(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(floor(pi()))
);
4.sqrt
/**
*返回输入的平方根。
*
* ["sqrt", number]: number
*/
Expression sqrt(Expression expression)
Expression sqrt(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(sqrt(25.0f))
);
5.round
/**
*将输入舍入到最接近的整数。中途值从零舍入。例如,[“ round”,-1.5]计算为-2。
*
* ["round", number]: number
*/
Expression round(Expression expression)
Expression round(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(round(3.14159265359f))
);
6.min
/**
*返回输入的最小值。
*
* ["min", number, number, ...]: number
*/
Expression min(@Size(min = 1) Expression... numbers)
Expression min(@Size(min = 1) Number... numbers)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(min(3.141, 3.14f, 3.15f))
);
7.max
/**
*返回输入的最大值。
*
* ["max", number, number, ...]: number
*/
Expression max(@Size(min = 1) Expression... numbers)
Expression max(@Size(min = 1) Number... numbers)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(max(3.141, 3.14f, 3.15f))
);
五、数学常数
1.e
/**
*返回数学常数e。
*
* ["e"]: number
*/
Expression.e()
eg:
CircleLayer circleLayer20 = new CircleLayer("layer-id", "source-id");
circleLayer20.setProperties(
circleRadius(product(literal(10.0f), e()))
);
2.pi
/**
* 返回数学常数pi。
*
* ["pi"]:number
*/
Expression.pi()
eg:
CircleLayer circleLayer21 = new CircleLayer("layer-id", "source-id");
circleLayer21.setProperties(
circleRadius(product(literal(10.0f), pi()))
);
六、对数
1.ln
/**
*返回输入的自然对数。
*
* ["ln", number]: number
*/
Expression ln(Expression number)
Expression ln(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(ln(10))
);
2.ln2
/**
* 返回数学常数ln(2)。
*
* ["ln2"]: number
*/
Expression ln2(Expression number)
Expression ln2(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(product(literal(10.0f), ln2()))
);
3.log2
/**
* 返回输入的以2为底的对数。
*
* ["log2", number]: number
*/
Expression log2(Expression number)
Expression log2(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(log2(2))
);
4.log10
/**
*返回输入的以10为底的对数。
*
* ["log10", number]: number
*/
Expression log10(Expression number)
Expression log10(@NonNull Number number)
eg:
CircleLayer circleLayer = new CircleLayer("layer-id", "source-id");
circleLayer.setProperties(
circleRadius(log10(10))
);
七、distance
/**
* 返回评估的要素和输入几何之间的最短距离(以米为单位)。
* 输入值可以是Point,MultiPoint,LineString,MultiLineString,Polygon,MultiPolygon,
Feature
* 或FeatureCollection类型的有效GeoJSON。
* 由于编码几何的精度损失,返回的距离值的精度可能会有所不同,尤其是在缩放级别13以下。
*
* ["distance", object]: number
*/
Expression distance(@NonNull GeoJson geoJson)
总结
-
实现了常用数学运算符,可以让我们进行高度自定义。