更改 Mapbox 中未聚类标记的图标颜色 IOS
Change color of Icon for un-clustered markers in Mapbox IOS
我正在尝试在 IOS 的 Mapbox 中实现集群。我想根据 MGLPointFeature 中的特定属性更改非集群 StyleLayer 的颜色。以下是单个功能的代码:
let feature = MGLPointFeature()
feature.coordinate = CLLocationCoordinate2D(latitude: site.latitude, longitude: site.longitude)
feature.attributes = ["id": site.siteId, "siteCode": site.siteCode, "risk": site.riskId]
在上面的代码片段中,我想使用此属性(“风险”:site.riskId)为使用以下代码设置的图标生成不同的颜色:
style.setImage(icon.withRenderingMode(.alwaysTemplate), forName: "icon")
let ports = MGLSymbolStyleLayer(identifier: "ports", source: source)
ports.iconImageName = NSExpression(forConstantValue: "icon")
ports.predicate = NSPredicate(format: "cluster != YES")
ports.iconAllowsOverlap = NSExpression(forConstantValue: true)
style.addLayer(ports)
以下是每个 riskId 的颜色:
let risks = [
0: Color.cellBackgroundColor,
1: UIColor.from(hexString: "B9E5D1"),
2: UIColor.from(hexString: "95E9FF"),
3: UIColor.from(hexString: "FCE2A6"),
4: UIColor.from(hexString: "FCE2A6")
]
我有一个想法,我可以使用 NSExpression 来获得这些结果作为特征属性。但是不知道如何实现它。谁能帮我完成这件事。谢谢
所以,我能够解决这个问题。为此,我在 Feature 中添加了一个属性“siteRiskColor”,并根据风险值为其赋值
let riskId = site.riskId
var color = "B0E5A1"
if riskId == 1 {
color = "B0E5A1"
} else if riskId == 2 {
color = "99E9FF"
} else if riskId == 3 {
color = "FCD2A6"
} else if riskId == 4 {
color = "FBC3A9"
}
然后为上面提到的每种颜色添加不同的图像,并命名为与上面相同。然后,在为 un-clustered 样式图像制作图标时,我添加了以下行来选择不同的图像。
let site = MGLSymbolStyleLayer(identifier: "site", source: source)
site.iconImageName = NSExpression(forKeyPath: "siteRiskIcon")
成功了!
我正在尝试在 IOS 的 Mapbox 中实现集群。我想根据 MGLPointFeature 中的特定属性更改非集群 StyleLayer 的颜色。以下是单个功能的代码:
let feature = MGLPointFeature()
feature.coordinate = CLLocationCoordinate2D(latitude: site.latitude, longitude: site.longitude)
feature.attributes = ["id": site.siteId, "siteCode": site.siteCode, "risk": site.riskId]
在上面的代码片段中,我想使用此属性(“风险”:site.riskId)为使用以下代码设置的图标生成不同的颜色:
style.setImage(icon.withRenderingMode(.alwaysTemplate), forName: "icon")
let ports = MGLSymbolStyleLayer(identifier: "ports", source: source)
ports.iconImageName = NSExpression(forConstantValue: "icon")
ports.predicate = NSPredicate(format: "cluster != YES")
ports.iconAllowsOverlap = NSExpression(forConstantValue: true)
style.addLayer(ports)
以下是每个 riskId 的颜色:
let risks = [
0: Color.cellBackgroundColor,
1: UIColor.from(hexString: "B9E5D1"),
2: UIColor.from(hexString: "95E9FF"),
3: UIColor.from(hexString: "FCE2A6"),
4: UIColor.from(hexString: "FCE2A6")
]
我有一个想法,我可以使用 NSExpression 来获得这些结果作为特征属性。但是不知道如何实现它。谁能帮我完成这件事。谢谢
所以,我能够解决这个问题。为此,我在 Feature 中添加了一个属性“siteRiskColor”,并根据风险值为其赋值
let riskId = site.riskId
var color = "B0E5A1"
if riskId == 1 {
color = "B0E5A1"
} else if riskId == 2 {
color = "99E9FF"
} else if riskId == 3 {
color = "FCD2A6"
} else if riskId == 4 {
color = "FBC3A9"
}
然后为上面提到的每种颜色添加不同的图像,并命名为与上面相同。然后,在为 un-clustered 样式图像制作图标时,我添加了以下行来选择不同的图像。
let site = MGLSymbolStyleLayer(identifier: "site", source: source)
site.iconImageName = NSExpression(forKeyPath: "siteRiskIcon")
成功了!