Установить FillColor для MGLFillStyleLayer по атрибуту цветового объекта

Мы разрабатываем iOS-приложение и имеем проблему с настройкой цвета заливки MGLFillStyleLayer (MapBox iOS SDK).

У нас есть большой.geojson-файл, который анализируется и добавляется к стандартной карте MapBox. Каждый объект в geojson имеет атрибут "color" для установки цвета фона объекта. Цвет сохраняется в виде шестнадцатеричного кода.

Можно ли установить цвет для каждого объекта индивидуально, используя выражения MapBox или что-то вроде "forEach feature -> set fill-color"?

Мы пытались изменить цвет с помощью выражений, предлагаемых MapBox для стилизации ( https://docs.mapbox.com/ios/api/maps/4.1.1/for-style-authors.html), но не смогли выяснить как загрузить атрибут объекта в swift-функцию для генерации цвета. В примере карты map для heatbox ( https://docs.mapbox.com/ios/maps/examples/heatmap-example/) мы видели, что можно задать цвет заливки с помощью значения NSNumber-Value.

let colorDictionary: [NSNumber: UIColor] = [
0.0: .clear,
0.01: .white,
0.15: UIColor(red: 0.19, green: 0.30, blue: 0.80, alpha: 1.0),
0.5: UIColor(red: 0.73, green: 0.23, blue: 0.25, alpha: 1.0),
1: .yellow
]

Может быть, нам нужно определить некоторые фиксированные значения, такие как 1 = #db7851, 2 = .... и так далее, чтобы это сделать?

Для добавления данных геоджона мы используем следующий код

let data = try Data(contentsOf: url)

guard let shapeCollectionFeature = try MGLShape(data: data, encoding: String.Encoding.utf8.rawValue) as? MGLShapeCollectionFeature else {
                    fatalError("Could not cast to specified MGLShapeCollectionFeature")
}

// Create source and add it to the map style.
let source = MGLShapeSource(identifier: "flurstuecke_shape", shape: shapeCollectionFeature, options: nil)
style.addSource(source)

let fillLayer = MGLFillStyleLayer(identifier: "flurstuecke", source: source)
style.addLayer(fillLayer)

В целях тестирования мы добавили сенсорное событие для изменения цвета выбранной функции (только для тестирования выражений MapBox).

let spot = sender.location(in: mapView)
let features = mapView.visibleFeatures(at: spot, styleLayerIdentifiers: Set(["flurstuecke"]))

if let feature = features.first, let fbid = feature.attribute(forKey: "FBID") as? String {
  guard let layer = mapView.style?.layer(withIdentifier: "flurstuecke") as? MGLFillStyleLayer 
else {
  fatalError("Could not cast to specified MGLFillStyleLayer")
}

   layer.fillColor = NSExpression(format: "TERNARY(FBID = %@, %@, %@)", fbid, UIColor.green, UIColor.blue)
}

Мы надеемся, что кто-то может дать нам подсказку или документацию, которая поможет нам раскрасить каждую функцию. Спасибо:)

0 ответов

Использовать

layer.lineColor = NSExpression(forKeyPath: "цвет")

Примеры значений атрибута цвета geojson: Значение "цвет" может быть: [" RGB ",255,0,0], "красный"," #000000"

Другие вопросы по тегам