Изменить цвет значка для некластеризованных маркеров в Mapbox IOS

Я пытаюсь реализовать кластеризацию в 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 для атрибутов функций. Но понятия не имею, как это реализовать. Может ли кто-нибудь помочь мне сделать это. Спасибо

См. также:  В C ++ вызывает ли инициализация ссылки или указателя с самим собой UB?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Sohail Khan

    Итак, я смог решить эту проблему. Для этого я добавил атрибут siteRiskColor в Feature и присвоил ему значение, зависящее от значения риска, как

    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"
                }
    

    а затем добавил разные изображения для каждого цвета, упомянутого выше, и назовите их так же, как указано выше. Затем, создавая значок для некластеризованного изображения стиля, я добавил следующие строки для выбора разных изображений.

    let site = MGLSymbolStyleLayer(identifier: "site", source: source)
     site.iconImageName = NSExpression(forKeyPath: "siteRiskIcon")
    

    и это сработало!

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: