基于聚类点计数的颜色聚类特征

Color clustered features based on clustered point counts

我正在使用 Xamarin.iOS 和 Mapbox iOS SDK(Naxam.Mapbox.iOS NuGet 包 here 开发应用程序。 我在 MapBox iOS SDK 网站上关注这个例子:https://docs.mapbox.com/ios/maps/examples/clustering/.

我在将这部分代码转换为 C# 时遇到问题:

// Color clustered features based on clustered point counts.
let stops = [
    20: UIColor.lightGray,
    50: UIColor.orange,
    100: UIColor.red,
    200: UIColor.purple
]

并且:

circlesLayer.circleColor = NSExpression(format: "mgl_step:from:stops:(point_count, %@, %@)", UIColor.lightGray, stops)

如果我这样做,我可以为群集设置独特的颜色:

circlesLayer.CircleColor = NSExpression.FromConstant(FromObject(UIColor.Green));

但如果我按照示例进行操作,我将无法做到这一点,在其中,表达式格式采用 3 个参数:stringUiColor, 数组

但在 C# NSExpression.FromConstant 中,最多接受 2 个参数:string 和一个 NSObject[],所以我创建了这个:(为了匹配考试中的数组 "stops")

NSDictionary[] stops = new NSDictionary[]
{
    new NSDictionary(new NSNumber(0), FromObject(UIColor.Green)),
    new NSDictionary(new NSNumber(20), FromObject(UIColor.Blue)),
    new NSDictionary(new NSNumber(100), FromObject(UIColor.Red))
};

但是没有成功,我应该怎么做?

您可以使用 NSExpression.FromFormat(string format, NSObject [] parameters) 来达到这个目的。

像这样:

circlesLayer.CircleColor = NSExpression.FromFormat ("mgl_step:from:stops:(point_count, %@, %@)", stops)

其中 stops 是你上面的字典。

试试这个:

NSDictionary[] stops = new NSDictionary[]
{
    new NSDictionary(new NSNumber(0f), FromObject(UIColor.Green)),
    new NSDictionary(new NSNumber(20f), FromObject(UIColor.Blue)),
    new NSDictionary(new NSNumber(100f), FromObject(UIColor.Red))
};

使用 nsfloat 可能是可行的方法

它应该是一个 nsfloat 而不是一个整数,所以定义第一个参数是这样的:

new NSNumber(0f)