Я пытаюсь реализовать кластеризацию в Mapbox в IOS. Я хочу изменить цвет некластеризованного StyleLayer в зависимости от конкретного атрибута в MGLPointFeature. Ниже приведен код для одной функции:
let feature = MGLPointFeature()
feature.coordinate = CLLocationCoordinate2D(latitude: site.latitude, longitude: site.longitude)
feature.attributes = ["id": site.siteId, "siteCode": site.siteCode, "risk": site.riskId]
в приведенном выше фрагменте я хочу использовать этот атрибут (risk: 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)
и следующие цвета для каждого идентификатора риска:
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 для атрибутов функций. Но понятия не имею, как это реализовать. Может ли кто-нибудь помочь мне сделать это. Спасибо
Итак, я смог решить эту проблему. Для этого я добавил атрибут siteRiskColor в Feature и присвоил ему значение, зависящее от значения риска, как
а затем добавил разные изображения для каждого цвета, упомянутого выше, и назовите их так же, как указано выше. Затем, создавая значок для некластеризованного изображения стиля, я добавил следующие строки для выбора разных изображений.
и это сработало!