Mapbox 如何在N表达式中组合贴图盒mgl_插值和mgl_匹配?

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

我很难弄清楚如何将匹配应用于轮廓索引值以及使用iOS中的Swift设置不同线宽的不同缩放级别,具体取决于索引值。从缩放级别9开始,索引值为10的行表示为1.5,索引值为5的行表示为1,其他所有行默认为0.5。以下是JSON等价物:

[
    "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)
]