Mapbox 如何在N表达式中组合贴图盒mgl_插值和mgl_匹配?
我很难弄清楚如何将匹配应用于轮廓索引值以及使用iOS中的Swift设置不同线宽的不同缩放级别,具体取决于索引值。从缩放级别9开始,索引值为10的行表示为1.5,索引值为5的行表示为1,其他所有行默认为0.5。以下是JSON等价物:Mapbox 如何在N表达式中组合贴图盒mgl_插值和mgl_匹配?,mapbox,mapbox-ios,Mapbox,Mapbox Ios,我很难弄清楚如何将匹配应用于轮廓索引值以及使用iOS中的Swift设置不同线宽的不同缩放级别,具体取决于索引值。从缩放级别9开始,索引值为10的行表示为1.5,索引值为5的行表示为1,其他所有行默认为0.5。以下是JSON等价物: [ "interpolate", ["linear"], ["zoom"], 9, [ "match", [&quo
[
"interpolate",
["linear"],
["zoom"],
9,
[
"match",
["get", "index"],
[10],
1.5,
[5],
1,
0.5
],
16,
[
"match",
["get", "index"],
[10],
3,
[5],
2,
1
]
]
我明白如果只是一个问题,所有线条的宽度都相同,我会怎么做:
layer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", [9: 1, 16: 2])
有没有办法用另一个包含MGL_匹配的NSExpression替换1和2(分别在9和16之后),例如:
let lineWidthStops = [
NSExpression(format: "MGL_MATCH(index, 10, %@, 5, %@, %@)", 1.5, 1.0, 0.5),
NSExpression(format: "MGL_MATCH(index, 10, %@, 5, %@, %@)", 3.0, 1.5, 1.0)
]
contourLayer.lineWidth = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", [9: lineWidthStops[0], 16: lineWidthStops[1]])
是的,您可以在插值表达式中引用N表达式数组,但是,您需要将MGL_MATCH表达式中的字符串格式化程序
%@
更改为浮点数说明符%f
,如下代码所示:
让线宽停止=[
N表达式(格式:“MGL_匹配(索引,10,%f,5,%f,%f)”,1.5,1.0,0.5),
N表达式(格式:“MGL_匹配(索引,10,%f,5,%f,%f)”,5.0,1.5,1.0)
]