Отображение информации о слое при касании жестом в TableView для iOS MapBox

#ios #swift #maps #mapbox #gis

Вопрос:

Я столкнулся с проблемой, когда я пытаюсь отобразить атрибуты слоя в MapBox для iOS при выполнении жеста касания, однако атрибуты отсутствуют в выбранном слое.

  1. Я создал MGLMultiPolygonFeature и добавил некоторую информацию из основных данных. Эта часть работает, и данные показывают

»’

 func addLocalRegensLayer() {

        let layerIdentifier = "local_regens_fill"

        let localRegens = Regen.All()
        var features: [MGLMultiPolygonFeature] = []
        for regen in localRegens {
            guard let wkt = regen.geometry else {
                continue
            }
            let geometry = try! MultiPolygon(wkt: wkt)
            let feature = MGLMultiPolygonFeature(multiPolygon: geometry)
            
            var regenAttr: [String:Any] = [:]
            // add to atributes from Core Data
            regenAttr["DISTRICT"] = regen.district ?? "DISTRICT Error"
            regenAttr["REGEN_ID"] = regen.id ?? "REGEN_ID Error"
            regenAttr["SPI_ACRES"] = regen.acres
            
            feature.attributes = regenAttr

            features.append(feature)
}
 

»’

  1. Создал источник и добавил вышеуказанные функции.
  2. Добавлен слой заливки из исходного кода
  3. добавлен слой источника и заливки в MapView

»’

 let source =  MGLShapeSource(identifier: "local_regens_source", features: features, options: nil)

let layerFill = MGLFillStyleLayer(identifier: "local_regens_fill", source: source)
layerFill.sourceLayerIdentifier = "local_regens_source"
layerFill.fillColor = NSExpression(forConstantValue: UIColor.red)

mapView.style?.addSource(source)
mapView.style?.addLayer(layerFill)
 

»’

  1. Теперь я хотел бы видеть атрибуты, которые я добавил в слой, когда я нажимаю на него на карте

»’

 @objc @IBAction func getInfoFromTap(sender: UITapGestureRecognizer) {

    let spot = sender.location(in: mapView)
    let features = mapView.visibleFeatures(at: spot, styleLayerIdentifiers: Set([layerIdentifier]))
    
   print(features)    // shows empty

}
 

»’

Проблема здесь в том, что объекты кажутся пустыми, и я предполагаю, что атрибуты слоя не добавляются в слой local_regens_fill, потому что объекты пусты.