如何在 NSExpression 中组合 Mapbox mgl_interpolate 和 MGL_Match?
How do I combine Mapbox mgl_interpolate and MGL_Match in an NSExpression?
我很难弄清楚如何使用 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_MATCH 的 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]])
是的,您可以在插值表达式中引用 NSExpressions 数组,但是,您需要将 MGL_MATCH 表达式中的字符串格式化程序 %@
更改为浮点数说明符 %f
如以下代码所示:
let lineWidthStops = [
NSExpression(format: "MGL_MATCH(index, 10, %f, 5, %f, %f)", 1.5, 1.0, 0.5),
NSExpression(format: "MGL_MATCH(index, 10, %f, 5, %f, %f)", 5.0, 1.5, 1.0)
]
我很难弄清楚如何使用 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_MATCH 的 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]])
是的,您可以在插值表达式中引用 NSExpressions 数组,但是,您需要将 MGL_MATCH 表达式中的字符串格式化程序 %@
更改为浮点数说明符 %f
如以下代码所示:
let lineWidthStops = [
NSExpression(format: "MGL_MATCH(index, 10, %f, 5, %f, %f)", 1.5, 1.0, 0.5),
NSExpression(format: "MGL_MATCH(index, 10, %f, 5, %f, %f)", 5.0, 1.5, 1.0)
]