更改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]

在上面的代码段中,我想使用此属性(“ 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)

及以下是每个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”,并根据风险值为其赋予了相应的值

public static boolean isNodePresent(BinaryTreeNode<Integer> root,int x){
        if(root==null)
            return false;
        
        boolean ans=false;
        
        if(root.data==x)
            return true;
        
        ans=isNodePresent(root.left,x);
                if(ans)
                return ans;
        ans=isNodePresent(root.right,x);
        return ans;

    }

,然后为上述每种颜色添加不同的图像,并将它们命名为与上面相同的名称。然后,在为非群集样式图像制作图标时,我添加了以下几行以选择不同的图像。

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

成功了!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...