#ios #swift #maps #mapbox #gis
Вопрос:
Я столкнулся с проблемой, когда я пытаюсь отобразить атрибуты слоя в MapBox для iOS при выполнении жеста касания, однако атрибуты отсутствуют в выбранном слое.
- Я создал 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)
}
»’
- Создал источник и добавил вышеуказанные функции.
- Добавлен слой заливки из исходного кода
- добавлен слой источника и заливки в 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)
»’
- Теперь я хотел бы видеть атрибуты, которые я добавил в слой, когда я нажимаю на него на карте
»’
@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, потому что объекты пусты.